pax_global_header00006660000000000000000000000064151723550340014517gustar00rootroot0000000000000052 comment=e8fac6638fe2d97241aaf658f00ca19bd441e57f stimfit-0.17.1/000077500000000000000000000000001517235503400132645ustar00rootroot00000000000000stimfit-0.17.1/.github/000077500000000000000000000000001517235503400146245ustar00rootroot00000000000000stimfit-0.17.1/.github/workflows/000077500000000000000000000000001517235503400166615ustar00rootroot00000000000000stimfit-0.17.1/.github/workflows/ci.yml000066400000000000000000000267621517235503400200140ustar00rootroot00000000000000name: CI on: push: branches: - master pull_request: branches: - master jobs: ubuntu-stfio-pip: name: Ubuntu stfio pip build runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ cmake \ ninja-build \ g++ \ swig \ pkg-config \ libfftw3-dev \ libhdf5-dev \ liblapack-dev \ libblas-dev \ libopenblas-dev - name: Install stfio via pip run: | python -m pip install --upgrade pip python -m pip install . - name: Build wheel artifact run: | python -m pip wheel . --wheel-dir dist - name: Run stfio Python unit test run: | cd /tmp python "$GITHUB_WORKSPACE/src/pystfio/unittest_stfio.py" windows-msvc-smoke: name: Windows MSVC smoke runs-on: windows-latest timeout-minutes: 75 env: VCPKG_ROOT: ${{ github.workspace }}/vcpkg VCPKG_INSTALLED_DIR: ${{ github.workspace }}/vcpkg_installed VCPKG_BINARY_CACHE_DIR: ${{ github.workspace }}/vcpkg-binary-cache VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg-binary-cache VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg-binary-cache,readwrite steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Set up vcpkg uses: lukka/run-vcpkg@v11 with: vcpkgDirectory: ${{ env.VCPKG_ROOT }} - name: Restore vcpkg cache uses: actions/cache@v4 with: path: | ${{ env.VCPKG_INSTALLED_DIR }} ${{ env.VCPKG_BINARY_CACHE_DIR }} ${{ env.VCPKG_ROOT }}/packages ${{ env.VCPKG_ROOT }}/downloads key: windows-vcpkg-x64-ci-release-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json', 'cmake/triplets/x64-windows-ci-release.cmake') }} restore-keys: | windows-vcpkg-x64-ci-release- - name: Install Windows build dependencies (vcpkg) shell: pwsh run: | vcpkg install ` --overlay-triplets "$env:GITHUB_WORKSPACE/cmake/triplets" ` --triplet x64-windows-ci-release ` --x-install-root "$env:VCPKG_INSTALLED_DIR" - name: Verify vcpkg dependency layout shell: pwsh run: | $hdf5Share = "$env:VCPKG_INSTALLED_DIR/x64-windows-ci-release/share/hdf5" $hdf5Config = Join-Path $hdf5Share "hdf5-config.cmake" $hdf5Lib = "$env:VCPKG_INSTALLED_DIR/x64-windows-ci-release/lib/hdf5.lib" Write-Host "VCPKG_ROOT=$env:VCPKG_ROOT" Write-Host "VCPKG_INSTALLED_DIR=$env:VCPKG_INSTALLED_DIR" Write-Host "Checking $hdf5Config" Write-Host "Checking $hdf5Lib" if (-not (Test-Path $hdf5Config)) { throw "Missing HDF5 config file at $hdf5Config" } if (-not (Test-Path $hdf5Lib)) { throw "Missing HDF5 library at $hdf5Lib" } - name: Normalize wx include layout (release-only triplet) shell: pwsh run: | $wxRoot = "$env:VCPKG_INSTALLED_DIR/x64-windows-ci-release/lib" $wxReleaseSetup = Join-Path $wxRoot "mswu/wx/setup.h" $wxDebugSetupDir = Join-Path $wxRoot "mswud/wx" $wxDebugSetup = Join-Path $wxDebugSetupDir "setup.h" if (-not (Test-Path $wxReleaseSetup)) { throw "Missing wxWidgets release setup header at $wxReleaseSetup" } if (-not (Test-Path $wxDebugSetupDir)) { New-Item -ItemType Directory -Path $wxDebugSetupDir -Force | Out-Null } Copy-Item -Path $wxReleaseSetup -Destination $wxDebugSetup -Force Write-Host "Created release-only wx compatibility header at $wxDebugSetup" - name: Configure CMake (Windows smoke) shell: pwsh run: | cmake --preset ci-windows-msvc-smoke - name: Build container test target shell: pwsh run: | cmake --build --preset ci-windows-msvc-smoke-release --parallel - name: Run Windows smoke test shell: pwsh run: | $buildRoot = "$env:GITHUB_WORKSPACE/build/ci-windows-msvc-smoke" $runtimePaths = @( "$buildRoot/src/stimfit/Release", "$buildRoot/src/libstfio/Release", "$buildRoot/src/libstfnum/Release", "$env:VCPKG_INSTALLED_DIR/x64-windows-ci-release/bin" ) | Where-Object { Test-Path $_ } if ($runtimePaths.Count -gt 0) { $env:PATH = ($runtimePaths -join ';') + ';' + $env:PATH Write-Host "Prepended runtime PATH entries:" $runtimePaths | ForEach-Object { Write-Host " $_" } } ctest --test-dir build/ci-windows-msvc-smoke -C Release --output-on-failure --tests-regex stimfit_containers_test - name: Upload Windows smoke staging artifact uses: actions/upload-artifact@v4 with: name: windows-msvc-smoke-staging path: | build/ci-windows-msvc-smoke/CMakeCache.txt build/ci-windows-msvc-smoke/Testing/Temporary/LastTest.log build/ci-windows-msvc-smoke/src/test/Release/stimfit_containers_test.exe if-no-files-found: warn ubuntu-tests: name: Ubuntu test targets runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ cmake \ ninja-build \ g++ \ pkg-config \ libfftw3-dev \ libhdf5-dev \ libwxgtk3.2-dev \ liblapack-dev \ libblas-dev \ libopenblas-dev - name: Configure CMake run: | cmake -S . -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSTF_BUILD_TESTS=ON \ -DSTF_BUILD_NUMERIC_TESTS=ON \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=OFF - name: Build test targets run: | cmake --build build --parallel --target \ stimfit_containers_test \ stimfit_numeric_test - name: Run CTest run: | ctest --test-dir build --output-on-failure --tests-regex 'stimfit_(containers|numeric)_test' ubuntu-system-biosig: name: Ubuntu system biosig smoke runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ cmake \ ninja-build \ g++ \ pkg-config \ libbiosig-dev \ libfftw3-dev \ libhdf5-dev \ libwxgtk3.2-dev \ liblapack-dev \ libblas-dev \ libopenblas-dev - name: Verify pkg-config biosig metadata run: | pkg-config --modversion libbiosig || pkg-config --modversion biosig pkg-config --cflags --libs libbiosig || pkg-config --cflags --libs biosig - name: Configure CMake with system biosig run: | cmake -S . -B build-biosig -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SYSTEM - name: Build Stimfit with system biosig run: | cmake --build build-biosig --parallel --target stimfit macos-macports-smoke: name: macOS MacPorts smoke runs-on: macos-14 timeout-minutes: 45 steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Bootstrap MacPorts env: MACPORTS_PKG_URL: https://github.com/macports/macports-base/releases/download/v2.10.5/MacPorts-2.10.5-14-Sonoma.pkg run: | curl -L "$MACPORTS_PKG_URL" -o MacPorts.pkg sudo installer -pkg MacPorts.pkg -target / /opt/local/bin/port version { echo "/opt/local/bin" echo "/opt/local/sbin" } >> "$GITHUB_PATH" - name: Install MacPorts dependencies run: | sudo port -N selfupdate sudo port -N install \ cmake \ ninja \ pkgconfig \ fftw-3 \ hdf5 \ wxWidgets-3.2 sudo port select --set wxWidgets wxWidgets-3.2 || true if [[ -x /opt/local/bin/wx-config ]]; then WX_CONFIG=/opt/local/bin/wx-config else WX_CONFIG="$(port contents wxWidgets-3.2 | awk '/\/wx-config$/ { print $1; exit }')" fi if [[ -z "${WX_CONFIG}" || ! -x "${WX_CONFIG}" ]]; then echo "Failed to locate wx-config from MacPorts" >&2 port contents wxWidgets-3.2 port select --summary || true exit 1 fi echo "WX_CONFIG=${WX_CONFIG}" >> "$GITHUB_ENV" port select --summary || true "${WX_CONFIG}" --version "${WX_CONFIG}" --selected-config || true "${WX_CONFIG}" --list || true "${WX_CONFIG}" --cxxflags || true "${WX_CONFIG}" --libs std,aui || true - name: Configure CMake with MacPorts run: | WX_CONFIG_OPTIONS="--toolkit=osx_cocoa --unicode=yes --version=3.2" cmake -S . -B build-macos-macports -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/opt/local \ -DCMAKE_FIND_ROOT_PATH=/opt/local \ -DCMAKE_FRAMEWORK_PATH=/opt/local/Library/Frameworks \ -DCMAKE_FIND_FRAMEWORK=FIRST \ -DCMAKE_FIND_APPBUNDLE=LAST \ -DwxWidgets_CONFIG_EXECUTABLE="${WX_CONFIG}" \ -DwxWidgets_CONFIG_OPTIONS="${WX_CONFIG_OPTIONS}" \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=OFF \ -DSTF_BUILD_MODULE=OFF \ -DSTF_BUILD_TESTS=ON \ -DSTF_BUILD_NUMERIC_TESTS=ON \ -DSTF_MACOS_APP_BUNDLE=ON - name: Build Stimfit and test targets run: | cmake --build build-macos-macports --parallel --target \ stimfit \ stimfit_containers_test \ stimfit_numeric_test - name: Run MacPorts CTest run: | ctest --test-dir build-macos-macports --output-on-failure --tests-regex 'stimfit_(containers|numeric)_test' - name: Install Stimfit into staging run: | cmake --install build-macos-macports --prefix "$PWD/build-macos-macports/install" find "$PWD/build-macos-macports/install" -maxdepth 4 -print | sort > "$PWD/build-macos-macports/install-manifest.txt" - name: Upload minimal staging artifact uses: actions/upload-artifact@v4 with: name: macos-macports-staging path: | build-macos-macports/CMakeCache.txt build-macos-macports/install-manifest.txt build-macos-macports/install/stimfit.app if-no-files-found: warn stimfit-0.17.1/.github/workflows/docs.yml000066400000000000000000000063121517235503400203360ustar00rootroot00000000000000name: Docs on: push: branches: - master workflow_dispatch: permissions: contents: read concurrency: group: docs cancel-in-progress: true jobs: build: name: Build documentation site runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install system packages for docs run: | sudo apt-get update sudo apt-get install -y doxygen graphviz - name: Install Python packages for Sphinx run: | python -m pip install --upgrade pip python -m pip install -r doc/sphinx/requirements.txt - name: Build Sphinx HTML run: | sphinx-build -b html doc/sphinx doc/sphinx/.build/html - name: Build Doxygen HTML run: | mkdir -p doc/doxygen cd doc doxygen Doxyfile.in - name: Assemble Pages artifact run: | rm -rf site mkdir -p site/api cp -R doc/sphinx/.build/html/. site/ cp -R doc/doxygen/html/. site/api/ cp site/contents.html site/index.html - name: Upload assembled site artifact uses: actions/upload-artifact@v4 with: name: docs-site path: site deploy: name: Publish to gh-pages branch needs: build runs-on: ubuntu-latest permissions: contents: write steps: - name: Download assembled site artifact uses: actions/download-artifact@v4 with: name: docs-site path: site - name: Publish generated site to gh-pages uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_branch: gh-pages publish_dir: site force_orphan: false keep_files: false publish-wiki: name: Sync wiki landing page needs: build runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout repository uses: actions/checkout@v4 - name: Clone wiki repository env: WIKI_TOKEN: ${{ secrets.STIMFIT_WIKI_PUSH_TOKEN }} run: | if [ -z "${WIKI_TOKEN}" ]; then echo "STIMFIT_WIKI_PUSH_TOKEN is not configured; skipping wiki sync" exit 0 fi git clone "https://x-access-token:${WIKI_TOKEN}@github.com/neurodroid/stimfit.wiki.git" wiki - name: Update wiki landing page content run: | cp doc/wiki/Stimfit.md wiki/Stimfit.md - name: Commit and push wiki updates env: WIKI_TOKEN: ${{ secrets.STIMFIT_WIKI_PUSH_TOKEN }} run: | cd wiki git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" if git diff --quiet -- Stimfit.md; then echo "No wiki changes to publish" exit 0 fi git add Stimfit.md git commit -m "Sync Stimfit wiki landing page from docs workflow" git push origin HEAD:master stimfit-0.17.1/.gitignore000066400000000000000000000052371517235503400152630ustar00rootroot00000000000000*~ *.obj *.ncb *.aux *.log *.bak *.old *.dvi *.dmg *.backup *.lo *.pyc *.bbl *.blg *.idx *.ilg *.ind *.out *.log *.exe *.swp *.orig .DS_Store .AppleDouble config.status .deps/* .externalToolBuilders/* build/* /build*/ /_install/ /vcpkg_installed/ .vscode/ dist/debian/build dist/debian/build/* osc osc/* test.h5 !src/pystfio/test.h5 README INSTALL stfconf.h # doc build doc/stfbook.ps doc/html/* doc/latex/* doc/doxygen/* doc/DoxygenLayout.xml doc/sphinx/.build/* doc/sphinx/.build/doctrees/* doc/sphinx/.build/latex/* doc/sphinx/.static/* autom4te.cache/* lt~obsolete.m4 m4/lt~obsolete.m4 *.sln.cache dist/windows/VS2008/libstfio/Debug dist/windows/VS2008/libstfio/Release dist/windows/VS2008/libstfnum/Debug dist/windows/VS2008/libstfnum/Release dist/windows/VS2008/libstimfit/Debug dist/windows/VS2008/libstimfit/Release dist/windows/VS2008/pystf/Debug dist/windows/VS2008/pystf/Release dist/windows/VS2008/pystfio/Debug dist/windows/VS2008/pystfio/Release dist/windows/VS2008/Stimfit/Debug dist/windows/VS2008/Stimfit/Release dist/windows/VS2008/libstfio/x64/Debug dist/windows/VS2008/libstfio/x64/Release dist/windows/VS2008/libstfnum/x64/Debug dist/windows/VS2008/libstfnum/x64/Release dist/windows/VS2008/libstimfit/x64/Debug dist/windows/VS2008/libstimfit/x64/Release dist/windows/VS2008/pystf/x64/Debug dist/windows/VS2008/pystf/x64/Release dist/windows/VS2008/pystfio/x64/Debug dist/windows/VS2008/pystfio/x64/Release dist/windows/VS2008/Stimfit/x64/Debug dist/windows/VS2008/Stimfit/x64/Release dist/windows/libs *.user # macports PortIndex* dist/macosx/macports/science/stimfit/work dist/macosx/macports/science/stimfit/work/* dist/macosx/macports/python/py-stfio/work dist/macosx/macports/python/py-stfio/work/* dist/macosx/macports/*.diff dist/macosx/macports/upload_stimfit dist/macosx/macports/insert_checksums.sh dist/macosx/package.pmdoc/index.xml dist/macosx/scripts/mkimage.sh # Debian dist/debian/mkdeb.sh dist/debian/mkquick.sh # Local Debian packaging/build artifacts /deb/ *.deb *.ddeb *.buildinfo *.changes *.dsc *.debian.tar.* *.orig.tar.* /stimfit-*.tar.gz # build files *.o *.a *.la *.lai *.so* *.Plo Makefile libtool stimfit.plist # stimfit stamp-h1 stfswig_wrap.c* pystf_wrap.c* stf.py stfioswig_wrap.c* pystfio_wrap.c* stfio.py setup.py dist/conda/py-stfio-debug/meta.yaml dist/conda/py-stfio/meta.yaml .libs/ .deps/ src/stimfit/py/.libs/ *Makefile.in aclocal.m4 config.guess config.sub configure depcomp install-sh ltmain.sh test-driver m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 missing compile #stf_init.py # stimfittest stimfittest Portfile /debian/mkdeb.sh # Kilo Code .kilo/* !.kilo/command/ !.kilo/command/*.md !.kilo/agent/ !.kilo/agent/*.md stimfit-0.17.1/.gitmodules000066400000000000000000000001311517235503400154340ustar00rootroot00000000000000[submodule "src/biosig"] path = src/biosig url = https://git.code.sf.net/p/biosig/code stimfit-0.17.1/AUTHORS000066400000000000000000000000001517235503400143220ustar00rootroot00000000000000stimfit-0.17.1/BRANCHES.md000066400000000000000000000045221517235503400147760ustar00rootroot00000000000000# Branch and packaging workflow This repository intentionally maintains two upstream development lines. ## Branch roles - `master` - primary upstream branch - tracks the modern CMake-based toolchain work - branch that downstreams should assume for current development unless documented otherwise - `0.16` - legacy upstream maintenance branch - reserved for work that must stay compatible with the legacy 0.16/autotools line - `debian/sid` - Debian unstable packaging branch for the current upstream line - expected to merge from `master` - `debian/sid-0.16` - Debian packaging branch for the legacy upstream line - expected to merge from `0.16` ## Maintainer expectations - New upstream feature work should target `master` - Legacy-only fixes should target `0.16` - Debian unstable packaging updates for the current line should target `debian/sid` - Debian packaging changes specific to the legacy line should target `debian/sid-0.16` - Before changing GitHub branch protections or CI filters, verify that required checks are attached to the correct branch names ## Documentation and helper scripts - [dist/macosx/macports/mk_diff.sh](dist/macosx/macports/mk_diff.sh) assumes the upstream comparison branch is `master` by default, but this can be overridden with `UPSTREAM_BRANCH` - [.gbp.conf](.gbp.conf) should keep `master` as the primary upstream branch and `debian/sid` as the Debian unstable packaging branch ## GitHub and downstream follow-up after branch renames After any branch rename or branch-role swap, also update: - repository default branch - branch protection rules - required status checks - open pull request base branches - any GitHub Actions branch filters - downstream packaging references and maintainer notes ## Suggested local retargeting after the rename Typical local maintenance commands after the server-side branch changes are: ```bash git fetch origin --prune git branch -m debian/sid-legacy-autotools debian/sid-0.16 git branch -m master 0.16 git branch -m pr/msvc-toolchain-compat master git branch --set-upstream-to=origin/master master git branch --set-upstream-to=origin/0.16 0.16 git branch --set-upstream-to=origin/debian/sid debian/sid git branch --set-upstream-to=origin/debian/sid-0.16 debian/sid-0.16 git remote set-head origin -a ``` Run the rename commands that apply to the branches present in a given clone. stimfit-0.17.1/BUILDING.md000066400000000000000000000161531517235503400150110ustar00rootroot00000000000000# Building Stimfit Stimfit now uses the CMake-based build flow on all supported platforms. The legacy autotools bootstrap path has been deprecated, and [`autogen.sh`](autogen.sh) now stops with a deprecation message instead of generating build files. ## Supported entry points Use the platform helper script that matches your environment: - GNU/Linux: [`build_linux_cmake.sh`](build_linux_cmake.sh) - macOS: [`build_macos_cmake.sh`](build_macos_cmake.sh) - Windows with Visual Studio/MSVC: [`build_windows_msvc.ps1`](build_windows_msvc.ps1) These scripts are thin wrappers around CMake presets and cache options. They standardize the repository's preferred configure, build, install, and packaging steps so local builds follow the same structure as current CI and migration work. ## Python package builds (`stfio`) The standalone `stfio` module can now be targeted through [`pyproject.toml`](pyproject.toml) using a CMake-backed `pip` build flow. This is intended for the Stimfit-independent file I/O module only, not the full Stimfit GUI application. Example local build commands: ```bash python -m pip install . python -m pip wheel . ``` Use a Python interpreter that provides development headers for CMake discovery. On macOS, the system or Xcode-provided Python may be insufficient for native builds; a framework or package-manager Python is typically required. This packaging path forces [`STF_BUILD_MODULE`](cmake/StimfitOptions.cmake:3) and uses a wheel-oriented install layout for the contents of [`src/pystfio`](src/pystfio). Full Stimfit application builds should still follow the platform-specific CMake helper scripts described below. ## GNU/Linux For a full Debian/Ubuntu GUI build with the current CMake flow, install at least: ```bash sudo apt-get update sudo apt-get install -y \ cmake \ ninja-build \ g++ \ pkg-config \ swig \ libbiosig-dev \ libfftw3-dev \ libhdf5-dev \ libwxgtk3.2-dev \ liblapack-dev \ libblas-dev \ libopenblas-dev \ python3-dev \ python3-numpy ``` If you want embedded Python support in the GUI build, make sure the selected `python3` interpreter also provides development headers and that the environment includes the required runtime Python packages such as `wxPython`, `IPython`, and `numpy`. Run [`build_linux_cmake.sh`](build_linux_cmake.sh) from the repository root: ```bash ./build_linux_cmake.sh ``` Direct CMake preset entry points: ```bash cmake --preset linux-ninja-python cmake --build --preset linux-ninja-python-build ``` No-Python variant: ```bash cmake --preset linux-ninja cmake --build --preset linux-ninja-build ``` Useful variants: ```bash ./build_linux_cmake.sh --without-python ./build_linux_cmake.sh --install ./build_linux_cmake.sh --package-generator TGZ ``` Explicit no-Python, no-Biosig fallback build: ```bash cmake -S . -B build/linux-fallback -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=OFF cmake --build build/linux-fallback ``` What the script does: - configures a CMake build tree under `build/linux-*` - enables or disables embedded Python support - prefers the system Biosig integration (`STF_WITH_BIOSIG=ON`, `STF_BIOSIG_PROVIDER=SYSTEM`) - builds with [`cmake`](CMakeLists.txt) - optionally installs into a local prefix under `build/linux-*/install` - optionally runs `cpack` to create distributable artifacts The script also tries to locate a usable Python interpreter with development headers before enabling Python support. On Debian/Ubuntu, system Biosig detection now checks `pkg-config` first (`libbiosig`/`biosig`) and falls back to direct library/header probing if no pkg-config metadata is available. ## macOS Run [`build_macos_cmake.sh`](build_macos_cmake.sh) from the repository root: ```bash ./build_macos_cmake.sh ``` Direct CMake preset entry points: ```bash cmake --preset macos-ninja-app-python cmake --build --preset macos-ninja-app-python-stimfit ``` No-Python variant: ```bash cmake --preset macos-ninja-app cmake --build --preset macos-ninja-app-stimfit ``` Python-enabled app bundle build: ```bash ./build_macos_cmake.sh --with-python ``` What the script does: - configures a dedicated macOS CMake build tree under `build/macos-app*` - enables creation of a `.app` bundle through `STF_MACOS_APP_BUNDLE=ON` - uses the Biosig submodule-backed CMake path (`STF_BIOSIG_PROVIDER=SUBMODULE`) - locates a compatible MacPorts Python and, when available, a matching `wx-config` - builds and installs the bundle into `build/macos-app*/install` - verifies that `stimfit.app` was produced successfully This is the preferred path for modern macOS builds because it centralizes bundle layout and runtime-path handling in the CMake toolchain. ## Windows (MSVC) Run [`build_windows_msvc.ps1`](build_windows_msvc.ps1) from a PowerShell session: ```powershell ./build_windows_msvc.ps1 ``` Direct CMake preset entry points: ```powershell cmake --preset vs2022-vcpkg-wx-hdf5-biosig-patched cmake --build --preset vs2022-release-all-biosig-patched ``` Python-enabled build: ```powershell ./build_windows_msvc.ps1 -WithPython ``` Packaging examples: ```powershell ./build_windows_msvc.ps1 -PackageGenerator INNOSETUP ./build_windows_msvc.ps1 -PackageGenerator ZIP ``` What the script does: - prepares `vcpkg` dependency locations from environment variables or Visual Studio defaults - installs the repository's required Windows dependencies through the custom triplet in [`cmake/triplets/x64-windows-ci-release.cmake`](cmake/triplets/x64-windows-ci-release.cmake) - selects the appropriate Visual Studio configure preset from [`CMakePresets.json`](CMakePresets.json) - runs CMake configure, build, and install steps for the chosen preset - optionally runs `cpack` to generate either an Inno Setup installer or a ZIP package This script mirrors the repository's active Windows CI-oriented workflow more closely than invoking raw commands manually. For the patched-submodule biosig provider on Windows, Stimfit now requires `src/biosig` to match the pinned upstream tag `v3.9.3` exactly. Configure fails fast when the submodule HEAD differs from that tag's commit. ### Windows Python refresh behavior For Python-enabled Windows installs, the CMake cache option `STF_WINDOWS_PYTHON_FULL_REFRESH` controls how stdlib and `stf-site-packages` are synchronized: - `OFF` (default): fast mode. Install skips repeated deep per-file up-to-date checks by using a signature marker and only refreshes when relevant source roots/package selection change. - `ON`: full refresh mode. Restores the traditional per-file CMake install behavior for stdlib and selected site-packages. Examples: ```powershell # Default (fast mode) cmake --preset vs2022-vcpkg-wx-hdf5-python314-biosig-patched # Opt-in full refresh/check mode cmake --preset vs2022-vcpkg-wx-hdf5-python314-biosig-patched -DSTF_WINDOWS_PYTHON_FULL_REFRESH=ON ``` Python runtime DLL handling is unchanged by this option. ## Manual CMake usage If you need a custom local workflow, you can invoke CMake directly. The repository root is still the source directory: ```bash cmake -S . -B build/custom cmake --build build/custom ``` For platform-specific defaults, use the helper scripts above as the authoritative examples. stimfit-0.17.1/CMAKE_MIGRATION.md000066400000000000000000000133541517235503400160450ustar00rootroot00000000000000# CMake Migration Bootstrap This repository now includes the active CMake build toolchain for Stimfit. For end-user source-build entry points, see [`BUILDING.md`](BUILDING.md). ## What was added - Top-level [`CMakeLists.txt`](CMakeLists.txt) - Shared CMake module directory [`cmake/`](cmake) - [`cmake/StimfitOptions.cmake`](cmake/StimfitOptions.cmake) - [`cmake/StimfitDependencies.cmake`](cmake/StimfitDependencies.cmake) - [`cmake/StimfitToolchain.cmake`](cmake/StimfitToolchain.cmake) - [`cmake/StimfitMigration.cmake`](cmake/StimfitMigration.cmake) - Generated config header template [`stfconf.h.in`](stfconf.h.in) - Source tree entrypoint [`src/CMakeLists.txt`](src/CMakeLists.txt) - Per-component scaffold `CMakeLists.txt` files: - [`src/libstfio/CMakeLists.txt`](src/libstfio/CMakeLists.txt) - [`src/libstfnum/CMakeLists.txt`](src/libstfnum/CMakeLists.txt) - BIOSIG integration component CMake file - [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) - [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt) - [`src/stimfit/py/CMakeLists.txt`](src/stimfit/py/CMakeLists.txt) ## Current scope The CMake tree now defines real targets for the main migration path: - Libraries: - `stfnum` from [`src/libstfnum/CMakeLists.txt`](src/libstfnum/CMakeLists.txt) - `stfio` from [`src/libstfio/CMakeLists.txt`](src/libstfio/CMakeLists.txt) - BioSig support from the selected provider (when enabled) - `stimfit_core` from [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt) - Executables: - `stimfit` - `stimfittest` (with `ctest` registration) - Python modules (when enabled): - `_stfio` from [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) - `pystf` from [`src/stimfit/py/CMakeLists.txt`](src/stimfit/py/CMakeLists.txt) ## macOS parity updates (build + install) The CMake migration now includes a dedicated macOS runtime policy module: - [`cmake/StimfitMacOS.cmake`](cmake/StimfitMacOS.cmake) This adds a single helper, `stf_apply_macos_runtime_policy()`, and applies it to installable libraries/modules/executables so loader-path behavior is managed in CMake instead of legacy post-install shell rewriting. Applied targets include: - `stfio` in [`src/libstfio/CMakeLists.txt`](src/libstfio/CMakeLists.txt) - `stfnum` in [`src/libstfnum/CMakeLists.txt`](src/libstfnum/CMakeLists.txt) - BioSig support target(s) from the selected provider configuration - `stimfit_core` in [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt) - `pystf` in [`src/stimfit/py/CMakeLists.txt`](src/stimfit/py/CMakeLists.txt) - `_stfio` in [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) - `stimfit` and `stimfittest` in [`CMakeLists.txt`](CMakeLists.txt) Additionally, macOS wx detection now auto-probes common MacPorts wx-config locations when `wxWidgets_CONFIG_EXECUTABLE` is not already set (including stale `-NOTFOUND` cache values), in [`cmake/StimfitDependencies.cmake`](cmake/StimfitDependencies.cmake). ## MacPorts Stimfit port migration to CMake backend The active Stimfit MacPorts port files were migrated from Autotools-style `configure.args` to CMake-driven build/install flow: - [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) - [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile) Key changes: - Add `PortGroup cmake 1.1` - Configure with CMake cache variables (`STF_ENABLE_PYTHON`, `STF_WITH_BIOSIG`, `STF_BIOSIG_PROVIDER`, `STF_BUILD_MODULE`, `STF_BUILD_TESTS`) - Set `configure.pre_args` to `-S -B ` - Use CMake for build (`cmake --build`) and destroot install (`cmake --install`) - Map Python variants to `-DPython3_EXECUTABLE=...` - Map `atlas` variant to `-DBLA_VENDOR=ATLAS` ## Option mapping from legacy Autotools The following CMake options preserve the intent of the former high-level Autotools switches: - `STF_BUILD_MODULE` ⇔ `--enable-module` - `STF_ENABLE_PYTHON` ⇔ `--enable-python` - `STF_ENABLE_PSLOPE` ⇔ `--enable-pslope` - `STF_ENABLE_AUI` ⇔ `--enable-aui` - `STF_BUILD_DEBIAN` ⇔ `--enable-debian` - `STF_WITH_BIOSIG` plus `STF_BIOSIG_PROVIDER` ⇔ biosig selection flags - `STF_HDF5_PREFIX` ⇔ `--with-hdf5-prefix` Compatibility behavior already included: - Enabling `STF_BUILD_MODULE` forces `STF_ENABLE_PYTHON=ON` - Selecting `STF_BIOSIG_PROVIDER=SUBMODULE` or `PATCHED_SUBMODULE` chooses the bundled BioSig source ## How to configure ```bash cmake -S . -B build/cmake-bootstrap ``` On Windows/cmd with Scoop MinGW + Ninja: ```bat set "PATH=C:\Users\C02380\scoop\apps\mingw\current\bin;C:\Users\C02380\scoop\apps\ninja\current;%PATH%" "C:\Users\C02380\scoop\shims\cmake.exe" -S . -B build\cmake-migrated -G Ninja -DCMAKE_C_COMPILER=C:/Users/C02380/scoop/apps/mingw/current/bin/gcc.exe -DCMAKE_CXX_COMPILER=C:/Users/C02380/scoop/apps/mingw/current/bin/g++.exe ``` You should see a migration summary printed by [`stf_print_configuration_summary()`](cmake/StimfitMigration.cmake:3). ## External dependencies currently required The CMake chain follows Autotools behavior and expects development libraries for: - HDF5 (mandatory; or provide [`STF_HDF5_PREFIX`](cmake/StimfitOptions.cmake)) - FFTW3 - LAPACK/BLAS (or OpenBLAS) - wxWidgets (non-module builds) - Python3 + SWIG (+ NumPy headers) when Python features are enabled ## Next migration steps 1. Validate macOS install-name/runtime behavior with full build+install+`otool -L` checks for GUI and Python-enabled variants. 2. Verify MacPorts CMake backend behavior in a real port build (`port -v destroot stimfit`) and refine option mapping if needed. 3. Tighten dependency mapping (wx variants, Python/wxPython nuances, optional fallbacks). 4. Continue simplifying legacy migration notes as the CMake-only workflow becomes the sole maintained build path. stimfit-0.17.1/CMakeLists.txt000066400000000000000000000741761517235503400160430ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.21) set(STF_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/VERSION") if(NOT EXISTS "${STF_VERSION_FILE}") message(FATAL_ERROR "Missing VERSION file at ${STF_VERSION_FILE}") endif() file(READ "${STF_VERSION_FILE}" STF_VERSION_RAW) string(STRIP "${STF_VERSION_RAW}" STF_VERSION) if(STF_VERSION STREQUAL "") message(FATAL_ERROR "VERSION file is empty") endif() project( stimfit VERSION ${STF_VERSION} DESCRIPTION "Stimfit electrophysiology analysis suite" LANGUAGES C CXX ) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(GNUInstallDirs) include(CTest) include(StimfitOptions) include(StimfitDependencies) include(StimfitToolchain) include(StimfitMacOS) include(StimfitMigration) set(STF_COMPONENT_CORE "core") set(STF_COMPONENT_PYTHON "python") set(STF_COMPONENT_TESTS "tests") if(WIN32) set(STF_RUNTIME_DEPENDENCY_DIRS "${CMAKE_BINARY_DIR}/src/stimfit/$" "${CMAKE_BINARY_DIR}/src/libstfio/$" "${CMAKE_BINARY_DIR}/src/libstfnum/$" "$ENV{SystemRoot}/System32" ) if(DEFINED STF_BIOSIG_RUNTIME_DIR AND EXISTS "${STF_BIOSIG_RUNTIME_DIR}") list(APPEND STF_RUNTIME_DEPENDENCY_DIRS "${STF_BIOSIG_RUNTIME_DIR}") elseif(DEFINED BIOSIG_LIBRARY AND EXISTS "${BIOSIG_LIBRARY}") get_filename_component(_stf_biosig_lib_dir "${BIOSIG_LIBRARY}" DIRECTORY) list(APPEND STF_RUNTIME_DEPENDENCY_DIRS "${_stf_biosig_lib_dir}") unset(_stf_biosig_lib_dir) endif() if(DEFINED wxWidgets_LIB_DIR AND NOT "${wxWidgets_LIB_DIR}" STREQUAL "") file(TO_CMAKE_PATH "${wxWidgets_LIB_DIR}" _stf_wx_lib_dir) list(APPEND STF_RUNTIME_DEPENDENCY_DIRS "${_stf_wx_lib_dir}") get_filename_component(_stf_wx_lib_parent "${_stf_wx_lib_dir}" DIRECTORY) if(EXISTS "${_stf_wx_lib_parent}/bin") list(APPEND STF_RUNTIME_DEPENDENCY_DIRS "${_stf_wx_lib_parent}/bin") endif() if(EXISTS "${_stf_wx_lib_parent}/tools/wxwidgets") list(APPEND STF_RUNTIME_DEPENDENCY_DIRS "${_stf_wx_lib_parent}/tools/wxwidgets") endif() unset(_stf_wx_lib_dir) unset(_stf_wx_lib_parent) endif() if(MSVC) file(GLOB STF_MSVC_REDIST_DIRS "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Redist/MSVC/*/x64/Microsoft.VC143.CRT" ) list(APPEND STF_RUNTIME_DEPENDENCY_DIRS ${STF_MSVC_REDIST_DIRS}) endif() if(STF_ENABLE_PYTHON) if(DEFINED Python3_RUNTIME_LIBRARY_DIRS) list(APPEND STF_RUNTIME_DEPENDENCY_DIRS ${Python3_RUNTIME_LIBRARY_DIRS}) endif() if(DEFINED Python3_LIBRARY_DIRS) list(APPEND STF_RUNTIME_DEPENDENCY_DIRS ${Python3_LIBRARY_DIRS}) endif() endif() set(STF_INSTALL_RUNTIME_DEPENDENCY_ARGS RUNTIME_DEPENDENCIES DIRECTORIES ${STF_RUNTIME_DEPENDENCY_DIRS} # Exclude well-known system runtime DLL families. PRE_EXCLUDE_REGEXES "api-ms-.*" "ext-ms-.*" ".*[/\\]Windows[/\\].*" POST_EXCLUDE_REGEXES ".*[/\\]system32[/\\].*" ".*[/\\]SysWOW64[/\\].*" ) else() set(STF_INSTALL_RUNTIME_DEPENDENCY_ARGS) endif() if(UNIX AND NOT APPLE AND NOT STF_BUILD_MODULE) if(STF_BUILD_DEBIAN) set(STF_LINUX_INSTALL_RPATH "/usr/lib/stimfit") else() set(STF_LINUX_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/stimfit") endif() set(CMAKE_INSTALL_RPATH "${STF_LINUX_INSTALL_RPATH}") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) endif() set(STF_CONFIG_HEADER_TEMPLATE "${CMAKE_SOURCE_DIR}/stfconf.h.in") if(NOT EXISTS "${STF_CONFIG_HEADER_TEMPLATE}") message(FATAL_ERROR "Could not find stfconf.h.in in ${CMAKE_SOURCE_DIR}") endif() configure_file("${STF_CONFIG_HEADER_TEMPLATE}" stfconf.h) unset(STF_CONFIG_HEADER_TEMPLATE) if(APPLE AND STF_MACOS_APP_BUNDLE) set(PACKAGE_VERSION "${PROJECT_VERSION}") configure_file( ${CMAKE_SOURCE_DIR}/dist/macosx/stimfit.plist.in ${CMAKE_CURRENT_BINARY_DIR}/stimfit.Info.plist @ONLY ) endif() stf_print_configuration_summary() add_subdirectory(src) if(NOT STF_BUILD_MODULE) if(WIN32) add_executable(stimfit WIN32 src/stimfit/gui/main.cpp) elseif(APPLE AND STF_MACOS_APP_BUNDLE) add_executable(stimfit MACOSX_BUNDLE src/stimfit/gui/main.cpp) else() add_executable(stimfit src/stimfit/gui/main.cpp) endif() if(APPLE AND STF_MACOS_APP_BUNDLE) set_target_properties(stimfit PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/stimfit.Info.plist" MACOSX_BUNDLE_ICON_FILE "stimfit.icns" ) target_sources(stimfit PRIVATE ${CMAKE_SOURCE_DIR}/dist/macosx/stimfit.icns) set_source_files_properties(${CMAKE_SOURCE_DIR}/dist/macosx/stimfit.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" ) file(GLOB_RECURSE _stf_macos_toolbar_pngs CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/src/stimfit/res/toolbar/*.png" ) if(_stf_macos_toolbar_pngs) target_sources(stimfit PRIVATE ${_stf_macos_toolbar_pngs}) foreach(_stf_toolbar_png IN LISTS _stf_macos_toolbar_pngs) file(RELATIVE_PATH _stf_toolbar_rel_dir "${CMAKE_SOURCE_DIR}/src/stimfit/res/toolbar" "${_stf_toolbar_png}" ) get_filename_component(_stf_toolbar_rel_dir "${_stf_toolbar_rel_dir}" DIRECTORY) set(_stf_toolbar_package_location "Resources/toolbar") if(NOT _stf_toolbar_rel_dir STREQUAL "") string(APPEND _stf_toolbar_package_location "/${_stf_toolbar_rel_dir}") endif() set_source_files_properties("${_stf_toolbar_png}" PROPERTIES MACOSX_PACKAGE_LOCATION "${_stf_toolbar_package_location}" ) endforeach() unset(_stf_toolbar_png) unset(_stf_toolbar_rel_dir) unset(_stf_toolbar_package_location) endif() unset(_stf_macos_toolbar_pngs) endif() target_link_libraries( stimfit PRIVATE stimfit_config stimfit_core stfio stfnum stimfit::wx stimfit::fftw3 stimfit::lapack ) stf_apply_macos_runtime_policy(stimfit) if(APPLE AND STF_MACOS_APP_BUNDLE) install( TARGETS stimfit BUNDLE DESTINATION . COMPONENT ${STF_COMPONENT_CORE} ) else() install( TARGETS stimfit ${STF_INSTALL_RUNTIME_DEPENDENCY_ARGS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} ) endif() if(UNIX AND NOT APPLE) if(EXISTS "${CMAKE_SOURCE_DIR}/debian/stimfit.desktop") install( FILES "${CMAKE_SOURCE_DIR}/debian/stimfit.desktop" DESTINATION "${CMAKE_INSTALL_DATADIR}/applications" COMPONENT ${STF_COMPONENT_CORE} ) endif() foreach(_stf_icon_size 16 32 48 128 256 512) set(_stf_icon_src "${CMAKE_SOURCE_DIR}/src/stimfit/res/stimfit_${_stf_icon_size}.png") if(EXISTS "${_stf_icon_src}") install( FILES "${_stf_icon_src}" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${_stf_icon_size}x${_stf_icon_size}/apps" RENAME "stimfit.png" COMPONENT ${STF_COMPONENT_CORE} ) endif() unset(_stf_icon_src) endforeach() unset(_stf_icon_size) if(EXISTS "${CMAKE_SOURCE_DIR}/src/stimfit/res/toolbar") install( DIRECTORY "${CMAKE_SOURCE_DIR}/src/stimfit/res/toolbar/" DESTINATION "${CMAKE_INSTALL_DATADIR}/stimfit/toolbar" COMPONENT ${STF_COMPONENT_CORE} ) endif() endif() if(WIN32 AND DEFINED wxWidgets_LIB_DIR AND EXISTS "${wxWidgets_LIB_DIR}") file(TO_CMAKE_PATH "${wxWidgets_LIB_DIR}" _stf_wx_lib_dir_install) install( DIRECTORY "${_stf_wx_lib_dir_install}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "wx*.dll" ) # vcpkg places wx DLLs in /bin and /tools/wxwidgets, not lib/. get_filename_component(_stf_wx_install_parent "${_stf_wx_lib_dir_install}" DIRECTORY) if(EXISTS "${_stf_wx_install_parent}/bin") install( DIRECTORY "${_stf_wx_install_parent}/bin/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "wx*.dll" ) endif() if(EXISTS "${_stf_wx_install_parent}/tools/wxwidgets") install( DIRECTORY "${_stf_wx_install_parent}/tools/wxwidgets/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "wx*.dll" ) endif() unset(_stf_wx_lib_dir_install) unset(_stf_wx_install_parent) endif() if(WIN32 AND DEFINED STF_HDF5_PREFIX) file(TO_CMAKE_PATH "${STF_HDF5_PREFIX}" _stf_hdf5_prefix_install) if(EXISTS "${_stf_hdf5_prefix_install}/bin") install( DIRECTORY "${_stf_hdf5_prefix_install}/bin/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "hdf*.dll" PATTERN "szip.dll" # HDF5 Szip filter codec PATTERN "aec.dll" # libaec (Adaptive Entropy Coding, Szip replacement) ) endif() if(EXISTS "${_stf_hdf5_prefix_install}/lib") install( DIRECTORY "${_stf_hdf5_prefix_install}/lib/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "hdf*.dll" PATTERN "szip.dll" PATTERN "aec.dll" ) endif() unset(_stf_hdf5_prefix_install) endif() # ZLIB_LIBRARY_RELEASE is a CMake cache variable populated by find_package(ZLIB) # from any subdirectory; ZLIB_LIBRARIES is a local variable that doesn't # propagate to the parent scope, so we use the cache variable instead. if(WIN32 AND DEFINED ZLIB_LIBRARY_RELEASE AND EXISTS "${ZLIB_LIBRARY_RELEASE}") get_filename_component(_stf_zlib_lib_dir "${ZLIB_LIBRARY_RELEASE}" DIRECTORY) get_filename_component(_stf_zlib_prefix "${_stf_zlib_lib_dir}" DIRECTORY) foreach(_stf_zlib_search_dir IN ITEMS "${_stf_zlib_lib_dir}" "${_stf_zlib_prefix}/bin") if(EXISTS "${_stf_zlib_search_dir}") install( DIRECTORY "${_stf_zlib_search_dir}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "zlib*.dll" PATTERN "zlib1.dll" ) endif() endforeach() unset(_stf_zlib_search_dir) unset(_stf_zlib_lib_dir) unset(_stf_zlib_prefix) endif() if(WIN32 AND DEFINED FFTW3_LIBRARY AND EXISTS "${FFTW3_LIBRARY}") get_filename_component(_fftw3_lib_dir "${FFTW3_LIBRARY}" DIRECTORY) get_filename_component(_fftw3_prefix "${_fftw3_lib_dir}" DIRECTORY) # Search both the lib dir (legacy layouts) and the sibling bin dir (vcpkg layout). foreach(_fftw3_search_dir IN ITEMS "${_fftw3_lib_dir}" "${_fftw3_prefix}/bin") if(EXISTS "${_fftw3_search_dir}") install( DIRECTORY "${_fftw3_search_dir}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "libfftw3*.dll" PATTERN "fftw3*.dll" ) endif() endforeach() unset(_fftw3_lib_dir) unset(_fftw3_prefix) unset(_fftw3_search_dir) endif() # biosig2.dll is produced by the patched-biosig ExternalProject, so # STF_BIOSIG_RUNTIME_DIR may not exist yet at configure time on a fresh build. # Drop the EXISTS guard here; cmake --install runs after the build step and # the directory will be present by then. install(DIRECTORY ...) silently # skips non-existent source directories, so this is safe. if(WIN32 AND DEFINED STF_BIOSIG_RUNTIME_DIR) install( DIRECTORY "${STF_BIOSIG_RUNTIME_DIR}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "biosig*.dll" ) elseif(WIN32 AND DEFINED BIOSIG_LIBRARY AND EXISTS "${BIOSIG_LIBRARY}") get_filename_component(_biosig_lib_dir "${BIOSIG_LIBRARY}" DIRECTORY) install( DIRECTORY "${_biosig_lib_dir}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "biosig*.dll" ) unset(_biosig_lib_dir) endif() if(WIN32) if(TARGET biosigshared) install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE}) endif() if(TARGET biosig2shared) install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE}) endif() endif() if(WIN32 AND DEFINED STF_MSVC_REDIST_DIRS) foreach(_stf_msvc_redist_dir IN LISTS STF_MSVC_REDIST_DIRS) if(EXISTS "${_stf_msvc_redist_dir}") install( DIRECTORY "${_stf_msvc_redist_dir}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "msvcp*.dll" PATTERN "vcruntime*.dll" PATTERN "concrt*.dll" ) endif() endforeach() unset(_stf_msvc_redist_dir) endif() if(WIN32 AND STF_ENABLE_PYTHON) if(STF_WINDOWS_COPY_PYTHON_RUNTIME) if(DEFINED STF_PYTHON_RUNTIME_DLL AND EXISTS "${STF_PYTHON_RUNTIME_DLL}") install(FILES "${STF_PYTHON_RUNTIME_DLL}" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_PYTHON}) else() message(WARNING "STF_WINDOWS_COPY_PYTHON_RUNTIME is ON but STF_PYTHON_RUNTIME_DLL was not found.") endif() endif() if(STF_WINDOWS_COPY_PYTHON_STDLIB) if(DEFINED STF_PYTHON_STDLIB AND EXISTS "${STF_PYTHON_STDLIB}") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install( DIRECTORY "${STF_PYTHON_STDLIB}/" DESTINATION "${CMAKE_INSTALL_BINDIR}/Lib" COMPONENT ${STF_COMPONENT_PYTHON} PATTERN "site-packages" EXCLUDE PATTERN "dist-packages" EXCLUDE PATTERN "__pycache__" EXCLUDE ) else() set(_stf_stdlib_signature "${STF_PYTHON_STDLIB}") install( CODE "set(_stf_src \"${STF_PYTHON_STDLIB}\")\n" "set(_stf_dst \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/Lib\")\n" "set(_stf_marker \"${CMAKE_INSTALL_BINDIR}/.stf-python-stdlib-signature\")\n" "set(_stf_marker_abs \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/\${_stf_marker}\")\n" "set(_stf_sig \"${_stf_stdlib_signature}\")\n" "set(_stf_needs_copy TRUE)\n" "if(EXISTS \"\${_stf_marker_abs}\" AND EXISTS \"\${_stf_dst}\")\n" " file(READ \"\${_stf_marker_abs}\" _stf_prev_sig)\n" " string(STRIP \"\${_stf_prev_sig}\" _stf_prev_sig)\n" " if(_stf_prev_sig STREQUAL _stf_sig)\n" " set(_stf_needs_copy FALSE)\n" " endif()\n" "endif()\n" "if(_stf_needs_copy)\n" " message(STATUS \"Refreshing embedded Python stdlib (fast mode).\")\n" " file(MAKE_DIRECTORY \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\")\n" " file(REMOVE_RECURSE \"\${_stf_dst}\")\n" " file(COPY \"\${_stf_src}/\" DESTINATION \"\${_stf_dst}\")\n" " file(REMOVE_RECURSE \"\${_stf_dst}/site-packages\" \"\${_stf_dst}/dist-packages\" \"\${_stf_dst}/__pycache__\")\n" " file(WRITE \"\${_stf_marker_abs}\" \"\${_stf_sig}\\n\")\n" "else()\n" " message(STATUS \"Skipping embedded Python stdlib refresh (signature unchanged).\")\n" "endif()" COMPONENT ${STF_COMPONENT_PYTHON} ) unset(_stf_stdlib_signature) endif() else() message(WARNING "STF_WINDOWS_COPY_PYTHON_STDLIB is ON but STF_PYTHON_STDLIB was not found.") endif() endif() if(STF_WINDOWS_COPY_PYTHON_DLLS) if(DEFINED STF_PYTHON_DLLS_DIR AND EXISTS "${STF_PYTHON_DLLS_DIR}") install( DIRECTORY "${STF_PYTHON_DLLS_DIR}/" DESTINATION "${CMAKE_INSTALL_BINDIR}/DLLs" COMPONENT ${STF_COMPONENT_PYTHON} FILES_MATCHING PATTERN "*.pyd" PATTERN "*.dll" ) endif() endif() if(STF_WINDOWS_COPY_PYTHON_SITE_PACKAGES) set(_stf_site_packages_root "${CMAKE_INSTALL_BINDIR}/stf-site-packages") set(_stf_site_copy_sources "") foreach(_stf_pkg IN LISTS STF_WINDOWS_PYTHON_SITE_PACKAGES) set(_stf_pkg_copied OFF) if(DEFINED STF_PYTHON_PURELIB AND EXISTS "${STF_PYTHON_PURELIB}/${_stf_pkg}") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${STF_PYTHON_PURELIB}/${_stf_pkg}" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PURELIB}/${_stf_pkg}") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PURELIB AND EXISTS "${STF_PYTHON_PURELIB}/${_stf_pkg}.libs") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${STF_PYTHON_PURELIB}/${_stf_pkg}.libs" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PURELIB}/${_stf_pkg}.libs") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PURELIB AND EXISTS "${STF_PYTHON_PURELIB}/${_stf_pkg}.py") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES "${STF_PYTHON_PURELIB}/${_stf_pkg}.py" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PURELIB}/${_stf_pkg}.py") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PURELIB) file(GLOB _stf_pkg_purelib_pyds "${STF_PYTHON_PURELIB}/${_stf_pkg}*.pyd") if(_stf_pkg_purelib_pyds) if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES ${_stf_pkg_purelib_pyds} DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources ${_stf_pkg_purelib_pyds}) endif() set(_stf_pkg_copied ON) endif() unset(_stf_pkg_purelib_pyds) endif() if(DEFINED STF_PYTHON_PLATLIB AND EXISTS "${STF_PYTHON_PLATLIB}/${_stf_pkg}") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${STF_PYTHON_PLATLIB}/${_stf_pkg}" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PLATLIB}/${_stf_pkg}") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PLATLIB AND EXISTS "${STF_PYTHON_PLATLIB}/${_stf_pkg}.libs") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${STF_PYTHON_PLATLIB}/${_stf_pkg}.libs" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PLATLIB}/${_stf_pkg}.libs") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PLATLIB AND EXISTS "${STF_PYTHON_PLATLIB}/${_stf_pkg}.pyd") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES "${STF_PYTHON_PLATLIB}/${_stf_pkg}.pyd" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PLATLIB}/${_stf_pkg}.pyd") endif() set(_stf_pkg_copied ON) endif() if(DEFINED STF_PYTHON_PLATLIB) file(GLOB _stf_pkg_platlib_pyds "${STF_PYTHON_PLATLIB}/${_stf_pkg}*.pyd") if(_stf_pkg_platlib_pyds) if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES ${_stf_pkg_platlib_pyds} DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources ${_stf_pkg_platlib_pyds}) endif() set(_stf_pkg_copied ON) endif() unset(_stf_pkg_platlib_pyds) endif() if(NOT _stf_pkg_copied AND DEFINED STF_WINDOWS_PYTHON_EXTRA_PATHS) foreach(_stf_extra_py IN LISTS STF_WINDOWS_PYTHON_EXTRA_PATHS) if(EXISTS "${_stf_extra_py}/${_stf_pkg}") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${_stf_extra_py}/${_stf_pkg}" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${_stf_extra_py}/${_stf_pkg}") endif() set(_stf_pkg_copied ON) break() endif() if(EXISTS "${_stf_extra_py}/${_stf_pkg}.libs") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(DIRECTORY "${_stf_extra_py}/${_stf_pkg}.libs" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${_stf_extra_py}/${_stf_pkg}.libs") endif() set(_stf_pkg_copied ON) endif() if(EXISTS "${_stf_extra_py}/${_stf_pkg}.py") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES "${_stf_extra_py}/${_stf_pkg}.py" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${_stf_extra_py}/${_stf_pkg}.py") endif() set(_stf_pkg_copied ON) break() endif() file(GLOB _stf_pkg_extra_pyds "${_stf_extra_py}/${_stf_pkg}*.pyd") if(_stf_pkg_extra_pyds) if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES ${_stf_pkg_extra_pyds} DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources ${_stf_pkg_extra_pyds}) endif() set(_stf_pkg_copied ON) endif() unset(_stf_pkg_extra_pyds) endforeach() endif() if(NOT _stf_pkg_copied) message(WARNING "Requested Python package '${_stf_pkg}' was not found in purelib/platlib and was not copied.") endif() endforeach() if(DEFINED STF_PYTHON_PURELIB AND EXISTS "${STF_PYTHON_PURELIB}/site.py") if(STF_WINDOWS_PYTHON_FULL_REFRESH) install(FILES "${STF_PYTHON_PURELIB}/site.py" DESTINATION "${_stf_site_packages_root}" COMPONENT ${STF_COMPONENT_PYTHON}) else() list(APPEND _stf_site_copy_sources "${STF_PYTHON_PURELIB}/site.py") endif() endif() if(NOT STF_WINDOWS_PYTHON_FULL_REFRESH) set(_stf_site_signature "${STF_PYTHON_PURELIB}|${STF_PYTHON_PLATLIB}|${STF_WINDOWS_PYTHON_EXTRA_PATHS}|${STF_WINDOWS_PYTHON_SITE_PACKAGES}|${_stf_site_copy_sources}") install( CODE "set(_stf_sources \"${_stf_site_copy_sources}\")\n" "set(_stf_dst \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${_stf_site_packages_root}\")\n" "set(_stf_marker \"${CMAKE_INSTALL_BINDIR}/.stf-site-packages-signature\")\n" "set(_stf_marker_abs \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/\${_stf_marker}\")\n" "set(_stf_sig \"${_stf_site_signature}\")\n" "set(_stf_needs_copy TRUE)\n" "if(EXISTS \"\${_stf_marker_abs}\" AND EXISTS \"\${_stf_dst}\")\n" " file(READ \"\${_stf_marker_abs}\" _stf_prev_sig)\n" " string(STRIP \"\${_stf_prev_sig}\" _stf_prev_sig)\n" " if(_stf_prev_sig STREQUAL _stf_sig)\n" " set(_stf_needs_copy FALSE)\n" " endif()\n" "endif()\n" "if(_stf_needs_copy)\n" " message(STATUS \"Refreshing embedded Python site-packages (fast mode).\")\n" " file(MAKE_DIRECTORY \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\")\n" " file(REMOVE_RECURSE \"\${_stf_dst}\")\n" " file(MAKE_DIRECTORY \"\${_stf_dst}\")\n" " foreach(_stf_src IN LISTS _stf_sources)\n" " file(COPY \"\${_stf_src}\" DESTINATION \"\${_stf_dst}\")\n" " endforeach()\n" " file(WRITE \"\${_stf_marker_abs}\" \"\${_stf_sig}\\n\")\n" "else()\n" " message(STATUS \"Skipping embedded Python site-packages refresh (signature unchanged).\")\n" "endif()" COMPONENT ${STF_COMPONENT_PYTHON} ) unset(_stf_site_signature) endif() unset(_stf_site_copy_sources) unset(_stf_site_packages_root) unset(_stf_pkg) unset(_stf_pkg_copied) unset(_stf_extra_py) endif() endif() if(WIN32) # Derive DLL search dirs from the resolved LAPACK/BLAS library paths. # FindLAPACK resolves to the vcpkg lib/ dir; the actual DLLs live in the # sibling bin/ dir (vcpkg layout) or in the same dir (MinGW/MSYS layout). set(_stf_lapack_lib_candidates) if(DEFINED LAPACK_LIBRARIES) list(APPEND _stf_lapack_lib_candidates ${LAPACK_LIBRARIES}) endif() if(DEFINED BLAS_LIBRARIES) list(APPEND _stf_lapack_lib_candidates ${BLAS_LIBRARIES}) endif() if(DEFINED OPENBLAS_LIBRARY AND EXISTS "${OPENBLAS_LIBRARY}") list(APPEND _stf_lapack_lib_candidates "${OPENBLAS_LIBRARY}") endif() set(_stf_lapack_runtime_dirs) foreach(_stf_lapack_lib IN LISTS _stf_lapack_lib_candidates) if(EXISTS "${_stf_lapack_lib}") get_filename_component(_stf_lapack_lib_dir "${_stf_lapack_lib}" DIRECTORY) list(APPEND _stf_lapack_runtime_dirs "${_stf_lapack_lib_dir}") get_filename_component(_stf_lapack_prefix "${_stf_lapack_lib_dir}" DIRECTORY) list(APPEND _stf_lapack_runtime_dirs "${_stf_lapack_prefix}/bin") endif() endforeach() list(REMOVE_DUPLICATES _stf_lapack_runtime_dirs) unset(_stf_lapack_lib_candidates) unset(_stf_lapack_lib) unset(_stf_lapack_lib_dir) unset(_stf_lapack_prefix) foreach(_stf_lapack_dir IN LISTS _stf_lapack_runtime_dirs) if(EXISTS "${_stf_lapack_dir}") install( DIRECTORY "${_stf_lapack_dir}/" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} FILES_MATCHING PATTERN "liblapack*.dll" PATTERN "openblas*.dll" PATTERN "libgcc_s_seh-1.dll" PATTERN "libgfortran-5.dll" PATTERN "libquadmath-0.dll" PATTERN "libwinpthread-1.dll" ) endif() endforeach() unset(_stf_lapack_runtime_dirs) unset(_stf_lapack_dir) endif() if(STF_BUILD_TESTS) add_library( stimfit_gtest_main STATIC src/test/gtest/src/gtest-all.cc src/test/gtest/src/gtest_main.cc ) target_include_directories( stimfit_gtest_main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/test/gtest ${CMAKE_CURRENT_SOURCE_DIR}/src/test/gtest/include ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_link_libraries( stimfit_gtest_main PUBLIC Threads::Threads stimfit_config ) stf_apply_macos_runtime_policy(stimfit_gtest_main) add_executable( stimfit_containers_test src/test/section.cpp src/test/channel.cpp src/test/recording.cpp ) target_link_libraries( stimfit_containers_test PRIVATE stimfit_config stimfit_gtest_main stfio_containers ) stf_apply_macos_runtime_policy(stimfit_containers_test) add_test(NAME stimfit_containers_test COMMAND stimfit_containers_test) install( TARGETS stimfit_containers_test ${STF_INSTALL_RUNTIME_DEPENDENCY_ARGS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_TESTS} ) if(STF_BUILD_NUMERIC_TESTS) add_executable( stimfit_numeric_test src/test/fit.cpp src/test/measure.cpp ) target_link_libraries( stimfit_numeric_test PRIVATE stimfit_config stimfit_gtest_main stfnum ) stf_apply_macos_runtime_policy(stimfit_numeric_test) add_test(NAME stimfit_numeric_test COMMAND stimfit_numeric_test) install( TARGETS stimfit_numeric_test ${STF_INSTALL_RUNTIME_DEPENDENCY_ARGS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_TESTS} ) endif() endif() endif() set(CPACK_PACKAGE_NAME "Stimfit") set(CPACK_PACKAGE_VENDOR "Stimfit contributors") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Stimfit electrophysiology analysis suite") set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") set(CPACK_PACKAGE_CONTACT "https://github.com/neurodroid/stimfit") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/gpl-2.0.txt") set(CPACK_PACKAGE_INSTALL_DIRECTORY "Stimfit") set(CPACK_MONOLITHIC_INSTALL OFF) set(CPACK_SOURCE_IGNORE_FILES "/[.]git/" "/[.]github/" "/[.]pytest_cache/" "/build/" "/_CPack_Packages/" "~$" "/[.]_" ) if(WIN32) set(CPACK_GENERATOR "INNOSETUP;ZIP") if(NOT DEFINED CPACK_INNOSETUP_EXECUTABLE) set(_stf_iscc_user_raw "$ENV{LOCALAPPDATA}/Programs/Inno Setup 6/ISCC.exe") file(TO_CMAKE_PATH "${_stf_iscc_user_raw}" _stf_iscc_user) if(EXISTS "${_stf_iscc_user}") set(CPACK_INNOSETUP_EXECUTABLE "${_stf_iscc_user}") endif() unset(_stf_iscc_user_raw) unset(_stf_iscc_user) endif() set(CPACK_INNOSETUP_ARCHITECTURE x64) set(CPACK_INNOSETUP_USE_MODERN_WIZARD ON) set(CPACK_INNOSETUP_ALLOW_NO_ICONS ON) set(CPACK_PACKAGE_EXECUTABLES "stimfit;Stimfit") set(CPACK_COMPONENTS_ALL ${STF_COMPONENT_CORE}) if(STF_ENABLE_PYTHON) list(APPEND CPACK_COMPONENTS_ALL ${STF_COMPONENT_PYTHON}) endif() if(STF_BUILD_TESTS) list(APPEND CPACK_COMPONENTS_ALL ${STF_COMPONENT_TESTS}) endif() set(CPACK_COMPONENT_CORE_DISPLAY_NAME "Stimfit Application") set(CPACK_COMPONENT_CORE_DESCRIPTION "Stimfit executable and required runtime dependencies") set(CPACK_COMPONENT_PYTHON_DISPLAY_NAME "Embedded Python Runtime") set(CPACK_COMPONENT_PYTHON_DESCRIPTION "Bundled Python runtime, stdlib, DLLs, and selected site-packages") set(CPACK_COMPONENT_TESTS_DISPLAY_NAME "Stimfit Tests") set(CPACK_COMPONENT_TESTS_DESCRIPTION "Stimfit test executable") set(CPACK_COMPONENT_PYTHON_DEPENDS ${STF_COMPONENT_CORE}) set(CPACK_COMPONENT_TESTS_DEPENDS ${STF_COMPONENT_CORE}) else() set(CPACK_GENERATOR "TGZ") endif() include(CPack) stimfit-0.17.1/CMakePresets.json000066400000000000000000000354011517235503400165100ustar00rootroot00000000000000{ "version": 6, "cmakeMinimumRequired": { "major": 3, "minor": 21, "patch": 0 }, "configurePresets": [ { "name": "linux-ninja-base", "displayName": "Linux Ninja (base)", "description": "Shared GNU/Linux preset for local Ninja builds.", "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/build/linux-default", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/linux-default/install", "STF_WITH_BIOSIG": "ON", "STF_BIOSIG_PROVIDER": "SYSTEM" } }, { "name": "linux-ninja-python", "displayName": "Linux Ninja (Python)", "description": "Preferred GNU/Linux preset with embedded Python enabled.", "inherits": [ "linux-ninja-base" ], "cacheVariables": { "STF_ENABLE_PYTHON": "ON" } }, { "name": "linux-ninja", "displayName": "Linux Ninja (no Python)", "description": "GNU/Linux preset without embedded Python.", "inherits": [ "linux-ninja-base" ], "binaryDir": "${sourceDir}/build/linux-lite", "cacheVariables": { "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/linux-lite/install", "STF_ENABLE_PYTHON": "OFF" } }, { "name": "macos-ninja-app-base", "displayName": "macOS app bundle (Ninja base)", "description": "Shared macOS preset for app-bundle builds with compile_commands.json output.", "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/build/macos-app", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" }, "cacheVariables": { "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/macos-app/install", "STF_MACOS_APP_BUNDLE": "ON", "STF_WITH_BIOSIG": "ON", "STF_BIOSIG_PROVIDER": "SUBMODULE" } }, { "name": "macos-ninja-app-python", "displayName": "macOS app bundle (Ninja + Python)", "description": "Preferred macOS app-bundle preset matching the repository's MacPorts Python and wxWidgets setup.", "inherits": [ "macos-ninja-app-base" ], "cacheVariables": { "STF_ENABLE_PYTHON": "ON", "STF_PY_SHELL_BACKEND": "JUPYTER", "Python3_EXECUTABLE": "/opt/local/bin/python3.14", "wxWidgets_CONFIG_EXECUTABLE": "/opt/local/Library/Frameworks/Python.framework/Versions/3.14/bin/wx-config" } }, { "name": "macos-ninja-app", "displayName": "macOS app bundle (Ninja, no Python)", "description": "macOS app-bundle preset without embedded Python for environments that only need the native application.", "inherits": [ "macos-ninja-app-base" ], "binaryDir": "${sourceDir}/build/macos-app-nopython", "cacheVariables": { "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/macos-app-nopython/install", "STF_ENABLE_PYTHON": "OFF" } }, { "name": "vs2022-vcpkg-ci-like-base", "displayName": "VS2022 x64 (CI-like vcpkg base)", "description": "Shared Windows preset using environment-driven vcpkg dependencies, aligned with CI layout.", "hidden": true, "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/../stimfit-out/${presetName}", "architecture": { "value": "x64", "strategy": "set" }, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/cmake/triplets", "VCPKG_TARGET_TRIPLET": "x64-windows-ci-release", "VCPKG_MANIFEST_INSTALL": "OFF", "CMAKE_INSTALL_PREFIX": "${sourceDir}/../stimfit-out/install/vs2022-release", "CMAKE_PREFIX_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "CMAKE_LIBRARY_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/lib", "CMAKE_INCLUDE_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/include", "HDF5_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/hdf5", "hdf5_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/hdf5", "wxWidgets_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/wxwidgets", "STF_HDF5_PREFIX": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "wxWidgets_ROOT_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "wxWidgets_LIB_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/lib", "BUILD_SHARED_LIBS": "ON", "STF_BUILD_MODULE": "OFF", "STF_ENABLE_PYTHON": "OFF", "STF_WITH_BIOSIG": "ON" } }, { "name": "vs2022-vcpkg-wx-hdf5", "displayName": "VS2022 x64 (vcpkg + wxWidgets + HDF5)", "description": "Stimfit non-Python build using vcpkg-provided dependencies.", "inherits": [ "vs2022-vcpkg-ci-like-base" ], "cacheVariables": { "STF_ENABLE_PYTHON": "OFF", "STF_WITH_BIOSIG": "ON" } }, { "name": "vs2022-vcpkg-wx-hdf5-biosig-patched", "displayName": "VS2022 x64 (CMake-managed patched biosig)", "description": "Build Stimfit with biosig patched and built incrementally through the CMake build graph.", "inherits": [ "vs2022-vcpkg-wx-hdf5" ], "cacheVariables": { "STF_WITH_BIOSIG": "ON", "STF_BIOSIG_PROVIDER": "PATCHED_SUBMODULE" } }, { "name": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched", "displayName": "VS2022 x64 (Python 3.14 + modern shell + patched biosig)", "description": "Build Stimfit with embedded Python enabled for Python 3.14 workflows.", "inherits": [ "vs2022-vcpkg-wx-hdf5-biosig-patched" ], "cacheVariables": { "STF_ENABLE_PYTHON": "ON", "STF_PY_SHELL_BACKEND": "MODERN", "STF_WINDOWS_COPY_PYTHON_RUNTIME": "ON", "STF_WINDOWS_COPY_PYTHON_SITE_PACKAGES": "ON", "STF_WINDOWS_PYTHON_SITE_PACKAGES": "numpy;wx", "STF_WINDOWS_PYTHON_EXTRA_PATHS": "C:/Users/C02380/libs/Phoenix", "STF_WXPYTHON_INCLUDE_DIR": "C:/Users/C02380/libs/Phoenix/wx/include", "SWIG_EXECUTABLE": "C:/Users/C02380/AppData/Local/Microsoft/WinGet/Packages/SWIG.SWIG_Microsoft.Winget.Source_8wekyb3d8bbwe/swigwin-4.4.1/swig.exe", "Python3_ROOT_DIR": "C:/Program Files/Python314", "STF_WX_PREFER_MODULE_FIND": "ON", "wxWidgets_DIR": "", "wxWidgets_ROOT_DIR": "C:/Users/C02380/libs/Phoenix/ext/wxWidgets", "wxWidgets_LIB_DIR": "C:/Users/C02380/libs/Phoenix/ext/wxWidgets/lib/vc140_x64_dll" } }, { "name": "ci-windows-msvc-smoke", "displayName": "CI Windows MSVC smoke", "description": "GitHub Actions Windows smoke configuration using vcpkg-installed dependencies.", "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/build/${presetName}", "architecture": { "value": "x64", "strategy": "set" }, "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VCPKG_TARGET_TRIPLET": "x64-windows-ci-release", "VCPKG_MANIFEST_INSTALL": "OFF", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}", "CMAKE_PREFIX_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "CMAKE_LIBRARY_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/lib", "CMAKE_INCLUDE_PATH": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/include", "HDF5_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/hdf5", "hdf5_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/hdf5", "wxWidgets_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/share/wxwidgets", "STF_HDF5_PREFIX": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "wxWidgets_ROOT_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release", "wxWidgets_LIB_DIR": "$env{VCPKG_INSTALLED_DIR}/x64-windows-ci-release/lib", "BUILD_SHARED_LIBS": "ON", "STF_BUILD_MODULE": "OFF", "STF_ENABLE_PYTHON": "OFF", "STF_WITH_BIOSIG": "OFF", "STF_BUILD_TESTS": "ON", "STF_BUILD_NUMERIC_TESTS": "OFF" } } ], "buildPresets": [ { "name": "linux-ninja-python-build", "displayName": "Build Linux default target (Python)", "configurePreset": "linux-ninja-python" }, { "name": "linux-ninja-build", "displayName": "Build Linux default target (no Python)", "configurePreset": "linux-ninja" }, { "name": "macos-ninja-app-python-stimfit", "displayName": "Build stimfit.app (macOS, Python)", "configurePreset": "macos-ninja-app-python", "targets": [ "stimfit" ] }, { "name": "macos-ninja-app-stimfit", "displayName": "Build stimfit.app (macOS, no Python)", "configurePreset": "macos-ninja-app", "targets": [ "stimfit" ] }, { "name": "vs2022-release-all", "displayName": "Build ALL_BUILD (Release)", "configurePreset": "vs2022-vcpkg-wx-hdf5", "configuration": "Release", "targets": [ "ALL_BUILD" ] }, { "name": "vs2022-release-stimfit", "displayName": "Build stimfit (Release)", "configurePreset": "vs2022-vcpkg-wx-hdf5", "configuration": "Release", "targets": [ "stimfit" ] }, { "name": "vs2022-release-stimfit-biosig-patched", "displayName": "Build stimfit (Release, patched biosig)", "configurePreset": "vs2022-vcpkg-wx-hdf5-biosig-patched", "configuration": "Release", "targets": [ "stimfit" ] }, { "name": "vs2022-release-stimfit-python314-biosig-patched", "displayName": "Build stimfit (Release, Python 3.14, patched biosig)", "configurePreset": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched", "configuration": "Release", "targets": [ "stimfit" ] }, { "name": "vs2022-release-all-biosig-patched", "displayName": "Build ALL_BUILD (Release, patched biosig)", "configurePreset": "vs2022-vcpkg-wx-hdf5-biosig-patched", "configuration": "Release", "targets": [ "ALL_BUILD" ] }, { "name": "vs2022-release-all-python314-biosig-patched", "displayName": "Build ALL_BUILD (Release, Python 3.14, patched biosig)", "configurePreset": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched", "configuration": "Release", "targets": [ "ALL_BUILD" ] }, { "name": "ci-windows-msvc-smoke-release", "displayName": "CI smoke target build (Release)", "configurePreset": "ci-windows-msvc-smoke", "configuration": "Release", "targets": [ "stimfit_containers_test" ] } ], "packagePresets": [ { "name": "linux-ninja-python-package-tgz", "displayName": "Package TGZ (Linux, Python)", "description": "Generate the TGZ package for the GNU/Linux Python-enabled preset.", "configurePreset": "linux-ninja-python", "generators": [ "TGZ" ] }, { "name": "linux-ninja-package-tgz", "displayName": "Package TGZ (Linux, no Python)", "description": "Generate the TGZ package for the GNU/Linux no-Python preset.", "configurePreset": "linux-ninja", "generators": [ "TGZ" ] }, { "name": "vs2022-release-package-inno-python314-biosig-patched", "displayName": "Package INNOSETUP (Release, Python 3.14, patched biosig)", "description": "Generate the Windows Inno Setup installer via CPack.", "configurePreset": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched", "configurations": [ "Release" ], "generators": [ "INNOSETUP" ] }, { "name": "vs2022-release-package-zip-python314-biosig-patched", "displayName": "Package ZIP (Release, Python 3.14, patched biosig)", "description": "Generate the Windows ZIP fallback package via CPack.", "configurePreset": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched", "configurations": [ "Release" ], "generators": [ "ZIP" ] } ], "workflowPresets": [ { "name": "linux-ninja-python-workflow", "displayName": "Configure + Build Linux (Python)", "description": "Configure and build the preferred GNU/Linux preset with embedded Python enabled.", "steps": [ { "type": "configure", "name": "linux-ninja-python" }, { "type": "build", "name": "linux-ninja-python-build" } ] }, { "name": "linux-ninja-workflow", "displayName": "Configure + Build Linux (no Python)", "description": "Configure and build the GNU/Linux preset without embedded Python.", "steps": [ { "type": "configure", "name": "linux-ninja" }, { "type": "build", "name": "linux-ninja-build" } ] }, { "name": "macos-ninja-app-python-workflow", "displayName": "Configure + Build macOS app bundle (Python)", "description": "Configure and build the preferred macOS app-bundle preset with embedded Python enabled.", "steps": [ { "type": "configure", "name": "macos-ninja-app-python" }, { "type": "build", "name": "macos-ninja-app-python-stimfit" } ] }, { "name": "macos-ninja-app-workflow", "displayName": "Configure + Build macOS app bundle (no Python)", "description": "Configure and build the macOS app-bundle preset without embedded Python.", "steps": [ { "type": "configure", "name": "macos-ninja-app" }, { "type": "build", "name": "macos-ninja-app-stimfit" } ] }, { "name": "vs2022-release-package-all-python314-biosig-patched", "displayName": "Configure + Build + Package (INNOSETUP + ZIP)", "description": "One-command workflow for Windows packaging with embedded Python.", "steps": [ { "type": "configure", "name": "vs2022-vcpkg-wx-hdf5-python314-biosig-patched" }, { "type": "build", "name": "vs2022-release-stimfit-python314-biosig-patched" }, { "type": "package", "name": "vs2022-release-package-inno-python314-biosig-patched" }, { "type": "package", "name": "vs2022-release-package-zip-python314-biosig-patched" } ] } ] } stimfit-0.17.1/COPYING000066400000000000000000000431311517235503400143210ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. stimfit-0.17.1/ChangeLog.old000066400000000000000000004760651517235503400156350ustar00rootroot000000000000002011-01-22 Christoph Schmidt-Hieber * src/app/doc.cpp, src/app/parentframe.cpp, src/core/core.cpp, src/core/filelib/asciilib.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/hekalib.cpp: * wx-2.9 and llvm-gcc build fixes * zoom selection initialisation bug fix [f6aa4d42fff5] [tip] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/eventdlg.cpp, src/app/doc.cpp, src/app/graph.cpp, src/app/unopt.cpp, src/app/usrdlg/usrdlg.cpp, src/core/channel.cpp, src/core/channel.h, src/core/core.cpp, src/core/filelib/abflib.cpp, src/core/filelib/asciilib.cpp, src/core/filelib/atflib.cpp, src/core/filelib/axglib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/Common/unix.h, src/core/filelib/cfslib.cpp, src/core/filelib/hdf5lib.cpp, src/core/filelib/hekalib.cpp, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp, src/core/section.h, src/core/stimdefs.h, src/stfswig/stfswig.cxx: * Re-established compatibility with wx-2.8 to prepare debian packages. [656d80e179da] 2011-01-20 Jose Guzman * TODO: Added my todo [f43edb6e2cfe] 2011-01-20 Christoph Schmidt-Hieber * .hgtags: Added tag 0.10.5windows for changeset 2a20ae89c68b [f5d6e314d036] * .hgtags: Merged. [2a20ae89c68b] [0.10.5windows] 2011-01-18 Christoph Schmidt-Hieber * .hgtags: Added tag 0.10.4mac for changeset eb7958be2b8f [9d97c75467c8] * m4/lt~obsolete.m4: Tagged 0.10.4linux. [eb7958be2b8f] [0.10.4mac] 2011-01-20 Christoph Schmidt-Hieber * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, nsis/installer.nsi, stfconf.h, stimfit.plist.in, stimfit_VS03/stfioswig/stfioswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: * Accidentally packaged debug build in Windows * Bumped version to 0.10.5 [946f8958c212] 2011-01-18 Christoph Schmidt-Hieber * .hgtags: Added tag 0.10.4linux for changeset aaf0c5f75e25 [81bcba2ae953] 2011-01-20 Christoph Schmidt-Hieber * .hgtags: Added tag 0.10.5windows for changeset bd7753c235c2 [a9cca83455cb] 2011-01-18 Christoph Schmidt-Hieber * .hgtags: Removed tag 0.10.4mac [aaf0c5f75e25] [0.10.4linux] * .hgtags: Removed tag 0.10.4mac [bd7753c235c2] * .hgtags: Added tag 0.10.4windows for changeset 87b5a8bb7f13 [8050abf8d3cf] * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, nsis/installer.nsi, stfconf.h, stimfit.plist.in, stimfit_VS03/stimfit_VS03.suo: Bumped version to 0.10.4 [87b5a8bb7f13] [0.10.4windows] * .hgtags: Added tag 0.10.4mac for changeset bdbc440cbaff [f153650418ce] * src/app/doc.cpp, src/app/parentframe.cpp: Corrected a bug in channel zoom selection. Thanks to Jose for reporting. [bdbc440cbaff] 2011-01-16 Christoph Schmidt-Hieber * doc/sphinx/manual/python.rst, src/stfswig/extensions.py: Updated Extensions documentation [b1c8523aec5f] * .hgtags: Added tag 0.10.3mac for changeset 01f137313682 [fc1e5e6b647f] * .hgtags: Added tag 0.10.3linux for changeset 13b62604acd8 [01f137313682] [0.10.3mac] * src/core/filelib/hekalib.cpp: * Tagged 0.10.3windows * Warning message for heka binaries [13b62604acd8] [0.10.3linux] * .hgtags: Added tag 0.10.3windows for changeset 92739d9c869b [b21889a4ec1f] * src/app/doc.cpp, src/app/doc.h, src/app/parentframe.cpp, src/app/parentframe.h, src/stfswig/stfswig.cxx, stimfit_VS03/stimfit_VS03.suo: Some fixes in Python interface for Windows [92739d9c869b] [0.10.3windows] * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, nsis/installer.nsi, src/app/app.cpp, src/app/graph.cpp, src/core/measlib.h, src/core/recording.cpp, stfconf.h, stimfit.plist.in, stimfit_VS03/stfioswig/stfioswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: * Some more range checking in maxRise and maxDecay * Corrected window focusing in Windows [9becb9f44ebb] * Makefile.am, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/plugins/plugins.cpp, src/app/plugins/plugins.h, src/app/unopt.cpp, src/core/measlib.h, src/core/stimdefs.h, src/stfswig/spells.py: * Proof of concept for calling Python functions from the menu. * Some more range checking. [9a59ac035801] * nsis/installer.nsi, src/app/app.cpp, src/app/app.h, src/app/unopt.cpp, src/stfswig/Makefile.am, src/stfswig/extensions.py, src/stfswig/spells.py: Started framework for Python extensions that can be called from the menu [9c7f538cce52] 2011-01-15 Christoph Schmidt-Hieber * nsis/installer.nsi, src/core/measlib.h, src/stfswig/Makefile.am, src/stfswig/heka.py: * Added heak.py to package * Added missing range check in maxRise and maxDecay [f904f4808447] * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, nsis/installer.nsi, stfconf.h, stimfit.plist.in: Bumped version number to 0.10.2 [408c330485e4] * .hgtags: Added tag 0.10.2windows for changeset 32a5b1f7c864 [8fa13a4bf408] * src/app/doc.cpp, stimfit_VS03/stimfit_VS03.suo: Fixed a buffer overflow [32a5b1f7c864] [0.10.2windows] * .hgtags: Added tag 0.10.1mac for changeset 907d9bd44b09 [e3128f853a03] * src/core/filelib/hdf5lib.cpp: Tagged 0.10.1linux [907d9bd44b09] [0.10.1mac] * .hgtags: Added tag 0.10.1linux for changeset 4b7b705d35de [62edd39c1cf1] * .hgtags: Added tag 0.10.1windows for changeset 5b1d091541fc [4b7b705d35de] [0.10.1linux] * .hgtags: Removed tag 0.10.1 [5b1d091541fc] [0.10.1windows] * .hgtags: Added tag 0.10.1 for changeset dcc74249d0e4 [ae312006cad2] * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, nsis/installer.nsi, src/app/app.cpp, src/app/copygrid.cpp, src/app/dlgs/fitseldlg.cpp, src/app/doc.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/view.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axglib.cpp, src/core/recording.cpp, src/core/recording.h, stfconf.h, stimfit.plist.in, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: * Removed some potential buffer overflows and null pointers * Windows build fixes * Bumped version number to 0.10.1 [dcc74249d0e4] 2011-01-14 Christoph Schmidt-Hieber * nsis/installer.nsi, stimfit_VS03/stfioswig/stfioswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: Windows toolchain update. [fb653a6498f0] * src/app/doc.cpp: Added units to dialogs to avoid Threshold ambiguities. Thanks to Janina Kowalski for reporting. [540321b0bc65] * Makefile.am, m4/lt~obsolete.m4, src/app/app.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/view.cpp: Mac bug fixes: child frame activation, menu bar swap. [a632df799c1e] 2010-11-30 Christoph Schmidt-Hieber * src/app/app.cpp, src/app/app.h, src/app/childframe.cpp, src/app/childframe.h, src/app/graph.cpp, src/app/view.cpp: Major bug fixes to window focusing behaviour. [335feade9b46] 2010-11-29 Jose Guzman * doc/sphinx/references/index.rst, src/app/.app.cpp.swo: Updated references [e99c3e6f7332] 2010-11-28 Jose Guzman * src/app/.app.cpp.swo, src/app/app.cpp: Removed 'Convert file series' option from Main Menutoolbar under Linux [7f912d5486b5] * src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/parentframe.cpp: Remove temporaly latency options from the main toolbar menu [6c3ad561d777] 2010-11-26 Christoph Schmidt-Hieber * doc/sphinx/linux_install_guide/building.rst: Minor documentation correction. [814071c9ba6d] * doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/moduleonly.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/stfio/index.rst: Considerably shortened and simplified Linux build instructions. [8fbb1774ab64] * m4/lt~obsolete.m4, src/app/childframe.cpp: Fixed scrambled trace selection panel. [f270882479ac] 2010-11-07 Christoph Schmidt-Hieber * configure.in, doc/sphinx/manual/python.rst, m4/lt~obsolete.m4, macosx/scripts/build-wxpy.sh, macosx/scripts/change_deps_release.sh, macosx/scripts/conf_mac_release.sh: OS X build script updates. [1834a4416ea4] 2010-11-03 Jose Guzman * doc/sphinx/linux_install_guide/building.rst: Small change in Linux installation guide [84929d2569ff] 2010-10-28 Jose Guzman * src/app/childframe.cpp, src/app/childframe.h, src/app/doc.cpp, src/app/graph.cpp: cleaning up code [003df0db325a] 2010-10-28 Jose Guzman * src/app/app.h, src/app/childframe.cpp, src/app/childframe.h: Use either zero-based or 1-based indices in the trace menu [3248dfe8b815] * src/app/childframe.cpp, src/app/childframe.h: Trace menu more user-friendly [833e72103a83] * src/app/childframe.cpp, src/app/childframe.h: Cleaning ugly debugging mensages and unused code [bdb95cb40a28] * src/app/childframe.cpp, src/app/childframe.h: Edition in textcontrol allows to set trace number in the Trace Selection window [7f7ead386d0e] 2010-10-26 Jose Guzman * src/app/childframe.cpp, src/app/childframe.h: Added wxSpinCtrl header to allow it use withouth the Python environment [395145469ed8] * src/app/app.h, src/app/childframe.cpp, src/app/childframe.h: substitution of wxComboBox by wxSpinCtrl in Trace selection menu to provide a better use [0b28a4500036] 2010-10-23 Jose Guzman * src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h: 'Cleaning debugging sentences' [a179f074f36c] 2010-10-22 Jose Guzman * Merged version with Latency cursor menu [014b0b76514c] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/core/recording.h: Latency Cursors Tab finished [4e000c33b023] * src/app/dlgs/cursorsdlg.cpp: Latency cursor tab radiobuttons reoganized [a6efa95bdc32] * src/app/app.cpp: Corrected menu separator in Menu->View when 2 channels are present [457ea7213744] 2010-10-17 Christoph Schmidt-Hieber * src/stfswig/stfio_plot.py: Add standard 2-axis plot to stfio_plot [0942450c3493] 2010-10-17 Jose Guzman * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/core/stimdefs.h: Cursor settings menu can set the mode of the latency cursors. Still no update from wxStfApp [e34047d010f9] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h: Event handling defined for radio buttons in Latency tab [49872d0aace7] 2010-10-16 Jose Guzman * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h: Added functionality to Textboxes in latency Tab option of Cursors Settings menu [3d76612d4168] * src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/dlgs/smalldlgs.h, src/app/parentframe.cpp: Gui for Tab option for latency cursors added (not functional) [3e14e647ae7d] 2010-10-08 Christoph Schmidt-Hieber * src/stfswig/stfio_plot.py: Some updates to plot module. [d09b95c2a6ec] 2010-09-30 Christoph Schmidt-Hieber * src/core/recording.cpp, src/stfswig/stfio_plot.py: Some modifications to stfio_plot module. [73d21af44dda] 2010-09-20 Christoph Schmidt-Hieber * src/stfswig/stfio_plot.py: Updated plotting functions. [57c615051517] 2010-09-19 Christoph Schmidt-Hieber * macosx/scripts/change_deps_release.sh, macosx/scripts/conf_mac_release.sh, macosx/scripts/mkimage.sh, src/core/filelib/hekalib.cpp, src/core/filelib/hekalib.h: * Updated os x scripts. * Updated authorship in HEKA library. [874a9f03044b] * src/core/filelib/hekalib.cpp: Check for zero before reading sizes. [dd2339e8673f] 2010-09-16 Christoph Schmidt-Hieber * nsis/installer.nsi, stimfit_VS03/stimfit_VS03.suo: Updated Windows build chain. [055072cd326a] * src/core/filelib/hekalib.cpp: Use for_each throughout. [1607b73cd762] * src/core/filelib/hekalib.cpp: Implement byte swapping for HEKA file written in big endian. [b9cdaecf9f97] 2010-09-13 Christoph Schmidt-Hieber * .hgtags: Added tag 0.10.0linux for changeset 8d25f28c6e3c [a7ddefa65fd2] * Makefile.am: Updated linux distribution for 0.10.0 [8d25f28c6e3c] [0.10.0linux] * src/app/copygrid.cpp, src/app/graph.cpp: Corrected keyboard input behaviour. [3e7f85fcca9a] 2010-09-11 Christoph Schmidt-Hieber * .hgignore, stimfit_VS03/stfioswig/Release/BuildLog.htm, stimfit_VS03/stfioswig/Release/_stfio.exp, stimfit_VS03/stfioswig/Release/_stfio.lib, stimfit_VS03/stfioswig/Release/_stfio.pyd, stimfit_VS03/stfioswig/Release/_stfio.pyd.intermediate.manifest, stimfit_VS03/stfioswig/Release/mt.dep, stimfit_VS03/stfioswig/Release/stfio.exp, stimfit_VS03/stfioswig/Release/stfio.lib, stimfit_VS03/stfioswig/Release/vc90.idb: Removed build files from repository. [a90cb68fce78] * nsis/installer.nsi, src/app/app.cpp, src/app/app.h, src/core/filelib/abflib.cpp, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/hdf5lib.cpp, src/core/filelib/hekalib.cpp, src/core/filelib/igorlib.cpp, stimfit_VS03/stfioswig/Release/BuildLog.htm, stimfit_VS03/stfioswig/Release/_stfio.exp, stimfit_VS03/stfioswig/Release/_stfio.lib, stimfit_VS03/stfioswig/Release/_stfio.pyd, stimfit_VS03/stfioswig/Release/_stfio.pyd.intermediate.manifest, stimfit_VS03/stfioswig/Release/mt.dep, stimfit_VS03/stfioswig/Release/stfio.exp, stimfit_VS03/stfioswig/Release/stfio.lib, stimfit_VS03/stfioswig/Release/vc90.idb, stimfit_VS03/stfioswig/stfioswig.vcproj, stimfit_VS03/stfioswig/stfioswig.vcproj.cs-s20.cs.user, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo: * Added heka library to WIndows build. * Added stfio module to Windows installer. [eafeb656f73e] * src/core/core.cpp, src/core/filelib/cfslib.cpp, src/core/filelib/cfslib.h: Read *.dat files as heka if cfs fails. [d641ba0cee92] 2010-09-10 Christoph Schmidt-Hieber * src/core/filelib/hekalib.cpp: Preliminary HEKA file reading. [e8d837406226] * src/core/core.cpp, src/core/filelib/hekalib.cpp: Resolve merge conflict [8917808880f9] * src/core/filelib/hekalib.cpp, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: Updated HEKA. [0a0996c3a534] 2010-09-09 Christoph Schmidt-Hieber * src/core/filelib/hekalib.cpp: HEKA update. [f09b99e79c27] * src/core/filelib/hekalib.cpp, src/core/filelib/hekalib.h, src/stfswig/stfio.py, src/stfswig/stfioswig_wrap.cxx: Minor HEKA modifications. [57a0f1c6ec36] 2010-09-08 Christoph Schmidt-Hieber * src/core/filelib/hekalib.cpp: Some more work on HEKA library. [04cc7125e33d] 2010-09-07 Christoph Schmidt-Hieber * Makefile.am, src/app/app.cpp, src/core/core.cpp, src/core/filelib/hekalib.cpp, src/core/filelib/hekalib.h, src/stfswig/stfio.py, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.i: Some more work on the heka library. [bcfa0e8a30d5] * doc/sphinx/references/index.rst: Updated references. [0909aa29b116] * src/app/unopt.cpp: wxversion.select doesn't return an error code. [a17ef4278207] 2010-09-06 Christoph Schmidt-Hieber * nsis/installer.nsi, stimfit_VS03/stimfit_VS03.suo: Windows build chain update [2a1d30231442] * src/app/app.cpp, src/app/unopt.cpp: Bug corrections: Registry key error message, keyboard input failures. Thanks to Imre Vida for reporting. [e7a2980bdd4d] 2010-08-30 Christoph Schmidt-Hieber * src/app/doc.cpp, src/core/core.cpp, src/core/core.h, src/core/filelib/axglib.cpp, src/core/filelib/axglib.h, src/core/stimdefs.h, src/stfswig/stfio_plot.py: Some upgrades to Axograph library. [16c65e805495] * nsis/installer.nsi: Updated nsis installer. [ba48049fa932] * nsis/installer.nsi, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo: Updated Windows build. [de212196d650] 2010-08-13 Christoph Schmidt-Hieber * doc/sphinx/references/index.rst: Added some urls to the references. [10a5968b73fc] 2010-08-02 Christoph Schmidt-Hieber * src/app/app.cpp, src/app/app.h, src/app/copygrid.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/parentframe.h: Corrected wrong events being fired from the toolbar. [e91502e4e7ed] 2010-08-01 Christoph Schmidt-Hieber * m4/lt~obsolete.m4, src/app/childframe.cpp, src/app/graph.cpp, src/app/graph.h: Tidied up graph.cpp. [6ffd69a96d82] * configure.in, doc/sphinx/conf.py, doc/website/Home.html, macosx/package.pmdoc/index.xml, stfconf.h, stimfit.plist.in, update_version.sh: Bump version to 0.10.0 [c5f7c162887f] * src/core/filelib/abflib.cpp, src/core/filelib/abflib.h, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axglib.cpp, src/core/filelib/axglib.h, src/core/filelib/cfslib.cpp: Corrected string handling errors. [b17cef4a4998] 2010-07-31 Christoph Schmidt-Hieber * src/app/childframe.cpp: Prevent setting out-of-range value for second channel. [dcedd1a4de53] * nsis/installer.nsi, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj.cs-s20.cs.user, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj.cs-s20.cs.user: Windows build fixes. [e79585d5d527] 2010-07-30 Christoph Schmidt-Hieber * acsite.m4, m4/lt~obsolete.m4, src/app/graph.cpp, src/app/unopt.cpp: Prevent access to 2nd channel in single-channel files. [61cfdbb1a728] 2010-07-29 Jose Guzman * src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h: pslope cursors removed from Batch menu option [0a7bf9e330b1] * configure.in, src/app/app.cpp, src/app/app.h, src/app/copygrid.cpp, src/app/copygrid.h, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/graph.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/app/unopt.cpp, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, src/stfswig/stfswig.cxx, src/stfswig/stfswig.i: 1) slope cursors are restricted to WITH_PSLOPE preprocessor directive 2) resolved BUG in PyCrust shell [f71dcfe8ae26] 2010-07-28 Jose Guzman * src/app/unopt.cpp: modified Function to import Python avoid **compulsive** reload! [ad0d77df3745] 2010-07-27 Christoph Schmidt-Hieber * nsis/installer.nsi: Updated windows installer. [198cb8078f14] * src/app/doc.cpp, src/core/filelib/hdf5lib.cpp, src/core/recording.cpp: Corrected some hdf5 string handling bugs. [28a7777f1e74] 2010-07-25 Jose Guzman * src/app/graph.cpp, src/app/graph.h: added blue cursors again, I need them to debug .. [cd867e85050e] 2010-07-24 Jose Guzman * Makefile.am, src/app/graph.cpp, src/app/graph.h: removed blue cursors from graph [decb09d301eb] * src/app/parentframe.cpp, src/app/parentframe.h: removed Slope Cursors mode from menu Toolbar [c68f9975ce2a] * doc/sphinx/stf_reference/stf.rst, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i: added get_slope() to the stf Python module [2c6330cdd989] 2010-07-22 Jose Guzman * doc/sphinx/linux_install_guide/moduleonly.rst: Changed stimfit-module to stimfit directory in the documentation [9c67e7495fe7] 2010-07-21 Christoph Schmidt-Hieber * Makefile.am, nsis/installer.nsi, src/stfswig/Makefile.am, src/stfswig/unittest_stfio.py, unittest.bz2: Added unittest for stfio module. Binary data files are too large for repository. [d7cb004619b1] * src/stfswig/stfio.py, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: Added Jose's suggestions. [80441bcf3b40] 2010-07-21 Jose Guzman * unittest.bz2: Added unittest. Please, remove it as soon as possible [90b17d5ff7cc] * doc/sphinx/linux_install_guide/moduleonly.rst, nsis/installer.nsi, src/stfswig/Makefile.am, src/stfswig/stfio.py: added suggested modification to stfio module (please, edit it in the *.i file) [0338eadc1aa8] 2010-07-19 Jose Guzman * doc/sphinx/.build/doctrees/contents.doctree, doc/sphinx/.build/doctrees/environment.pickle, doc/sphinx/.build/doctrees/howto/amplitudes.doctree, doc/sphinx/.build/doctrees/howto/apcounting.doctree, doc/sphinx/.build/doctrees/howto/cuttingtraces.doctree, doc/sphinx/.build/doctrees/howto/index.doctree, doc/sphinx/.build/doctrees/howto/introclass.doctree, doc/sphinx/.build/doctrees/howto/latencies.doctree, doc/sphinx/.build/doctrees/howto/resistances.doctree, doc/sphinx/.build/doctrees/howto/runningmean.doctree, doc/sphinx/.build/doctrees/links/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/building.doctree, doc/sphinx/.build/doctrees/linux_install_guide/downloads.doctree, doc/sphinx/.build/doctrees/linux_install_guide/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/requirement.doctree, doc/sphinx/.build/doctrees/linux_install_guide/updates.doctree, doc/sphinx/.build/doctrees/manual/bibliography.doctree, doc/sphinx/.build/doctrees/manual/event_extraction.doctree, doc/sphinx/.build/doctrees/manual/getting_started.doctree, doc/sphinx/.build/doctrees/manual/index.doctree, doc/sphinx/.build/doctrees/manual/latency_measurements.doctree, doc/sphinx/.build/doctrees/manual/preface.doctree, doc/sphinx/.build/doctrees/manual/python.doctree, doc/sphinx/.build/doctrees/osx_install_guide/building.doctree, doc/sphinx/.build/doctrees/osx_install_guide/index.doctree, doc/sphinx/.build/doctrees/osx_install_guide/prerequisites.doctree, doc/sphinx/.build/doctrees/references/index.doctree, doc/sphinx/.build/doctrees/stf_reference/stf.doctree, doc/sphinx/.build/html/.buildinfo, doc/sphinx/.build/html/_images/APmodule.png, doc/sphinx/.build/html/_images/average.png, doc/sphinx/.build/html/_images/bait_template.png, doc/sphinx/.build/html/_images/baseline.png, doc/sphinx/.build/html/_images/batchanalysis.png, doc/sphinx/.build/html/_images/channelselection.png, doc/sphinx/.build/html/_images/channelselectiondrop.png, doc/sphinx/.build/html/_images/cursorsettings.png, doc/sphinx/.build/html/_images/eventbutton.png, doc/sphinx/.build/html/_images/eventdetectionsettings.png, doc/sphinx/.build/html/_images/events.png, doc/sphinx/.build/html/_images/falsenegative.png, doc/sphinx/.build/html/_images/finaltemplate.png, doc/sphinx/.build/html/_images/fit.png, doc/sphinx/.build/html/_images/fitselection.png, doc/sphinx/.build/html/_images/fittowindow.png, doc/sphinx/.build/html/_images/foot.png, doc/sphinx/.build/html/_images/latency.png, doc/sphinx/.build/html/_images/latencytraces.png, doc/sphinx/.build/ html/_images/math/0697caad7caa424cb1d6913067117ac1ef4afcfc.png, doc/ sphinx/.build/html/_images/math/0772102cbdf827d21b8343e12c2a8766e0f1 7d97.png, doc/sphinx/.build/html/_images/math/0936df714cc1754db6b256 f7124c88641fdffa2d.png, doc/sphinx/.build/html/_images/math/10ac0238 27bb7b549e882c11b0109030b9d86041.png, doc/sphinx/.build/html/_images /math/15c811c72fbb238885328c9dc4d880060dceef3f.png, doc/sphinx/.buil d/html/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png, do c/sphinx/.build/html/_images/math/3372c1cb6d68cf97c2d231acc0b47b95a9 ed04cc.png, doc/sphinx/.build/html/_images/math/34857b3ba74ce5cd8607 f3ebd23e9015908ada71.png, doc/sphinx/.build/html/_images/math/371cf6 c785f7ed9950174dc1a6fc0cb4aca3ae0b.png, doc/sphinx/.build/html/_imag es/math/3ed5875026627e21c18c5d905b4b62b75f117b3c.png, doc/sphinx/.bu ild/html/_images/math/48cb38340548251a81919e1b5547cc672dd63b41.png, d oc/sphinx/.build/html/_images/math/53828380e66417b92d288f44849b4564c 2aefa34.png, doc/sphinx/.build/html/_images/math/6a47ca0fe7cb276abc0 22af6ac88ddae1a9d6894.png, doc/sphinx/.build/html/_images/math/99fb5 bc1bac149d49d8bf99756ed93173eacbfde.png, doc/sphinx/.build/html/_ima ges/math/9e0ec34cd8860ceb97113f81ba768ba739ad5166.png, doc/sphinx/.b uild/html/_images/math/9ee4b825a2e36ae093ed7be5e4851ef453b34914.png, doc/sphinx/.build/html/_images/math/a041d4af2f54e7490ce650ba9960c7b4 9200a594.png, doc/sphinx/.build/html/_images/math/a1ffc0a012620941fe 660cedabff822ce7162eca.png, doc/sphinx/.build/html/_images/math/ad28 c83c99a8fd0dd2e2e594c9d02ee532765a0a.png, doc/sphinx/.build/html/_im ages/math/c2ded198ceb12ab7c4b85de9f763e16a0631edce.png, doc/sphinx/. build/html/_images/math/c384df5165193c1645f53b30f6d4cf65e488a663.png , doc/sphinx/.build/html/_images/math/dae9fdcd4039896c429769826c4759 2370611d6b.png, doc/sphinx/.build/html/_images/math/e0d2bf360290fd61 d1c1557e763f2622363b3d35.png, doc/sphinx/.build/html/_images/math/e2 a662e2209e4d2ee234a3ae367d5337a31409e0.png, doc/sphinx/.build/html/_ images/math/f37bba504894945c07a32f5496d74299a37aa51c.png, doc/sphinx /.build/html/_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.p ng, doc/sphinx/.build/html/_images/math/f8c03b65830c6482e37c5bbc31d3 b19ee646ee06.png, doc/sphinx/.build/html/_images/math/fc2cd2267d4502 2f197cdb870c1642c539c08dde.png, doc/sphinx/.build/html/_images/overview.png, doc/sphinx/.build/html/_images/peak.png, doc/sphinx/.build/html/_images/resultstable.png, doc/sphinx/.build/html/_images/selectfinaltemplate.png, doc/sphinx/.build/html/_images/selection.png, doc/sphinx/.build/html/_images/stimfit_dos.png, doc/sphinx/.build/html/_images/test.png, doc/sphinx/.build/html/_images/traceselection.png, doc/sphinx/.build/html/_images/viewscalebars.png, doc/sphinx/.build/html/_images/zoom.png, doc/sphinx/.build/html/_images/zoompopup.png, doc/sphinx/.build/html/_sources/contents.txt, doc/sphinx/.build/html/_sources/howto/amplitudes.txt, doc/sphinx/.build/html/_sources/howto/apcounting.txt, doc/sphinx/.build/html/_sources/howto/cuttingtraces.txt, doc/sphinx/.build/html/_sources/howto/index.txt, doc/sphinx/.build/html/_sources/howto/introclass.txt, doc/sphinx/.build/html/_sources/howto/latencies.txt, doc/sphinx/.build/html/_sources/howto/resistances.txt, doc/sphinx/.build/html/_sources/howto/runningmean.txt, doc/sphinx/.build/html/_sources/links/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/building.txt, doc/sphinx/.build/html/_sources/linux_install_guide/downloads.txt, doc/sphinx/.build/html/_sources/linux_install_guide/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/requirement.txt, doc/sphinx/.build/html/_sources/linux_install_guide/updates.txt, doc/sphinx/.build/html/_sources/manual/bibliography.txt, doc/sphinx/.build/html/_sources/manual/event_extraction.txt, doc/sphinx/.build/html/_sources/manual/getting_started.txt, doc/sphinx/.build/html/_sources/manual/index.txt, doc/sphinx/.build/html/_sources/manual/latency_measurements.txt, doc/sphinx/.build/html/_sources/manual/preface.txt, doc/sphinx/.build/html/_sources/manual/python.txt, doc/sphinx/.build/html/_sources/osx_install_guide/building.txt, doc/sphinx/.build/html/_sources/osx_install_guide/index.txt, doc/sphinx/.build/html/_sources/osx_install_guide/prerequisites.txt, doc/sphinx/.build/html/_sources/references/index.txt, doc/sphinx/.build/html/_sources/stf_reference/stf.txt, doc/sphinx/.build/html/_static/basic.css, doc/sphinx/.build/html/_static/contents.png, doc/sphinx/.build/html/_static/default.css, doc/sphinx/.build/html/_static/doctools.js, doc/sphinx/.build/html/_static/file.png, doc/sphinx/.build/html/_static/jquery.js, doc/sphinx/.build/html/_static/minus.png, doc/sphinx/.build/html/_static/navigation.png, doc/sphinx/.build/html/_static/plus.png, doc/sphinx/.build/html/_static/pygments.css, doc/sphinx/.build/html/_static/rightsidebar.css, doc/sphinx/.build/html/_static/searchtools.js, doc/sphinx/.build/html/_static/sphinxdoc.css, doc/sphinx/.build/html/_static/stickysidebar.css, doc/sphinx/.build/html/_static/traditional.css, doc/sphinx/.build/html/contents.html, doc/sphinx/.build/html/genindex.html, doc/sphinx/.build/html/howto/amplitudes.html, doc/sphinx/.build/html/howto/apcounting.html, doc/sphinx/.build/html/howto/cuttingtraces.html, doc/sphinx/.build/html/howto/index.html, doc/sphinx/.build/html/howto/introclass.html, doc/sphinx/.build/html/howto/latencies.html, doc/sphinx/.build/html/howto/resistances.html, doc/sphinx/.build/html/howto/runningmean.html, doc/sphinx/.build/html/index.html, doc/sphinx/.build/html/links/index.html, doc/sphinx/.build/html/linux_install_guide/building.html, doc/sphinx/.build/html/linux_install_guide/downloads.html, doc/sphinx/.build/html/linux_install_guide/index.html, doc/sphinx/.build/html/linux_install_guide/requirement.html, doc/sphinx/.build/html/linux_install_guide/updates.html, doc/sphinx/.build/html/manual/bibliography.html, doc/sphinx/.build/html/manual/event_extraction.html, doc/sphinx/.build/html/manual/getting_started.html, doc/sphinx/.build/html/manual/index.html, doc/sphinx/.build/html/manual/latency_measurements.html, doc/sphinx/.build/html/manual/preface.html, doc/sphinx/.build/html/manual/python.html, doc/sphinx/.build/html/modindex.html, doc/sphinx/.build/html/objects.inv, doc/sphinx/.build/html/osx_install_guide/building.html, doc/sphinx/.build/html/osx_install_guide/index.html, doc/sphinx/.build/html/osx_install_guide/prerequisites.html, doc/sphinx/.build/html/references/index.html, doc/sphinx/.build/html/search.html, doc/sphinx/.build/html/searchindex.js, doc/sphinx/.build/html/stf_reference/stf.html, doc/sphinx/.build/latex/APmodule.png, doc/sphinx/.build/latex/Stimfitdocumentation.pdf, doc/sphinx/.build/latex/Stimfitdocumentation.tex, doc/sphinx/.build/latex/Stimfitdocumentation.toc, doc/sphinx/.build/latex/average.png, doc/sphinx/.build/latex/bait_template.png, doc/sphinx/.build/latex/baseline.png, doc/sphinx/.build/latex/batchanalysis.png, doc/sphinx/.build/latex/channelselection.png, doc/sphinx/.build/latex/channelselectiondrop.png, doc/sphinx/.build/latex/cursorsettings.png, doc/sphinx/.build/latex/eventbutton.png, doc/sphinx/.build/latex/eventdetectionsettings.png, doc/sphinx/.build/latex/events.png, doc/sphinx/.build/latex/falsenegative.png, doc/sphinx/.build/latex/finaltemplate.png, doc/sphinx/.build/latex/fit.png, doc/sphinx/.build/latex/fitselection.png, doc/sphinx/.build/latex/fittowindow.png, doc/sphinx/.build/latex/fncychap.sty, doc/sphinx/.build/latex/foot.png, doc/sphinx/.build/latex/howto.cls, doc/sphinx/.build/latex/latency.png, doc/sphinx/.build/latex/latencytraces.png, doc/sphinx/.build/latex/manual.cls, doc/sphinx/.build/latex/overview.png, doc/sphinx/.build/latex/peak.png, doc/sphinx/.build/latex/python.ist, doc/sphinx/.build/latex/resultstable.png, doc/sphinx/.build/latex/selectfinaltemplate.png, doc/sphinx/.build/latex/selection.png, doc/sphinx/.build/latex/sphinx.sty, doc/sphinx/.build/latex/stimfit_dos.png, doc/sphinx/.build/latex/tabulary.sty, doc/sphinx/.build/latex/test.png, doc/sphinx/.build/latex/traceselection.png, doc/sphinx/.build/latex/viewscalebars.png, doc/sphinx/.build/latex/zoom.png, doc/sphinx/.build/latex/zoompopup.png, src/core/filelib/cfs.cpp, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, src/stfswig/plottools.py: merged changes from my User Dialog additions [804130f43180] * BUGS, TODO: added my TODO list [3f268583366b] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h: Status of PSlope cursor mode without extra wxStrCursorsDlg attribute [bc460c04d901] 2010-07-18 Jose Guzman * src/app/app.cpp, src/app/app.h, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/core/stimdefs.h: Added option to set the second slope cursor to a given distance (in x-units) from the first slope cursor [2d1ab28e0346] 2010-07-16 Jose Guzman * src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h: Added DeltaT property to the Recording class [2d3049fd501b] 2010-07-18 Christoph Schmidt-Hieber * .hgignore, Makefile.am, doc/sphinx/.build/doctrees/contents.doctree, doc/sphinx/.build/doctrees/environment.pickle, doc/sphinx/.build/doctrees/howto/amplitudes.doctree, doc/sphinx/.build/doctrees/howto/apcounting.doctree, doc/sphinx/.build/doctrees/howto/cuttingtraces.doctree, doc/sphinx/.build/doctrees/howto/index.doctree, doc/sphinx/.build/doctrees/howto/introclass.doctree, doc/sphinx/.build/doctrees/howto/latencies.doctree, doc/sphinx/.build/doctrees/howto/resistances.doctree, doc/sphinx/.build/doctrees/howto/runningmean.doctree, doc/sphinx/.build/doctrees/links/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/building.doctree, doc/sphinx/.build/doctrees/linux_install_guide/downloads.doctree, doc/sphinx/.build/doctrees/linux_install_guide/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/requirement.doctree, doc/sphinx/.build/doctrees/linux_install_guide/updates.doctree, doc/sphinx/.build/doctrees/manual/bibliography.doctree, doc/sphinx/.build/doctrees/manual/event_extraction.doctree, doc/sphinx/.build/doctrees/manual/getting_started.doctree, doc/sphinx/.build/doctrees/manual/index.doctree, doc/sphinx/.build/doctrees/manual/latency_measurements.doctree, doc/sphinx/.build/doctrees/manual/preface.doctree, doc/sphinx/.build/doctrees/manual/python.doctree, doc/sphinx/.build/doctrees/osx_install_guide/building.doctree, doc/sphinx/.build/doctrees/osx_install_guide/index.doctree, doc/sphinx/.build/doctrees/osx_install_guide/prerequisites.doctree, doc/sphinx/.build/doctrees/references/index.doctree, doc/sphinx/.build/doctrees/stf_reference/stf.doctree, doc/sphinx/.build/html/.buildinfo, doc/sphinx/.build/html/_images/APmodule.png, doc/sphinx/.build/html/_images/average.png, doc/sphinx/.build/html/_images/bait_template.png, doc/sphinx/.build/html/_images/baseline.png, doc/sphinx/.build/html/_images/batchanalysis.png, doc/sphinx/.build/html/_images/channelselection.png, doc/sphinx/.build/html/_images/channelselectiondrop.png, doc/sphinx/.build/html/_images/cursorsettings.png, doc/sphinx/.build/html/_images/eventbutton.png, doc/sphinx/.build/html/_images/eventdetectionsettings.png, doc/sphinx/.build/html/_images/events.png, doc/sphinx/.build/html/_images/falsenegative.png, doc/sphinx/.build/html/_images/finaltemplate.png, doc/sphinx/.build/html/_images/fit.png, doc/sphinx/.build/html/_images/fitselection.png, doc/sphinx/.build/html/_images/fittowindow.png, doc/sphinx/.build/html/_images/foot.png, doc/sphinx/.build/html/_images/latency.png, doc/sphinx/.build/html/_images/latencytraces.png, doc/sphinx/.build/ html/_images/math/0697caad7caa424cb1d6913067117ac1ef4afcfc.png, doc/ sphinx/.build/html/_images/math/0772102cbdf827d21b8343e12c2a8766e0f1 7d97.png, doc/sphinx/.build/html/_images/math/0936df714cc1754db6b256 f7124c88641fdffa2d.png, doc/sphinx/.build/html/_images/math/10ac0238 27bb7b549e882c11b0109030b9d86041.png, doc/sphinx/.build/html/_images /math/15c811c72fbb238885328c9dc4d880060dceef3f.png, doc/sphinx/.buil d/html/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png, do c/sphinx/.build/html/_images/math/3372c1cb6d68cf97c2d231acc0b47b95a9 ed04cc.png, doc/sphinx/.build/html/_images/math/34857b3ba74ce5cd8607 f3ebd23e9015908ada71.png, doc/sphinx/.build/html/_images/math/371cf6 c785f7ed9950174dc1a6fc0cb4aca3ae0b.png, doc/sphinx/.build/html/_imag es/math/3ed5875026627e21c18c5d905b4b62b75f117b3c.png, doc/sphinx/.bu ild/html/_images/math/48cb38340548251a81919e1b5547cc672dd63b41.png, d oc/sphinx/.build/html/_images/math/53828380e66417b92d288f44849b4564c 2aefa34.png, doc/sphinx/.build/html/_images/math/6a47ca0fe7cb276abc0 22af6ac88ddae1a9d6894.png, doc/sphinx/.build/html/_images/math/99fb5 bc1bac149d49d8bf99756ed93173eacbfde.png, doc/sphinx/.build/html/_ima ges/math/9e0ec34cd8860ceb97113f81ba768ba739ad5166.png, doc/sphinx/.b uild/html/_images/math/9ee4b825a2e36ae093ed7be5e4851ef453b34914.png, doc/sphinx/.build/html/_images/math/a041d4af2f54e7490ce650ba9960c7b4 9200a594.png, doc/sphinx/.build/html/_images/math/a1ffc0a012620941fe 660cedabff822ce7162eca.png, doc/sphinx/.build/html/_images/math/ad28 c83c99a8fd0dd2e2e594c9d02ee532765a0a.png, doc/sphinx/.build/html/_im ages/math/c2ded198ceb12ab7c4b85de9f763e16a0631edce.png, doc/sphinx/. build/html/_images/math/c384df5165193c1645f53b30f6d4cf65e488a663.png , doc/sphinx/.build/html/_images/math/dae9fdcd4039896c429769826c4759 2370611d6b.png, doc/sphinx/.build/html/_images/math/e0d2bf360290fd61 d1c1557e763f2622363b3d35.png, doc/sphinx/.build/html/_images/math/e2 a662e2209e4d2ee234a3ae367d5337a31409e0.png, doc/sphinx/.build/html/_ images/math/f37bba504894945c07a32f5496d74299a37aa51c.png, doc/sphinx /.build/html/_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.p ng, doc/sphinx/.build/html/_images/math/f8c03b65830c6482e37c5bbc31d3 b19ee646ee06.png, doc/sphinx/.build/html/_images/math/fc2cd2267d4502 2f197cdb870c1642c539c08dde.png, doc/sphinx/.build/html/_images/overview.png, doc/sphinx/.build/html/_images/peak.png, doc/sphinx/.build/html/_images/resultstable.png, doc/sphinx/.build/html/_images/selectfinaltemplate.png, doc/sphinx/.build/html/_images/selection.png, doc/sphinx/.build/html/_images/stimfit_dos.png, doc/sphinx/.build/html/_images/test.png, doc/sphinx/.build/html/_images/traceselection.png, doc/sphinx/.build/html/_images/viewscalebars.png, doc/sphinx/.build/html/_images/zoom.png, doc/sphinx/.build/html/_images/zoompopup.png, doc/sphinx/.build/html/_sources/contents.txt, doc/sphinx/.build/html/_sources/howto/amplitudes.txt, doc/sphinx/.build/html/_sources/howto/apcounting.txt, doc/sphinx/.build/html/_sources/howto/cuttingtraces.txt, doc/sphinx/.build/html/_sources/howto/index.txt, doc/sphinx/.build/html/_sources/howto/introclass.txt, doc/sphinx/.build/html/_sources/howto/latencies.txt, doc/sphinx/.build/html/_sources/howto/resistances.txt, doc/sphinx/.build/html/_sources/howto/runningmean.txt, doc/sphinx/.build/html/_sources/links/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/building.txt, doc/sphinx/.build/html/_sources/linux_install_guide/downloads.txt, doc/sphinx/.build/html/_sources/linux_install_guide/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/moduleonly.txt, doc/sphinx/.build/html/_sources/linux_install_guide/requirement.txt, doc/sphinx/.build/html/_sources/linux_install_guide/updates.txt, doc/sphinx/.build/html/_sources/manual/bibliography.txt, doc/sphinx/.build/html/_sources/manual/event_extraction.txt, doc/sphinx/.build/html/_sources/manual/getting_started.txt, doc/sphinx/.build/html/_sources/manual/index.txt, doc/sphinx/.build/html/_sources/manual/latency_measurements.txt, doc/sphinx/.build/html/_sources/manual/preface.txt, doc/sphinx/.build/html/_sources/manual/python.txt, doc/sphinx/.build/html/_sources/osx_install_guide/building.txt, doc/sphinx/.build/html/_sources/osx_install_guide/index.txt, doc/sphinx/.build/html/_sources/osx_install_guide/prerequisites.txt, doc/sphinx/.build/html/_sources/references/index.txt, doc/sphinx/.build/html/_sources/stf_reference/stf.txt, doc/sphinx/.build/html/_static/basic.css, doc/sphinx/.build/html/_static/contents.png, doc/sphinx/.build/html/_static/default.css, doc/sphinx/.build/html/_static/doctools.js, doc/sphinx/.build/html/_static/file.png, doc/sphinx/.build/html/_static/jquery.js, doc/sphinx/.build/html/_static/minus.png, doc/sphinx/.build/html/_static/navigation.png, doc/sphinx/.build/html/_static/plus.png, doc/sphinx/.build/html/_static/pygments.css, doc/sphinx/.build/html/_static/rightsidebar.css, doc/sphinx/.build/html/_static/searchtools.js, doc/sphinx/.build/html/_static/sphinxdoc.css, doc/sphinx/.build/html/_static/stickysidebar.css, doc/sphinx/.build/html/_static/traditional.css, doc/sphinx/.build/html/contents.html, doc/sphinx/.build/html/genindex.html, doc/sphinx/.build/html/howto/amplitudes.html, doc/sphinx/.build/html/howto/apcounting.html, doc/sphinx/.build/html/howto/cuttingtraces.html, doc/sphinx/.build/html/howto/index.html, doc/sphinx/.build/html/howto/introclass.html, doc/sphinx/.build/html/howto/latencies.html, doc/sphinx/.build/html/howto/resistances.html, doc/sphinx/.build/html/howto/runningmean.html, doc/sphinx/.build/html/index.html, doc/sphinx/.build/html/links/index.html, doc/sphinx/.build/html/linux_install_guide/building.html, doc/sphinx/.build/html/linux_install_guide/downloads.html, doc/sphinx/.build/html/linux_install_guide/index.html, doc/sphinx/.build/html/linux_install_guide/moduleonly.html, doc/sphinx/.build/html/linux_install_guide/requirement.html, doc/sphinx/.build/html/linux_install_guide/updates.html, doc/sphinx/.build/html/manual/bibliography.html, doc/sphinx/.build/html/manual/event_extraction.html, doc/sphinx/.build/html/manual/getting_started.html, doc/sphinx/.build/html/manual/index.html, doc/sphinx/.build/html/manual/latency_measurements.html, doc/sphinx/.build/html/manual/preface.html, doc/sphinx/.build/html/manual/python.html, doc/sphinx/.build/html/modindex.html, doc/sphinx/.build/html/objects.inv, doc/sphinx/.build/html/osx_install_guide/building.html, doc/sphinx/.build/html/osx_install_guide/index.html, doc/sphinx/.build/html/osx_install_guide/prerequisites.html, doc/sphinx/.build/html/references/index.html, doc/sphinx/.build/html/search.html, doc/sphinx/.build/html/searchindex.js, doc/sphinx/.build/html/stf_reference/stf.html, doc/sphinx/.build/latex/APmodule.png, doc/sphinx/.build/latex/Stimfitdocumentation.pdf, doc/sphinx/.build/latex/Stimfitdocumentation.tex, doc/sphinx/.build/latex/Stimfitdocumentation.toc, doc/sphinx/.build/latex/average.png, doc/sphinx/.build/latex/bait_template.png, doc/sphinx/.build/latex/baseline.png, doc/sphinx/.build/latex/batchanalysis.png, doc/sphinx/.build/latex/channelselection.png, doc/sphinx/.build/latex/channelselectiondrop.png, doc/sphinx/.build/latex/cursorsettings.png, doc/sphinx/.build/latex/eventbutton.png, doc/sphinx/.build/latex/eventdetectionsettings.png, doc/sphinx/.build/latex/events.png, doc/sphinx/.build/latex/falsenegative.png, doc/sphinx/.build/latex/finaltemplate.png, doc/sphinx/.build/latex/fit.png, doc/sphinx/.build/latex/fitselection.png, doc/sphinx/.build/latex/fittowindow.png, doc/sphinx/.build/latex/fncychap.sty, doc/sphinx/.build/latex/foot.png, doc/sphinx/.build/latex/howto.cls, doc/sphinx/.build/latex/latency.png, doc/sphinx/.build/latex/latencytraces.png, doc/sphinx/.build/latex/manual.cls, doc/sphinx/.build/latex/overview.png, doc/sphinx/.build/latex/peak.png, doc/sphinx/.build/latex/python.ist, doc/sphinx/.build/latex/resultstable.png, doc/sphinx/.build/latex/selectfinaltemplate.png, doc/sphinx/.build/latex/selection.png, doc/sphinx/.build/latex/sphinx.sty, doc/sphinx/.build/latex/stimfit_dos.png, doc/sphinx/.build/latex/tabulary.sty, doc/sphinx/.build/latex/test.png, doc/sphinx/.build/latex/traceselection.png, doc/sphinx/.build/latex/viewscalebars.png, doc/sphinx/.build/latex/zoom.png, doc/sphinx/.build/latex/zoompopup.png, doc/sphinx/.templates/index.html, doc/sphinx/contents.rst, doc/sphinx/howto/index.rst, doc/sphinx/linux_install_guide/moduleonly.rst, doc/sphinx/osx_install_guide/index.rst, doc/sphinx/osx_install_guide/moduleonly.rst, doc/sphinx/stfio/index.rst, src/stfswig/plottools.py, src/stfswig/stfio_plot.py, src/stfswig/stfioswig.i: Added io module documentation. Please keep .build out of repository. [264a8c1e59c7] * src/core/filelib/abflib.cpp, src/core/filelib/atflib.cpp, src/core/filelib/axglib.cpp, src/core/filelib/cfslib.cpp, src/core/filelib/hdf5lib.cpp, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: Corrected a bug in abf2 library. Show progress information while reading files. [fe789d93c115] 2010-07-17 Christoph Schmidt-Hieber * doc/sphinx/.build/doctrees/contents.doctree, doc/sphinx/.build/doctrees/environment.pickle, doc/sphinx/.build/doctrees/howto/amplitudes.doctree, doc/sphinx/.build/doctrees/howto/apcounting.doctree, doc/sphinx/.build/doctrees/howto/cuttingtraces.doctree, doc/sphinx/.build/doctrees/howto/index.doctree, doc/sphinx/.build/doctrees/howto/introclass.doctree, doc/sphinx/.build/doctrees/howto/latencies.doctree, doc/sphinx/.build/doctrees/howto/resistances.doctree, doc/sphinx/.build/doctrees/howto/runningmean.doctree, doc/sphinx/.build/doctrees/links/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/building.doctree, doc/sphinx/.build/doctrees/linux_install_guide/downloads.doctree, doc/sphinx/.build/doctrees/linux_install_guide/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/requirement.doctree, doc/sphinx/.build/doctrees/linux_install_guide/updates.doctree, doc/sphinx/.build/doctrees/manual/bibliography.doctree, doc/sphinx/.build/doctrees/manual/event_extraction.doctree, doc/sphinx/.build/doctrees/manual/getting_started.doctree, doc/sphinx/.build/doctrees/manual/index.doctree, doc/sphinx/.build/doctrees/manual/latency_measurements.doctree, doc/sphinx/.build/doctrees/manual/preface.doctree, doc/sphinx/.build/doctrees/manual/python.doctree, doc/sphinx/.build/doctrees/osx_install_guide/building.doctree, doc/sphinx/.build/doctrees/osx_install_guide/index.doctree, doc/sphinx/.build/doctrees/osx_install_guide/prerequisites.doctree, doc/sphinx/.build/doctrees/references/index.doctree, doc/sphinx/.build/doctrees/stf_reference/stf.doctree, doc/sphinx/.build/html/_sources/linux_install_guide/building.txt, doc/sphinx/.build/html/_sources/linux_install_guide/downloads.txt, doc/sphinx/.build/html/_sources/linux_install_guide/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/moduleonly.txt, doc/sphinx/.build/html/_sources/linux_install_guide/requirement.txt, doc/sphinx/.build/html/_static/default.css, doc/sphinx/.build/html/_static/jquery.js, doc/sphinx/.build/html/_static/searchtools.js, doc/sphinx/.build/html/contents.html, doc/sphinx/.build/html/genindex.html, doc/sphinx/.build/html/howto/amplitudes.html, doc/sphinx/.build/html/howto/apcounting.html, doc/sphinx/.build/html/howto/cuttingtraces.html, doc/sphinx/.build/html/howto/index.html, doc/sphinx/.build/html/howto/introclass.html, doc/sphinx/.build/html/howto/latencies.html, doc/sphinx/.build/html/howto/resistances.html, doc/sphinx/.build/html/howto/runningmean.html, doc/sphinx/.build/html/index.html, doc/sphinx/.build/html/links/index.html, doc/sphinx/.build/html/linux_install_guide/building.html, doc/sphinx/.build/html/linux_install_guide/downloads.html, doc/sphinx/.build/html/linux_install_guide/index.html, doc/sphinx/.build/html/linux_install_guide/moduleonly.html, doc/sphinx/.build/html/linux_install_guide/requirement.html, doc/sphinx/.build/html/linux_install_guide/updates.html, doc/sphinx/.build/html/manual/bibliography.html, doc/sphinx/.build/html/manual/event_extraction.html, doc/sphinx/.build/html/manual/getting_started.html, doc/sphinx/.build/html/manual/index.html, doc/sphinx/.build/html/manual/latency_measurements.html, doc/sphinx/.build/html/manual/preface.html, doc/sphinx/.build/html/manual/python.html, doc/sphinx/.build/html/modindex.html, doc/sphinx/.build/html/objects.inv, doc/sphinx/.build/html/osx_install_guide/building.html, doc/sphinx/.build/html/osx_install_guide/index.html, doc/sphinx/.build/html/osx_install_guide/prerequisites.html, doc/sphinx/.build/html/references/index.html, doc/sphinx/.build/html/search.html, doc/sphinx/.build/html/searchindex.js, doc/sphinx/.build/html/stf_reference/stf.html, doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/moduleonly.rst, doc/sphinx/linux_install_guide/requirement.rst: Added Linux module build instructions. [93d18e3c823c] * Makefile.am, m4/lt~obsolete.m4, src/core/channel.cpp, src/core/channel.h, src/core/core.cpp, src/core/core.h, src/core/filelib/atflib.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axglib.cpp, src/core/filelib/hdf5lib.cpp, src/core/recording.cpp, src/core/recording.h, src/stfswig/stfio.py, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.h, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: Added support for reading axg and atf files and writing hdf5 file to io module. [dce4044985c9] * Makefile.am, m4/lt~obsolete.m4: Corrected io module install path. [0a00d3bb5dda] 2010-07-16 Christoph Schmidt-Hieber * Makefile.am, src/core/channel.cpp, src/core/channel.h, src/core/core.cpp, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/hdf5lib.cpp, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, src/stfswig/stfio.py, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.h, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: Added reading support for cfs, hdf5 and abf files to io module. [c25315626313] * Makefile.am, src/core/filelib/cfs.c, src/core/filelib/cfs.cpp, src/core/filelib/cfs.h, src/core/filelib/cfslib.cpp, src/core/filelib/machine.h: Made cfs library 64bit-compatible. [5334ef73bf3f] * Makefile.am, src/core/filelib/cfslib.cpp, src/stfswig/stfio.py, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.h, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx: IO module: add _open function. [78bc036969b6] 2010-07-16 Jose Guzman * src/app/dlgs/cursorsdlg.cpp, src/core/recording.cpp: Corrected wrong behaviour of radio options in Slope tab [667622fcf706] 2010-07-15 Jose Guzman * src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/core/recording.cpp, src/core/stimdefs.h: started Delta T option for the location of the 2nd PSlope cursor [baa2284b7dfc] * test.png: Removed screenshot of the Slope Cursor Settins tab [f803be132eec] * src/app/dlgs/smalldlgs.cpp, test.png: Slope added to Batch Analysis options [802f33d2e05b] * src/app/dlgs/smalldlgs.cpp: Size of choose value window used to Batch Analysis modified to show all options [b6e960badc63] * src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h: Slope added to the Analysis Toolbar option [5f78beb0d6c6] * src/app/app.h, src/app/copygrid.cpp, src/app/copygrid.h: Slope checkmark to view/hide slope measurements in results window [288ec2496136] * src/app/dlgs/cursorsdlg.cpp: user-defined radio button and text are aligned in the Peak Cursor Settings dialog [a6f46b18fc35] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/graph.cpp: Slope cursor box are editable manually [c6baee0f344d] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/core/recording.cpp, src/core/recording.h: Recording class handels start/end slope recording (and not wxStfCursorsDlg).Mow Slope measurements are updated dynamically. [da8c0e130913] 2010-07-14 Jose Guzman * src/app/app.h, src/app/parentframe.cpp: wxID_TOOL_SLOPE is now ID_TOOL_SLOPE [33f96cb127ad] * src/app/dlgs/cursorsdlg.cpp: substitution of Editable by Enable in slope wxTextCtrl cursor [62aae1498d8f] 2010-07-14 Christoph Schmidt-Hieber * src/core/core.cpp, src/core/stimdefs.h: Temporary macro guards for io module. [fc5728467fc2] * src/core/stimdefs.h, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.i: Moved some typedefs out of stf:: namespace. [264f79d432b9] * src/core/stimdefs.h: Cleaned up small merge issue. [673747b4301e] 2010-07-14 Jose Guzman * stfconf.h: Added stfconf.h [2860d8a89d9f] * src/app/app.cpp, src/app/app.h, src/app/graph.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, stfconf.h: merged slope with io module [dc3c48f046c9] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h: Added Slope tab option in Cursors Settings dialog [3e49446f0f1c] 2010-07-12 Christoph Schmidt-Hieber * Makefile.am, src/stfswig/Makefile.am: Build system simplifications for io module. [b4936b918125] 2010-07-14 Jose Guzman * src/app/unopt.cpp: avoid multiline command warning [65fcb00a79ae] 2010-07-12 Christoph Schmidt-Hieber * Makefile.am, configure.in, src/core/filelib/cfs.cpp, src/core/filelib/hdf5lib.cpp: Brought python io module to building stage. [bd118c576b4b] 2010-07-14 Jose Guzman * src/app/app.h, src/app/graph.cpp, src/app/graph.h, src/app/parentframe.cpp, src/app/parentframe.h, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, src/icons/slope.xpm: blue Slope cursors added to stf graph [07b8ad7ce278] 2010-07-13 Jose Guzman * src/core/measlib.h: Define template and function to calculate slope [c0d412bf300e] 2010-07-12 Christoph Schmidt-Hieber * Makefile.am, configure.in, src/app/Makefile.am, src/core/Makefile.am, src/core/channel.cpp, src/core/core.cpp, src/core/core.h, src/core/filelib/cfs.cpp, src/core/filelib/cfslib.cpp, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp, src/core/section.h, src/core/stimdefs.h, src/stfswig/Makefile.am, src/stfswig/stfio.py, src/stfswig/stfioswig.cxx, src/stfswig/stfioswig.h, src/stfswig/stfioswig.i, src/stfswig/stfioswig_wrap.cxx, stfconf.h: Started framework for standalone file io python module. [7b9557e19cba] 2010-07-11 Christoph Schmidt-Hieber * doc/sphinx/.build/html/_static/contents.png, doc/sphinx/.build/html/_static/navigation.png, doc/sphinx/.build/html/_static/rightsidebar.css, doc/sphinx/.build/html/_static/sphinxdoc.css, doc/sphinx/.build/html/_static/stickysidebar.css, doc/sphinx/.build/html/_static/traditional.css, src/app/app.cpp, src/app/app.h, src/app/childframe.cpp, src/app/copygrid.cpp, src/app/doc.cpp, src/app/doc.h, src/app/graph.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/core/filelib/hekalib.cpp: Cleanup: Distinguish own IDs (ID_*) from wx IDs (wxID_*). [72b63f80e6f9] 2010-07-10 Jose Guzman * .hgignore: Remove /doc/sphinx/.build/doctrees from repository [a4f2aa1c1a7e] * .hgignore, doc/sphinx/.build/doctrees/contents.doctree, doc/sphinx/.build/doctrees/environment.pickle, doc/sphinx/.build/doctrees/howto/amplitudes.doctree, doc/sphinx/.build/doctrees/howto/apcounting.doctree, doc/sphinx/.build/doctrees/howto/cuttingtraces.doctree, doc/sphinx/.build/doctrees/howto/index.doctree, doc/sphinx/.build/doctrees/howto/introclass.doctree, doc/sphinx/.build/doctrees/howto/latencies.doctree, doc/sphinx/.build/doctrees/howto/resistances.doctree, doc/sphinx/.build/doctrees/howto/runningmean.doctree, doc/sphinx/.build/doctrees/links/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/building.doctree, doc/sphinx/.build/doctrees/linux_install_guide/downloads.doctree, doc/sphinx/.build/doctrees/linux_install_guide/index.doctree, doc/sphinx/.build/doctrees/linux_install_guide/requirement.doctree, doc/sphinx/.build/doctrees/linux_install_guide/updates.doctree, doc/sphinx/.build/doctrees/manual/bibliography.doctree, doc/sphinx/.build/doctrees/manual/event_extraction.doctree, doc/sphinx/.build/doctrees/manual/getting_started.doctree, doc/sphinx/.build/doctrees/manual/index.doctree, doc/sphinx/.build/doctrees/manual/latency_measurements.doctree, doc/sphinx/.build/doctrees/manual/preface.doctree, doc/sphinx/.build/doctrees/manual/python.doctree, doc/sphinx/.build/doctrees/osx_install_guide/building.doctree, doc/sphinx/.build/doctrees/osx_install_guide/index.doctree, doc/sphinx/.build/doctrees/osx_install_guide/prerequisites.doctree, doc/sphinx/.build/doctrees/references/index.doctree, doc/sphinx/.build/doctrees/stf_reference/stf.doctree, doc/sphinx/.build/html/.buildinfo, doc/sphinx/.build/html/_images/APmodule.png, doc/sphinx/.build/html/_images/average.png, doc/sphinx/.build/html/_images/bait_template.png, doc/sphinx/.build/html/_images/baseline.png, doc/sphinx/.build/html/_images/batchanalysis.png, doc/sphinx/.build/html/_images/channelselection.png, doc/sphinx/.build/html/_images/channelselectiondrop.png, doc/sphinx/.build/html/_images/cursorsettings.png, doc/sphinx/.build/html/_images/eventbutton.png, doc/sphinx/.build/html/_images/eventdetectionsettings.png, doc/sphinx/.build/html/_images/events.png, doc/sphinx/.build/html/_images/falsenegative.png, doc/sphinx/.build/html/_images/finaltemplate.png, doc/sphinx/.build/html/_images/fit.png, doc/sphinx/.build/html/_images/fitselection.png, doc/sphinx/.build/html/_images/fittowindow.png, doc/sphinx/.build/html/_images/foot.png, doc/sphinx/.build/html/_images/latency.png, doc/sphinx/.build/html/_images/latencytraces.png, doc/sphinx/.build/ html/_images/math/0697caad7caa424cb1d6913067117ac1ef4afcfc.png, doc/ sphinx/.build/html/_images/math/0772102cbdf827d21b8343e12c2a8766e0f1 7d97.png, doc/sphinx/.build/html/_images/math/0936df714cc1754db6b256 f7124c88641fdffa2d.png, doc/sphinx/.build/html/_images/math/10ac0238 27bb7b549e882c11b0109030b9d86041.png, doc/sphinx/.build/html/_images /math/15c811c72fbb238885328c9dc4d880060dceef3f.png, doc/sphinx/.buil d/html/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png, do c/sphinx/.build/html/_images/math/3372c1cb6d68cf97c2d231acc0b47b95a9 ed04cc.png, doc/sphinx/.build/html/_images/math/34857b3ba74ce5cd8607 f3ebd23e9015908ada71.png, doc/sphinx/.build/html/_images/math/371cf6 c785f7ed9950174dc1a6fc0cb4aca3ae0b.png, doc/sphinx/.build/html/_imag es/math/3ed5875026627e21c18c5d905b4b62b75f117b3c.png, doc/sphinx/.bu ild/html/_images/math/48cb38340548251a81919e1b5547cc672dd63b41.png, d oc/sphinx/.build/html/_images/math/53828380e66417b92d288f44849b4564c 2aefa34.png, doc/sphinx/.build/html/_images/math/6a47ca0fe7cb276abc0 22af6ac88ddae1a9d6894.png, doc/sphinx/.build/html/_images/math/99fb5 bc1bac149d49d8bf99756ed93173eacbfde.png, doc/sphinx/.build/html/_ima ges/math/9e0ec34cd8860ceb97113f81ba768ba739ad5166.png, doc/sphinx/.b uild/html/_images/math/9ee4b825a2e36ae093ed7be5e4851ef453b34914.png, doc/sphinx/.build/html/_images/math/a041d4af2f54e7490ce650ba9960c7b4 9200a594.png, doc/sphinx/.build/html/_images/math/a1ffc0a012620941fe 660cedabff822ce7162eca.png, doc/sphinx/.build/html/_images/math/ad28 c83c99a8fd0dd2e2e594c9d02ee532765a0a.png, doc/sphinx/.build/html/_im ages/math/c2ded198ceb12ab7c4b85de9f763e16a0631edce.png, doc/sphinx/. build/html/_images/math/c384df5165193c1645f53b30f6d4cf65e488a663.png , doc/sphinx/.build/html/_images/math/dae9fdcd4039896c429769826c4759 2370611d6b.png, doc/sphinx/.build/html/_images/math/e0d2bf360290fd61 d1c1557e763f2622363b3d35.png, doc/sphinx/.build/html/_images/math/e2 a662e2209e4d2ee234a3ae367d5337a31409e0.png, doc/sphinx/.build/html/_ images/math/f37bba504894945c07a32f5496d74299a37aa51c.png, doc/sphinx /.build/html/_images/math/f5047d1e0cbb50ec208923a22cd517c55100fa7b.p ng, doc/sphinx/.build/html/_images/math/f8c03b65830c6482e37c5bbc31d3 b19ee646ee06.png, doc/sphinx/.build/html/_images/math/fc2cd2267d4502 2f197cdb870c1642c539c08dde.png, doc/sphinx/.build/html/_images/overview.png, doc/sphinx/.build/html/_images/peak.png, doc/sphinx/.build/html/_images/resultstable.png, doc/sphinx/.build/html/_images/selectfinaltemplate.png, doc/sphinx/.build/html/_images/selection.png, doc/sphinx/.build/html/_images/stimfit_dos.png, doc/sphinx/.build/html/_images/test.png, doc/sphinx/.build/html/_images/traceselection.png, doc/sphinx/.build/html/_images/viewscalebars.png, doc/sphinx/.build/html/_images/zoom.png, doc/sphinx/.build/html/_images/zoompopup.png, doc/sphinx/.build/html/_sources/contents.txt, doc/sphinx/.build/html/_sources/howto/amplitudes.txt, doc/sphinx/.build/html/_sources/howto/apcounting.txt, doc/sphinx/.build/html/_sources/howto/cuttingtraces.txt, doc/sphinx/.build/html/_sources/howto/index.txt, doc/sphinx/.build/html/_sources/howto/introclass.txt, doc/sphinx/.build/html/_sources/howto/latencies.txt, doc/sphinx/.build/html/_sources/howto/resistances.txt, doc/sphinx/.build/html/_sources/howto/runningmean.txt, doc/sphinx/.build/html/_sources/links/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/building.txt, doc/sphinx/.build/html/_sources/linux_install_guide/downloads.txt, doc/sphinx/.build/html/_sources/linux_install_guide/index.txt, doc/sphinx/.build/html/_sources/linux_install_guide/requirement.txt, doc/sphinx/.build/html/_sources/linux_install_guide/updates.txt, doc/sphinx/.build/html/_sources/manual/bibliography.txt, doc/sphinx/.build/html/_sources/manual/event_extraction.txt, doc/sphinx/.build/html/_sources/manual/getting_started.txt, doc/sphinx/.build/html/_sources/manual/index.txt, doc/sphinx/.build/html/_sources/manual/latency_measurements.txt, doc/sphinx/.build/html/_sources/manual/preface.txt, doc/sphinx/.build/html/_sources/manual/python.txt, doc/sphinx/.build/html/_sources/osx_install_guide/building.txt, doc/sphinx/.build/html/_sources/osx_install_guide/index.txt, doc/sphinx/.build/html/_sources/osx_install_guide/prerequisites.txt, doc/sphinx/.build/html/_sources/references/index.txt, doc/sphinx/.build/html/_sources/stf_reference/stf.txt, doc/sphinx/.build/html/_static/basic.css, doc/sphinx/.build/html/_static/default.css, doc/sphinx/.build/html/_static/doctools.js, doc/sphinx/.build/html/_static/file.png, doc/sphinx/.build/html/_static/jquery.js, doc/sphinx/.build/html/_static/minus.png, doc/sphinx/.build/html/_static/plus.png, doc/sphinx/.build/html/_static/pygments.css, doc/sphinx/.build/html/_static/searchtools.js, doc/sphinx/.build/html/contents.html, doc/sphinx/.build/html/genindex.html, doc/sphinx/.build/html/howto/amplitudes.html, doc/sphinx/.build/html/howto/apcounting.html, doc/sphinx/.build/html/howto/cuttingtraces.html, doc/sphinx/.build/html/howto/index.html, doc/sphinx/.build/html/howto/introclass.html, doc/sphinx/.build/html/howto/latencies.html, doc/sphinx/.build/html/howto/resistances.html, doc/sphinx/.build/html/howto/runningmean.html, doc/sphinx/.build/html/index.html, doc/sphinx/.build/html/links/index.html, doc/sphinx/.build/html/linux_install_guide/building.html, doc/sphinx/.build/html/linux_install_guide/downloads.html, doc/sphinx/.build/html/linux_install_guide/index.html, doc/sphinx/.build/html/linux_install_guide/requirement.html, doc/sphinx/.build/html/linux_install_guide/updates.html, doc/sphinx/.build/html/manual/bibliography.html, doc/sphinx/.build/html/manual/event_extraction.html, doc/sphinx/.build/html/manual/getting_started.html, doc/sphinx/.build/html/manual/index.html, doc/sphinx/.build/html/manual/latency_measurements.html, doc/sphinx/.build/html/manual/preface.html, doc/sphinx/.build/html/manual/python.html, doc/sphinx/.build/html/modindex.html, doc/sphinx/.build/html/objects.inv, doc/sphinx/.build/html/osx_install_guide/building.html, doc/sphinx/.build/html/osx_install_guide/index.html, doc/sphinx/.build/html/osx_install_guide/prerequisites.html, doc/sphinx/.build/html/references/index.html, doc/sphinx/.build/html/search.html, doc/sphinx/.build/html/searchindex.js, doc/sphinx/.build/html/stf_reference/stf.html, doc/sphinx/.build/latex/APmodule.png, doc/sphinx/.build/latex/Stimfitdocumentation.pdf, doc/sphinx/.build/latex/Stimfitdocumentation.tex, doc/sphinx/.build/latex/Stimfitdocumentation.toc, doc/sphinx/.build/latex/average.png, doc/sphinx/.build/latex/bait_template.png, doc/sphinx/.build/latex/baseline.png, doc/sphinx/.build/latex/batchanalysis.png, doc/sphinx/.build/latex/channelselection.png, doc/sphinx/.build/latex/channelselectiondrop.png, doc/sphinx/.build/latex/cursorsettings.png, doc/sphinx/.build/latex/eventbutton.png, doc/sphinx/.build/latex/eventdetectionsettings.png, doc/sphinx/.build/latex/events.png, doc/sphinx/.build/latex/falsenegative.png, doc/sphinx/.build/latex/finaltemplate.png, doc/sphinx/.build/latex/fit.png, doc/sphinx/.build/latex/fitselection.png, doc/sphinx/.build/latex/fittowindow.png, doc/sphinx/.build/latex/fncychap.sty, doc/sphinx/.build/latex/foot.png, doc/sphinx/.build/latex/howto.cls, doc/sphinx/.build/latex/latency.png, doc/sphinx/.build/latex/latencytraces.png, doc/sphinx/.build/latex/manual.cls, doc/sphinx/.build/latex/overview.png, doc/sphinx/.build/latex/peak.png, doc/sphinx/.build/latex/python.ist, doc/sphinx/.build/latex/resultstable.png, doc/sphinx/.build/latex/selectfinaltemplate.png, doc/sphinx/.build/latex/selection.png, doc/sphinx/.build/latex/sphinx.sty, doc/sphinx/.build/latex/stimfit_dos.png, doc/sphinx/.build/latex/tabulary.sty, doc/sphinx/.build/latex/test.png, doc/sphinx/.build/latex/traceselection.png, doc/sphinx/.build/latex/viewscalebars.png, doc/sphinx/.build/latex/zoom.png, doc/sphinx/.build/latex/zoompopup.png: Added build html to the repository, necessary to modify index.html [9e2bb11b9d6a] * doc/sphinx/references/index.rst, src/app/childframe.cpp, src/app/parentframe.cpp, src/stfswig/embedded_init.py: Added a new reference to the list of publications using Stimfit [da66ca0a594a] 2010-06-25 Christoph Schmidt-Hieber * Makefile.in, config.guess, config.sub, configure, install-sh, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in: Removed toolchain stuff [1808fcd00e05] 2010-06-13 Jose Guzman * src/stfswig/embedded_init.py: Small error in location of stf.measure() [45f53466ea68] * src/stfswig/embedded_init.py: First Version of Recording, Channel and Section stf class: TODO: hdf5 save compatibility [66407c42ed29] 2010-06-11 Jose Guzman * err: Remove compilation message [fb58b18f8333] * err, src/core/filelib/hekalib.cpp, src/stfswig/embedded_init.py: Name of file pointer in hekalib checked for coherence [4ef04ce74c17] * .hgignore: Removed files generated by autotools [678cd9b4ccc2] * .hgignore, Makefile.in, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in: Adding Makefile.in [697f1bc0a02e] * .hgignore, config.guess: Adding config.guess to repository [3e76ee9abbef] * .hgignore, config.sub: Adding config.sub [c1e11d5e0d97] * .hgignore, install-sh: Adding install-sh script to the repository [3ffef5216efc] * .hgignore, configure, src/stfswig/embedded_init.py: Adding configure [c455bdc7b0ac] 2010-06-06 Jose Guzman * doc/sphinx/linux_install_guide/building.rst, src/stfswig/embedded_init.py, src/stfswig/embedded_ipython.py: getter/setter operator for dt in new Recording class [3954048ead56] 2010-05-21 Christoph Schmidt-Hieber * Makefile.am, src/app/app.cpp, src/app/app.h, src/core/core.cpp, src/core/filelib/hekalib.cpp, src/core/filelib/hekalib.h, src/core/stimdefs.h: Started heka file reading framework. [dde749297172] 2010-04-23 Christoph Schmidt-Hieber * src/stfswig/hdf5tools.py: Show recording object directly without opening a file. [53fb29b19f82] * src/stfswig/hdf5tools.py: Corrected bug in hdf5tools. [86718b08a1d8] 2010-04-22 Jose Guzman * doc/sphinx/linux_install_guide/building.rst: Small changes Linux installing guide [5290abb7d5da] 2010-04-21 Jose Guzman * doc/sphinx/linux_install_guide/building.rst: Correction in the documentation about building Stimfit under GNU/Linux [cf0fb4bf6e2e] 2010-04-18 Jose Guzman * doc/sphinx/linux_install_guide/building.rst, src/app/unopt.cpp, stfconf.h: Linux installation documents autogen.sh script [5e8278018674] 2010-04-11 Christoph Schmidt-Hieber * m4/ltoptions.m4, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/view.cpp: Fixed a bug in OS X: Opened files were not correctly detected from the Python shell. [5e7b468c22ff] 2010-03-30 Christoph Schmidt-Hieber * doc/sphinx/osx_install_guide/building.rst: Added autogen.sh instruction for os x. [ce0786aeebcb] 2010-03-26 Christoph Schmidt-Hieber * src/app/app.cpp, src/app/parentframe.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axglib.cpp: AxographX reading enhancements. [27b05478c8b2] 2010-03-25 Christoph Schmidt-Hieber * bootstrap, prepare: Some more cleaning of outdated files. [3a15fd920e9b] * .hgignore, Makefile.in, aclocal.m4, config.guess, config.sub, configure, depcomp, install-sh, ltmain.sh, m4/libtool.m4, m4/ltsugar.m4, m4/ltversion.m4, missing, src/Makefile.in, src/app/Makefile.in, src/app/dlgs/Makefile.in, src/core/Makefile.in, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/levmar/Makefile.in, src/stfswig/Makefile.in, stfconf.h.in: Removed autotools output from hg. [e6bc37d8f140] * Makefile.in, src/core/filelib/axg/byteswap.cpp, src/core/filelib/axglib.cpp: Axograph X 64bit bug fixes. [f97870577016] * Makefile.in, aclocal.m4, config.guess, config.sub, configure, depcomp, install-sh, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, missing, src/Makefile.in, src/app/Makefile.in, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/stfswig/Makefile.in, stfconf.h.in: Avoid preprocessor warning. [a3922646c1dc] * Makefile.am, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axg/byteswap.cpp, src/core/filelib/axg/byteswap.h, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.h, src/core/filelib/axg/longdef.h, src/core/filelib/axg/stringUtils.h: Started 64bit support for Axograph X files. [b0b5110c9191] 2010-03-25 Jose Guzman * doc/sphinx/osx_install_guide/index.rst, doc/sphinx/references/index.rst, stfconf.h: Added links to Stimfit homepage in the OS documentation [a019fe64f2e6] 2010-03-23 Christoph Schmidt-Hieber * doc/sphinx/.templates/index.html, doc/sphinx/osx_install_guide/prerequisites.rst: Integrated OS X building instructions into documentation. [3e6a064cd334] * Makefile.in, aclocal.m4, config.guess, config.sub, configure, depcomp, doc/sphinx/contents.rst, doc/sphinx/osx_install_guide/building.rst, doc/sphinx/osx_install_guide/index.rst, doc/sphinx/osx_install_guide/prerequisites.rst, install-sh, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, missing, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in, stfconf.h.in: Added os x building instructions to documentation. [28c0eb1a0bbb] 2010-03-22 Christoph Schmidt-Hieber * configure.in, src/core/filelib/axg/AxoGraph_ReadWrite.h: Added endianness checks. [3cd987695a06] * Makefile.in, aclocal.m4, autogen.sh, config.guess, config.sub, configure, depcomp, install-sh, ltmain.sh, m4/libtool.m4, m4/ltversion.m4, missing, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in: Added autogen.sh to replace outdated bootstrap script. [57d85b174ddb] 2010-03-21 Christoph Schmidt-Hieber * src/app/app.cpp: Keyboard input bug fix. [be428000dd47] 2010-03-20 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, macosx/scripts/configure.10.4.in, replace.sh, src/Makefile.in, src/app/Makefile.in, src/app/app.cpp, src/app/parentframe.cpp, src/core/filelib/abflib.cpp, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/abfutil.cpp, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAtfFio32/fileio.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileReadCache.cpp, src/core/filelib/axon/Common/axodefn.h, src/core/filelib/axon/Common/unix.h, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/SimpleStringCache.cpp, src/core/filelib/cfs.c, src/core/filelib/cfs.h, src/core/filelib/machine.h, src/core/levmar/misc.h, src/stfswig/Makefile.in, stfconf.h.in, update_version.sh: Replaced LINUX preprocessor directives. [19e95a879590] * src/app/graph.cpp: Corrected preprocessor directive. [6a037a3f282c] * macosx/scripts/conf_mac_release.10.4.sh, macosx/scripts/configure.10.4.in, src/app/app.cpp, src/app/app.h, src/app/childframe.cpp, src/app/doc.cpp, src/app/graph.cpp: Bug fixes for OS X: - Keyboard shortcuts - File type recognition [253b548de8d8] 2010-03-18 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, configure.in, googlecode_upload.py, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, src/Makefile.in, src/app/Makefile.in, src/core/filelib/hdf5lib.cpp, src/stfswig/Makefile.in, stfconf.h.in: Some more hdf5 1.8 compatibility fixes. [6c6ea961f99e] 2010-03-09 Jose Guzman * 1: dummy file removed [f91659d4f5b9] * 1, doc/sphinx/howto/latencies.rst, nsis/installer.nsi, src/app/app.cpp, src/stfswig/AP.py, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/spells.py: Spike class is included in spells and AP.py was removed [233d2bd01bd8] 2010-03-04 Christoph Schmidt-Hieber * src/app/app.cpp, src/core/core.cpp, src/core/core.h: Buffer overflow in spectral density function. [8bc467036c54] * src/core/filelib/hdf5lib.cpp: Re-established hdf5 1.6 compatibility. [8b6c8f41692d] 2010-03-01 Christoph Schmidt-Hieber * src/core/filelib/hdf5lib.cpp: Make compatible to hdf5 1.8 [d6b753b8fc97] 2010-02-23 Christoph Schmidt-Hieber * doc/sphinx/references/index.rst, src/core/filelib/axon/Common/unix.cpp, src/stfswig/embedded_ipython.py: Avoid buffer overflow in abf library. Allow for longer abf path names (1024 chars). [b792e15eb5b7] 2010-02-22 Jose Guzman * warnings: remove dummy file [3d4eeded09e6] * .hgignore, src/stfswig/AP.py, src/stfswig/embedded_ipython.py, src/stfswig/stf_init.py, warnings: Added an emtpy stf_init to the repository [92ee2931428b] 2010-02-16 Jose Guzman * src/app/unopt.cpp: Remove debug block for menu-based import module function. [a133eb4017c5] * src/app/unopt.cpp: typo in the python version message [3b12680b7d30] * src/app/app.cpp, src/app/app.h, src/app/parentframe.cpp, src/app/parentframe.h, src/app/unopt.cpp, src/stfswig/embedded_init.py, src/stfswig/embedded_ipython.py: Menu-based "import module" function works with IPython [d998c66f5f64] 2010-02-10 Christoph Schmidt-Hieber * config.h.in, src/app/unopt.cpp: Compatibility with wx 2.9.1 [defb4d63c803] 2010-02-07 Christoph Schmidt-Hieber * macosx/scripts/change_deps_release.sh, macosx/stimfit.dmgCanvas: Mac OS packaging fixes. [406664dac845] 2010-02-07 Jose Guzman * .hgignore, doc/sphinx/manual/event_extraction.rst, src/app/app.cpp, src/app/app.h, stfconf.h: Preprocessor directive changed to avoid error when Stimfit is compiled without Python shell. [bcd6c1ad450d] 2010-01-31 Christoph Schmidt-Hieber * nsis/installer.nsi, stimfit_VS03/stimfit_VS03.suo: Windows build update. [b9e10e58e80d] * src/core/filelib/axg/AxoGraph_ReadWrite.cpp: Axograph-related bug fixes. [372329c639fe] 2010-01-10 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, doc/sphinx/linux_install_guide/downloads.rst, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in, stfconf.h.in: Updated wxPython svn revision. [5cd838a8b2d5] 2009-12-31 Jose Guzman * src/stfswig/stf_init.py: removed test stf_init.py file from repository [f3b347d1dcc4] * nsis/installer.nsi, src/app/app.cpp, src/app/unopt.cpp, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/embedded_init.py, src/stfswig/embedded_ipython.py, src/stfswig/embedded_stf.py, src/stfswig/stf_init.py: Import Python module menu imports AND reloads the module. IPython loads numpy and stf in the current namespace (like PyCrust). [e54f199ead55] 2009-12-30 Jose Guzman * doc/sphinx/linux_install_guide/updates.rst: added link to the Stimfit google groups in Linux installation guide [84b181d5d4e7] * doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst: Minor changes in GNU/Linux installation instructions [8a34279be173] * src/stfswig/embedded_stf.py: removed wrong line in embedded_stf.py [d372268108c2] * doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/linux_install_guide/updates.rst, src/app/unopt.cpp, src/stfswig/embedded_stf.py, stfconf.h: Updated GNU/Linux installation guide [00756d254f36] 2009-12-26 Christoph Schmidt-Hieber * macosx/scripts/change_deps_release.sh, macosx/stimfit.dmgCanvas: Some more modifications to os x build scripts. [0bea08873815] * Makefile.in, aclocal.m4, config.guess, config.sub, configure, configure.in, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, macosx/scripts/build-wxpy.sh, macosx/scripts/change_deps_debug.sh, macosx/scripts/conf-wx.sh, macosx/scripts/conf_mac_debug.sh, macosx/scripts/conf_mac_release.sh, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in, stfconf.h.in: Updated os x build scripts. [7fb6f975cbf2] 2009-12-24 Christoph Schmidt-Hieber * aclocal.m4, configure, configure.in, ltmain.sh, m4/libtool.m4, m4/ltversion.m4, macosx/scripts/build-wxpy.sh, macosx/scripts/change_deps_release.sh, macosx/scripts/conf-wx.sh, macosx/scripts/conf_mac_release.sh, macosx/scripts/install-wxpy.sh, macosx/stimfit.dmgCanvas, src/stfswig/Makefile.in: Updated OS X build scripts. [171a6ec2745b] 2009-12-15 cs * doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/requirement.rst: Updated build instructions. [b354761a1386] 2009-12-11 Jose Guzman * doc/sphinx/howto/introclass.rst, doc/sphinx/links/index.rst: docu modified, neurohost link removed [4da05b304ac1] 2009-11-30 Jose Guzman * src/stfswig/Makefile.am: Makefile.am modified to contain AP.py [c4b18de44fb8] 2009-11-29 Jose Guzman * doc/sphinx/howto/latencies.rst, src/stfswig/AP.py: small typos [a54b2e928d37] * doc/sphinx/howto/APmodule.png, doc/sphinx/howto/latencies.rst, nsis/installer.nsi, src/stfswig/AP.py, src/stfswig/Makefile.am, src/stfswig/Makefile.in: Calculate latencies in documentation (book of speels) and AP.py available to the user. [ee15b428f4e0] 2009-11-27 Jose Guzman * doc/sphinx/howto/introclass.rst: OOP with Stimfit added to documentation (Book of spells) [e01b41303bf6] 2009-11-24 Jose Guzman * doc/sphinx/howto/index.rst, doc/sphinx/howto/introclass.rst, doc/sphinx/howto/latencies.rst, src/app/app.cpp, src/app/parentframe.cpp: Toggle Python shell works again! [9a0457470bf1] 2009-11-21 Christoph Schmidt-Hieber * src/stfswig/stf.py.orig, src/stfswig/stfswig.cxx.orig, src/stfswig/stfswig_wrap.cxx.orig: Removed merge files. [be42dda1c722] * .hgignore, src/stfswig/stf.py, src/stfswig/stf.py.orig, src/stfswig/stfswig.cxx, src/stfswig/stfswig.cxx.orig, src/stfswig/stfswig_wrap.cxx, src/stfswig/stfswig_wrap.cxx.orig: Cleaned hg. [04a50ea98d39] * doc/sphinx/references/index.rst, src/app/doc.cpp, src/app/funclib/funclib.cpp, src/core/channel.cpp, src/core/filelib/abflib.cpp, src/core/recording.cpp: Linux build fixes. Extensive code changes during the last 3 commits, please test!! [a317a0c06216] 2009-11-15 Jose Guzman * src/stfswig/stfswig.i: corrected unappropiate docstring in get_threshold_value()!! [21fb577a7dbe] * src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx: Corrected syntax error in get_threshold_value() [3cca37e02f8b] * doc/sphinx/stf_reference/stf.rst, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i: get_threshold() was splitted into get_threshold_value() and get_threshold_time(). Thanks to Christoph Schmidt-Hieber for the suggestion. New python functions added to the stf module documentation [a8788c74ee0f] 2009-11-21 Christoph Schmidt-Hieber * src/app/dlgs/fitseldlg.cpp, src/app/dlgs/fitseldlg.h, src/app/doc.cpp, src/app/funclib/funclib.cpp, src/app/funclib/funclib.h, src/app/graph.cpp, src/app/graph.h, src/app/plugins/plugins.cpp, src/app/plugins/plugins.h, src/app/usrdlg/usrdlg.cpp, src/app/usrdlg/usrdlg.h, src/core/channel.cpp, src/core/core.cpp, src/core/core.h, src/core/filelib/abflib.cpp, src/core/filelib/asciilib.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axglib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/cfslib.cpp, src/core/filelib/hdf5lib.cpp, src/core/filelib/igorlib.cpp, src/core/fitlib.cpp, src/core/fitlib.h, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp, src/core/section.h, src/core/spline.h, src/core/stimdefs.h, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig_wrap.cxx, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: Use vectors instead of valarrays. Memory aloocation fixes for abf2. [29d8d710beb2] 2009-11-15 Jose Guzman * Doxyfile, src/app/app.h, src/core/recording.cpp, src/core/recording.h, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx: stf.set_slope(), stf.get_threshold() and stf.set_channel() added to the python commands. [f2f6f4d5d784] 2009-10-21 Christoph Schmidt-Hieber * src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/app/unopt.cpp: Moved "Import Python module" entry to file menu. [b8570afb0296] 2009-10-21 Jose Guzman * src/app/unopt.cpp: Removed comented duplicated function [1e3180dd1844] * .hgignore, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/doc.h, src/app/unopt.cpp: OnPythonImport() method in wxStfApp, updated .hgignore [148d1f7be141] 2009-10-21 Christoph Schmidt-Hieber * .libs/stimfit, Makefile, libtool, src/Makefile, src/app/Makefile, src/app/libstimfit.a, src/stfswig/.libs/libstf.a, src/stfswig/.libs/libstf.la, src/stfswig/.libs/libstf.lai, src/stfswig/.libs/libstf.so, src/stfswig/.libs/libstf.so.0, src/stfswig/.libs/libstf.so.0.0.0, src/stfswig/Makefile, src/stfswig/libstf.la, stamp-h1, stimfit, stimfit.plist: Removed build files. [c2a42ac01b76] 2009-10-21 Jose Guzman * stfconf.h: added menu based import python (Analysis -> Import module...) [fbcda683e1c9] * .libs/stimfit, Makefile, libtool, src/Makefile, src/app/Makefile, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/doc.h, src/app/libstimfit.a, src/app/unopt.cpp, src/stfswig/.libs/libstf.a, src/stfswig/.libs/libstf.la, src/stfswig/.libs/libstf.lai, src/stfswig/.libs/libstf.so, src/stfswig/.libs/libstf.so.0, src/stfswig/.libs/libstf.so.0.0.0, src/stfswig/Makefile, src/stfswig/libstf.la, stamp-h1, stfconf.h, stimfit, stimfit.plist: Added menu based import Python module (Analysis->Import module...) [f34975479f96] 2009-10-21 Christoph Schmidt-Hieber * configure, configure.in, doc/sphinx/conf.py, doc/website/Home.html, ltmain.sh, m4/libtool.m4, nsis/installer.nsi, stfconf.h, stimfit.plist.in: Bumped version number to 0.9.3. [46a7f4c8eebb] * macosx/stimfit-0.9.3rc1.dmg: Removed disk image. [9bfaec64aec7] * .hgignore, macosx/dmg.ai, macosx/dmg.jpg, macosx/package.pmdoc /01stimfit-contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/package.pmdoc/index.xml, macosx/stimfit-0.9.3rc1.dmg, macosx/stimfit.dmgCanvas: Mac OS X build fixes. [27fb0b769e51] 2009-10-14 Christoph Schmidt-Hieber * aclocal.m4, configure, src/app/printout.cpp: Corrected some printing issues under wxgtk. [9a87c17e3123] 2009-10-13 Christoph Schmidt-Hieber * Makefile.am, Makefile.in, macosx/package.pmdoc/01stimfit- contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/scripts/change_deps_release.sh, macosx/scripts/conf_mac_debug.sh, macosx/scripts/conf_mac_release.sh, src/app/app.cpp, src/app/app.h, src/app/graph.cpp, src/app/printout.cpp, stimfit.plist.in: Some more OS X build and bug fixes. [fe0f31f8e2a9] * stimfit.plist.in, update_version.sh: Bumped remaining version numbers. [d21ae07a6d9c] * Makefile.am, Makefile.in, macosx/package.pmdoc/01stimfit- contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/package.pmdoc/index.xml, src/app/childframe.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/printout.cpp, src/core/filelib/axon/Common/unix.h, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/ProtocolStructs.h, src/core/filelib/axon2/SimpleStringCache.cpp, update_version.sh: Mac build fixes. [7fb489e9bbcb] 2009-10-11 Christoph Schmidt-Hieber * Makefile.am, Makefile.in, aclocal.m4, configure, configure.in, ltmain.sh, m4/libtool.m4, src/app/doc.cpp, src/core/filelib/axon/AxAbfFio32/AxAbffio32.h, src/core/filelib/axon/AxAbfFio32/abfheadr.h, src/core/filelib/axon2/ProtocolReaderABF2.hpp, src/core/filelib/axon2/ProtocolStructs.h, src/core/filelib/axon2/SimpleStringCache.cpp, src/core/filelib/axon2/abf2headr.h, src/core/filelib/axon2/abffio.h: OS X 10.6 build fixes. [066ee26da66c] 2009-10-09 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, configure.in, doc/sphinx/conf.py, doc/website/Home.html, ltmain.sh, m4/libtool.m4, macosx/package.pmdoc/index.xml, nsis/installer.nsi, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in, stfconf.h, stfconf.h.in, update_website.sh: Bumped version number to 0.9.2 [fe5f1b4a1989] 2009-10-08 Christoph Schmidt-Hieber * nsis/installer.nsi, stimfit_VS03/stimfit_VS03.suo: Updated nsis script. [957e214e365e] 2009-10-07 Christoph Schmidt-Hieber * src/app/doc.cpp, src/app/doc.h, src/app/parentframe.cpp, src/app/view.cpp: Update selection button status when opening a new file or switching between windows. [d829e5e3ed63] 2009-10-06 Christoph Schmidt-Hieber * nsis/installer.nsi, src/app/doc.cpp, stfconf.h, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: Windows build fixes. [e82462e6948b] * src/app/doc.cpp, src/app/doc.h, src/app/graph.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/app/view.cpp: Use toggle button for selection. Ask before erasing all events. [49c5416bbd03] 2009-10-05 Christoph Schmidt-Hieber * Makefile, libtool, src/Makefile, src/app/Makefile, src/app/libstimfit.a, src/stfswig/Makefile, stamp-h1, stfconf.h, stimfit, stimfit.plist: Removed build files from source repository. [9f4e8b3126c2] * Makefile, libtool, src/Makefile, src/app/Makefile, src/app/libstimfit.a, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.hpp, src/core/filelib/axon/AxAbfFio32/oldheadr.h, src/core/filelib/axon2/ProtocolReaderABF2.hpp, src/core/filelib/axon2/abf2headr.h, src/stfswig/Makefile, stfconf.h, stimfit, stimfit.plist: Added support for abf files on 64 bit systems. Thanks to Jakub Nowacki (libaxon.sourceforge.net) for instructions. [0eb87a0f3b54] * src/core/filelib/axon/AxAbfFio32/abfheadr.h, src/core/filelib/axon2/ProtocolStructs.h: Started 64bit support for abf library. [7f9cf6eb0287] 2009-09-30 Christoph Schmidt-Hieber * doc/sphinx/manual/event_extraction.rst: Documentation typo fixes. [1763bf61a509] * src/core/filelib/abflib.cpp, src/core/filelib/axon2/ProtocolReaderABF2.cpp: Some more bug fixes for reading gapfree abf2 files. [8001838cfe30] 2009-09-29 Christoph Schmidt-Hieber * nsis/installer.nsi, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx: Windows build fixes. [c061ddeb71a6] * src/core/filelib/abflib.cpp: Removed some bugs when reading abf2 files, including wrong sample interval in files with more than one channel. [5fd72a2fd771] 2009-09-28 Christoph Schmidt-Hieber * commit.bat, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/ProtocolReaderABF2.hpp, src/core/filelib/axon2/abf2headr.cpp, src/core/filelib/axon2/abf2headr.h: Added support for abf2 gap free files. Thanks to Fiona Müllner for providing samples. [af71feca76fe] 2009-09-23 Christoph Schmidt-Hieber * .cproject, .project, .pydevproject, .settings/org.eclipse.ltk.core.refactoring.prefs, .texlipse, nsis/installer.nsi, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/console_widget.py, src/stfswig/embedded_ipython.py, src/stfswig/wx_frontend.py: Removed a number of unused files from repository. Using the system's own wx frontend for IPython rather than a local copy. [87fa0f41c4a3] 2009-09-22 Christoph Schmidt-Hieber * configure, configure.in, nsis/installer.nsi, src/app/parentframe.cpp, src/app/unopt.cpp, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/console_widget.py, src/stfswig/embedded_ipython.py, src/stfswig/stfswig_wrap.cxx, src/stfswig/wx_frontend.py: Added framework for IPython shell. Use "--enable-ipython" to test. [1e903b5c06a9] 2009-09-15 Christoph Schmidt-Hieber * doc/sphinx/linux_install_guide/downloads.rst, doc/website/Home.html: Updated web site and build instructions. [28d063815487] 2009-09-14 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axglib.cpp, src/stfswig/Makefile.in, src/stfswig/stf.py, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx, stfconf.h.in: Cleaned up my file merging mess. Minor changes to swig interface file. [52fb10b31dd9] 2009-09-14 Jose Guzman * src/stfswig/embedded_stf.py: avoid redundant "import stf" in embedded_stf.py [5e5212826dbc] * Makefile.am, src/Makefile.am: Added missing Makefile.am's [efc1ee8d2c90] * Doxyfile, Makefile.am, nsis/installer.nsi, src/Makefile.am, src/app/parentframe.cpp, src/stfswig/Makefile.am, src/stfswig/embedded_stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i: importing from embedded_stf to load the Python shell [7b9d419ea4a9] 2009-09-09 Christoph Schmidt-Hieber * src/core/filelib/axg/fileUtils.cpp.orig, src/core/filelib/axon/AxAbfFio32/abffiles.cpp.orig: Removed merge files. [8cfd41e578fc] * Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/app/app.cpp, src/app/unopt.cpp, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.cpp.orig, src/core/filelib/axg/fileUtils.h, src/core/filelib/axglib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp.orig, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/Common/axodefn.h, src/core/filelib/axon/Common/unix.h, src/core/filelib/cfs.c, src/core/filelib/cfs.h, src/core/filelib/machine.h, src/stfswig/Makefile.in, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx, stfconf.h.in: Added "Check for updates" to child menu. Inactivated initial update check on Mac. [551dfa4e7614] 2009-09-08 Christoph Schmidt-Hieber * src/core/filelib/abflib.cpp, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axglib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/abfutil.cpp, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAtfFio32/fileio.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileReadCache.cpp, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/SimpleStringCache.cpp: Changed __WXMAC__ to __APPLE__ in non-wx code. [cde840b79beb] 2009-09-06 Jose Guzman * src/stfswig/spells.py: spells changed to satisfy python PEP8 code standards [a2fdd299ef50] 2009-08-25 Jose Guzman * doc/sphinx/stf_reference/stf.rst, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i: stf.get_peak_mean() returns 0 upon failure [c456f2d24924] 2009-08-24 Jose Guzman * src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i: added stf.get_peak_mean() to python commands. [c1e3330d57e0] 2009-08-19 Christoph Schmidt-Hieber * configure, doc/website/Home.html, update_version.sh: Updated web site. [112bc0871e33] * stimfit_VS03/stimfit_VS03.suo: Updated Windows version. [775a420ed159] * configure.in, doc/sphinx/conf.py, macosx/package.pmdoc/index.xml, nsis/installer.nsi, stfconf.h, update_version.sh: Added a script to bump version numbers across relevant files. Bumped version number to 0.9.1. [2aa76c7c8a44] * src/app/app.cpp, src/app/app.h: Corrected a bug in the command line parser. Thanks to Stefanie Heigele for reporting. [0e72c5a30f53] 2009-08-13 Christoph Schmidt-Hieber * doc/website/Home.html, doc/website/Home_files/Home.css: Added google groups subscription widget to homepage. [2582f6607c20] 2009-08-12 Christoph Schmidt-Hieber * doc/website/Home.html: Updated web site with link to Google group. [402b0ad25365] 2009-08-08 Jose Guzman * doc/sphinx/manual/preface.rst: swap figures in manual preface (show the new GUI first) [538d664c3245] 2009-08-05 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/app/graph.cpp, src/app/graph.h, src/stfswig/Makefile.am, src/stfswig/Makefile.in, stfconf.h.in: Corrected an accidental pass-by-copy - should have been pass-by- reference. [b59ac2b1e154] 2009-08-02 Christoph Schmidt-Hieber * doc/website/Home.html, doc/website/Home_files/Home.css, doc/website/Home_files/Home.js, doc/website/Home_files/HomeIE.css, doc/website/Home_files/HomeMoz.css, doc/website/Home_files/shapeimage_1.jpg, doc/website/Home_files/shapeimage_2.jpg, doc/website/Home_files/shapeimage_3.png, doc/website/Home_files/shapeimage_4.png, doc/website/Media/transparent.gif, doc/website/Scripts/Widgets/Navbar/navbar.js, doc/website/Scripts/Widgets/SharedResources/None.gif, doc/website/Scripts/Widgets/SharedResources/WidgetCommon.js, doc/website/Scripts/iWebImage.js, doc/website/Scripts/iWebSite.js, doc/website/feed.xml, doc/website/index.html: Added web site. [e74cc00404f8] * src/core/filelib/axon/Common/unix.cpp, src/core/filelib/axon/Common/unix.h, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo: Windows build fixes. [7c16bd99ddaf] * macosx/package.pmdoc/01stimfit-contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/package.pmdoc/index.xml: PackageMaker updated. [1dabe9cdc2bc] * src/app/parentframe.cpp: Corrected an error in version comparison function. [bf2ae59ecf8f] * Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/unix.h, src/stfswig/Makefile.in, stfconf.h.in: Mac build fixes. [3ac4cf9c78be] 2009-08-01 Christoph Schmidt-Hieber * configure, configure.in, src/app/app.cpp, src/app/app.h, src/app/parentframe.cpp, src/app/parentframe.h, src/app/unopt.cpp: Check for updates during program start. [2af579b77d1f] 2009-07-30 Christoph Schmidt-Hieber * doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst: Added some links to documentation. [dde513696425] 2009-07-29 Christoph Schmidt-Hieber * Makefile.am, Makefile.in, aclocal.m4, configure, configure.in, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAtfFio32/fileio.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/unix.c, src/core/filelib/axon/Common/unix.cpp, src/core/filelib/axon/Common/unix.h, src/stfswig/Makefile.in: Linux build fixes. [d498798a48cf] * include/fftw3.h, libs/libfftw3-3.lib, nsis/installer.nsi, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.h, src/core/filelib/axon/AxAbfFio32/abfutil.cpp, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.hpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileIO.hpp, src/core/filelib/axon/Common/axodebug.h, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/ProtocolReaderABF2.hpp, src/core/filelib/axon2/SimpleStringCache.cpp, src/core/filelib/hdf5lib.cpp, src/core/levmar/liblevmar.a, stimfit_VS03/libfftw3-3.dll, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit/stimfit.vcproj.CHRISTOPH.cs.user, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj.CHRISTOPH.cs.user: Corrected some more potential buffer overflows in abf library. [caf90731a3d0] 2009-07-29 Jose Guzman * doc/sphinx/howto/amplitudes.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/manual/images/stimfit_dos.png.png, doc/sphinx/manual/images/test.png, doc/sphinx/manual/preface.rst: figure added to documentation [dcc5beec83eb] * doc/sphinx/howto/apcounting.rst: Corrected documentation for count_events() in spells.py [e5387ab884df] 2009-07-28 Christoph Schmidt-Hieber * src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.h: Fixed potential buffer overlow in abf library. Thanks to Liyi Li for reporting. [fb4118cb9aad] 2009-07-28 Jose Guzman * .hgignore, doc/sphinx/howto/apcounting.rst: Edited documentation [44173f4097ed] * doc/sphinx/howto/.resistances.rst.swp, doc/sphinx/howto/apcounting.rst, src/stfswig/spells.py: Prevention of 'Index out of bounds' when points are above/bellow the "crossing point" in spells.py [e12ba52d3098] 2009-07-28 Christoph Schmidt-Hieber * nsis/installer.nsi, src/app/app.cpp, src/app/childframe.cpp, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx, stfconf.h, stimfit_VS03/stfswig/stfswig.vcproj.CHRISTOPH.cs.user, stimfit_VS03/stimfit/stimfit.vcproj.CHRISTOPH.cs.user, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj.CHRISTOPH.cs.user: Bump version to 0.9.0, adapt installer to wxWidgets 2.9.0 [d4d317a79aed] 2009-07-27 Christoph Schmidt-Hieber * src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h: Removed some potential buffer overflows in axon library. [108516a8d011] 2009-07-09 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, configure, configure.in, ltmain.sh, m4/libtool.m4, src/Makefile.in, src/app/Makefile.in, src/core/Makefile.in, src/core/levmar/Makefile.in, src/stfswig/Makefile.in: Force atlas/lapack use on darwin. [577bfb7da332] 2009-07-07 Jose Guzman * .hgignore: added swp files to .hgignore [831d70cfd7cb] * doc/sphinx/howto/.resistances.rst.swp, doc/sphinx/howto/amplitudes.rst, doc/sphinx/howto/apcounting.rst, doc/sphinx/howto/cuttingtraces.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/linux_install_guide/updates.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst: Stimfit now links to homepage in documentation [106f45873f8c] 2009-07-07 Christoph Schmidt-Hieber * doc/sphinx/manual/event_extraction.rst, src/stfswig/Makefile.in: Corrected totally messed up equation. [cfd96bfb54f9] 2009-07-06 Jose Guzman * nsis/installer.nsi, src/stfswig/Makefile.am: spells.py added to windows installer [37bb9e2493f6] * doc/sphinx/howto/index.rst: Edited documentation [f9459d2c9c5d] * spells.py added, docu changed accordingly [7ed7d1455826] * doc/sphinx/howto/amplitudes.rst, doc/sphinx/howto/apcounting.rst, doc/sphinx/howto/cuttingtraces.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, src/stfswig/spells.py: spells.py added and documentation changed accordingly [35f86c8f160d] 2009-07-06 Christoph Schmidt-Hieber * doc/sphinx/links/index.rst: Typo correction of my last commit. [efb935b7d9a7] 2009-07-06 Jose Guzman * Makefile, libtool, src/Makefile, src/app/Makefile, src/stfswig/Makefile, stfconf.h, stimfit.plist: removed files from my compilation (sorry!) [0ef16be9e573] * Makefile, doc/sphinx/.templates/index.html, libtool, src/Makefile, src/app/Makefile, src/stfswig/Makefile, stfconf.h, stimfit.plist: broken link corrected [3621510ffae4] 2009-07-05 Christoph Schmidt-Hieber * doc/sphinx/.templates/index.html, doc/sphinx/contents.rst, doc/sphinx/links/index.rst, doc/sphinx/references/index.rst, src/stfswig/hdf5tools.py: Added links and references to documentation. [023f7d262067] 2009-06-30 Jose Guzman * doc/sphinx/howto/apcounting.rst: corrected some typos [17a3ac8ec4ff] * doc/sphinx/1: dummy file deleted [73616b17b655] * doc/sphinx/1, doc/sphinx/howto/apcounting.rst: Edited documentation [3598fe48130a] 2009-06-28 Christoph Schmidt-Hieber * doc/sphinx/howto/apcounting.rst: Edited documentation. [851b0e7e1f95] 2009-06-26 Jose Guzman * doc/sphinx/howto/amplitudes.rst, doc/sphinx/howto/apcounting.rst, doc/sphinx/howto/cuttingtraces.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/logo/logo4.png, doc/sphinx/logo/stf_logo.png, doc/sphinx/logo/stf_logo3.png, doc/sphinx/logo/stflogo.png, doc/sphinx/logo/stflogo.svg, doc/sphinx/logo/stflogo2.png, doc/sphinx/logo/stflogo2.svg, doc/sphinx/logo/stflogo_temp.svg, doc/sphinx/manual/bibliography.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/index.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst: event detection added to book of spells and bibliography to manual [1e602ba5f671] 2009-06-16 Christoph Schmidt-Hieber * src/app/graph.cpp: Minor bug fix in line drawing code. [43cae4cb64d1] * src/app/childframe.cpp, src/app/doc.cpp: Fixed a batch analysis bug. Thanks to Imre Vida for reporting. [2f90e5a773e9] 2009-06-11 Christoph Schmidt-Hieber * src/app/app.h, src/app/childframe.cpp, src/app/childframe.h, src/app/doc.cpp, src/app/graph.cpp, src/app/graph.h, src/app/parentframe.cpp: -Checkbox to hide second channel -Break scale bars at 5*10^n -Minor code updates [d5a15f068398] 2009-06-10 Christoph Schmidt-Hieber * aclocal.m4, configure, configure.in, src/app/graph.cpp, src/app/graph.h: Linux printing tweaks. [13dd3859e470] * doc/sphinx/howto/cuttingtraces.rst: More documentation editing. [414730677d74] * doc/sphinx/howto/cuttingtraces.rst: More documentation editing [730aa851d1af] * doc/sphinx/howto/cuttingtraces.rst: Edited documentation. [482408aa5b4a] * nsis/installer.nsi, src/app/parentframe.cpp, src/app/unopt.cpp, stfconf.h, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo: rc5 Windows installer fixes [175ec111b45a] 2009-06-09 Jose Guzman * doc/sphinx/howto/cuttingtraces.rst: minor changes to documentation in /howto/cuttingtraces.rst [655b500eb364] * doc/sphinx/howto/cuttingtraces.rst: changed math.ceil() to round() in documentation /howto/cuttingtraces.rst [724c9507e0b5] 2009-06-09 Christoph Schmidt-Hieber * aclocal.m4, configure, doc/sphinx/howto/cuttingtraces.rst, macosx/package.pmdoc/01stimfit-contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/package.pmdoc/index.xml: Edited documentation. [0e12385b9c67] 2009-06-09 Jose Guzman * doc/sphinx/howto/cuttingtraces.rst, doc/sphinx/howto/index.rst, doc/sphinx/manual/python.rst: Syntax highlight added to Manual (chapter 2) and cutting traces added to the book of SCHpells [1b0f12f2d848] 2009-06-08 Christoph Schmidt-Hieber * .hgignore, stimfit_VS03/stimfit_VS03.ncb: Removed large VS browse information file from repository. [89b4f3cbde99] * .hgignore, nsis/installer.nsi, src/app/app.cpp, src/app/app.h, src/app/childframe.cpp, src/app/doc.cpp, src/app/dummy.cpp, src/app/graph.cpp, src/app/view.cpp, src/core/filelib/axon2/ProtocolReaderABF2.cpp, stfconf.h, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj.cs-PC.cs.user, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit/stimfit.vcproj.cs-PC.cs.user, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj.cs-PC.cs.user: Various Windows bug and build fixes. [ee8e10a5bb9b] 2009-06-05 Christoph Schmidt-Hieber * 0.9.0-rc3 for Windows [1dc3c718d118] * nsis/installer.nsi, stfconf.h, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.suo: 0.9.0-rc3 for Windows [b7d635d5b344] * configure, configure.in, src/app/app.cpp, src/app/app.h, src/app/copygrid.cpp, src/app/copygrid.h, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h, src/app/doc.cpp, src/app/graph.cpp, src/core/recording.cpp, src/core/recording.h: Threshold can now be used as a reference for AP kinetics (rather than baseline). Some modifications to batch analysis according to Imre Vida's suggestions. [5fc5bfbd3ac3] 2009-06-04 Christoph Schmidt-Hieber * Windows-specific bug fixes. Thanks to Liyi Li for reporting. [4d8fe5325e93] * nsis/installer.nsi, src/app/graph.cpp, stfconf.h, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.suo: Windows-specific bug fixes. Thanks to Liyi Li for reporting. [1239527ad71c] * ChangeLog, configure, src/app/app.cpp, src/app/childframe.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/doc.cpp, src/app/graph.cpp, src/core/core.cpp, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp: Bug fixes regarding integral drawing and batch analysis. Thanks to Imre Vida and Liyi Li for reporting. Implemented slope threshold crossing as a new value. [9df96ab5f3c2] 2009-06-04 cs * configure.in, libs/hdf5.lib, libs/hdf5_cpp.lib, libs/hdf5_hl.lib, libs/stimfit.lib, libs/stimfitd.lib, libs/szlib.lib, libs/wxbase29ud.lib, libs/wxbase29ud_net.lib, libs/wxbase29ud_xml.lib, libs/wxexpatd.lib, libs/wxjpegd.lib, libs/wxmsw29ud_adv.lib, libs/wxmsw29ud_aui.lib, libs/wxmsw29ud_core.lib, libs/wxmsw29ud_gl.lib, libs/wxmsw29ud_html.lib, libs/wxmsw29ud_media.lib, libs/wxmsw29ud_richtext.lib, libs/wxmsw29ud_stc.lib, libs/wxmsw29ud_xrc.lib, libs/wxpngd.lib, libs/wxregexud.lib, libs/wxscintillad.lib, libs/wxtiffd.lib, libs/wxzlibd.lib, nsis/installer.nsi, src/app/app.cpp, src/app/parentframe.cpp, src/core/filelib/abflib.cpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileIO.hpp, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx, stfconf.h, stimfit_VS03/UpgradeLog.XML, stimfit_VS03/_UpgradeReport_Files/UpgradeReport.css, stimfit_VS03/_UpgradeReport_Files/UpgradeReport.xslt, stimfit_VS03/_UpgradeReport_Files/UpgradeReport_Minus.gif, stimfit_VS03/_UpgradeReport_Files/UpgradeReport_Plus.gif, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stfswig/stfswig.vcproj.cs-PC.cs.user, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit/stimfit.vcproj.cs-PC.cs.user, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj.cs-PC.cs.user: Windows version build fixes. [433f5ca7a6bc] 2009-06-01 Christoph Schmidt-Hieber * doc/sphinx/.templates/layout.html, doc/sphinx/linux_install_guide/index.rst: Documentation update. [cb2bd2f07844] * Makefile.am, Makefile.in, aclocal.m4, configure, ltmain.sh, m4/libtool.m4: Added missing file to dist. [c9677381d9b3] * src/app/.#app.cpp: Removed stub file. [7919e44bf2a6] * macosx/scripts/conf_mac_debug.sh, macosx/scripts/conf_mac_release.sh: Corrected typo in mac configure script. [e2613fe93fb3] * Makefile.am, Makefile.in: Added os x build scripts to dist. [386e3e4ccb8b] * macosx/scripts/change_deps_release.sh, macosx/scripts/conf_mac_debug.sh, macosx/scripts/conf_mac_release.sh: Edited OS X build scripts. [da468d92542f] * configure, configure.in, src/app/.#app.cpp, src/app/graph.cpp, src/app/parentframe.cpp, src/app/unopt.cpp, src/stfswig/numpy.i, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx: Force importing packaged numpy on Mac OS X. [aadf2c3ba889] 2009-05-28 Jose Guzman * doc/sphinx/howto/amplitudes.rst: code commented in amplitudes. [e5964af4b409] 2009-05-28 Christoph Schmidt-Hieber * ]: Removed file stub. [ae9fdb4c3282] 2009-05-27 Christoph Schmidt-Hieber * doc/sphinx/howto/amplitudes.rst: Edited sphinx documentation. [94f7d252649b] 2009-05-27 Jose Guzman * doc/sphinx/howto/amplitudes.rst: syntax error stf.get_selected_indices() [6134bcd294f2] * doc/sphinx/howto/amplitudes.rst: Minor corrections in Calculations on selected traces [e35b1014fcc3] * doc/sphinx/.templates/index.html, doc/sphinx/.templates/layout.html, doc/sphinx/howto/amplitudes.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/images/fit2.png: Added calculations on selected traces to the book of spells [5943ccab1eca] 2009-05-25 Christoph Schmidt-Hieber * doc/sphinx/.templates/index.html, doc/sphinx/contents.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/linux_install_guide/updates.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/index.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst, doc/sphinx/stf_reference/stf.rst, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx, update_website.sh: Made all new_window* Python functions consistently return a boolean. Corrected some errors in documentation. [a575de3a831a] * doc/sphinx/.templates/index.html, update_website.sh: Corrected link in sphinx documentation. [db84412a9cd0] * src/core/filelib/abflib.cpp: Removed debug message. [5c4c860dec49] 2009-05-25 Jose Guzman * doc/sphinx/.templates/layout.html, doc/sphinx/stf_logo.png: Homepage link redirects to stimfit.org and not to home documentation [61d2a5ca02b5] 2009-05-25 Christoph Schmidt-Hieber * ], doc/sphinx/.templates/index.html, doc/sphinx/.templates/layout.html, doc/sphinx/conf.py: Removed portal-related stuff (logo, download links) from sphinx documentation for the time being. [05ff74143ea0] 2009-05-24 Christoph Schmidt-Hieber * src/app/app.cpp, src/app/parentframe.cpp: Make help menu item point to online documentation. [166f930170f0] 2009-05-23 Christoph Schmidt-Hieber * aclocal.m4, configure, ltmain.sh, m4/libtool.m4, src/app/dlgs/smalldlgs.cpp, src/app/parentframe.cpp, src/core/filelib/abflib.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp: Reverted toolbar bitmap changes because they look like sh.. on Mac. Fixed Mac build errors. [5d409198d5c8] * src/core/stimdefs.h: Minimal changes to stimdefs.h [3ddb52adbac7] * src/app/parentframe.cpp: Use some more stock items for toolbar buttons. [418b2e452d69] * src/app/app.cpp, src/app/parentframe.cpp, src/app/parentframe.h, src/core/filelib/abflib.cpp: Started Help documentation framework. Removed wrongly positioned macro guard. [d235062e5577] * src/core/.#stimdefs.h: Removed weird file. [fdbeaa3bc6a2] * commit.sh, src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h, src/app/doc.cpp, src/core/.#stimdefs.h: Corrected some bugs in batch analysis functions. Thanks to Imre Vida for reporting. [dada6fa1c822] * src/app/app.cpp, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/graph.cpp, src/core/core.cpp, src/core/filelib/atflib.cpp, src/core/filelib/hdf5lib.cpp, src/core/filelib/igorlib.cpp, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/stimdefs.h, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx: Set baseline to user-defined base value. X units can now be defined by the user (not hard-coded to "ms" any more). [82bc6b71bf6e] 2009-05-22 Christoph Schmidt-Hieber * Makefile.am, Makefile.in, src/core/filelib/abflib.cpp, src/core/filelib/abflib.h, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/csynch.hpp, src/core/filelib/axon/AxAbfFio32/filedesc.hpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileIO.hpp, src/core/filelib/axon/Common/unix.h, src/core/filelib/axon2/ProtocolReaderABF2.cpp, src/core/filelib/axon2/ProtocolReaderABF2.hpp, src/core/filelib/axon2/ProtocolStructs.h, src/core/filelib/axon2/SimpleStringCache.cpp, src/core/filelib/axon2/SimpleStringCache.hpp, src/core/filelib/axon2/abf2headr.cpp, src/core/filelib/axon2/abf2headr.h, src/core/filelib/axon2/abffio.h: Added support for abf 2 / pClamp 10 files. [eec2e7398ccb] 2009-05-22 Jose Guzman * doc/sphinx/.templates/index.html: download links updated [e477ebaab81a] 2009-05-21 Christoph Schmidt-Hieber * doc/sphinx/conf.py, doc/sphinx/contents.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/linux_install_guide/updates.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/index.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst, doc/sphinx/stf_reference/stf.rst: Added authors to documentation. [9224239b56a7] * doc/sphinx/howto/runningmean.rst, googlecode_upload.py: Edited sphinx documentation. [b35167dd9f05] * doc/sphinx/howto/runningmean.rst: Edited sphinx documentation. [7dfa76d404a0] * doc/sphinx/howto/runningmean.rst: Edited sphinx documentation. [e8deb38ffb06] * doc/sphinx/howto/resistances.rst: Corrected some typos in sphinx documentation. [f48584036689] * doc/sphinx/howto/resistances.rst: Corrected some typos in sphinx documentation. [665ff47363d6] * doc/sphinx/howto/index.rst: Typo corrections in documentation. [1bf487ebc38f] 2009-05-21 Jose Guzman * doc/sphinx/howto/resistances.rst: resistances howto typos corrected [28aeb7eae3cc] * doc/sphinx/.templates/index.html, doc/sphinx/.templates/layout.html, doc/sphinx/conf.py, doc/sphinx/contents.rst, doc/sphinx/howto/index.rst, doc/sphinx/howto/resistances.rst, doc/sphinx/howto/runningmean.rst, doc/sphinx/logo/logo4.png, doc/sphinx/logo/stf_logo.png, doc/sphinx/logo/stf_logo3.png, doc/sphinx/logo/stflogo.png, doc/sphinx/logo/stflogo.svg, doc/sphinx/logo/stflogo2.png, doc/sphinx/logo/stflogo2.svg, doc/sphinx/logo/stflogo_temp.svg, doc/sphinx/manual/python.rst, doc/sphinx/stf_logo.png: howto python added to docu, stf logo [9e2d4d4eea2d] 2009-05-21 Christoph Schmidt-Hieber * commit.sh, doc/sphinx/conf.py: Added pull to commit script, added Jose to documentation author list. [e03cccf3d1e3] 2009-05-20 Jose Guzman * doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst: typo corrections in Linux installation manual [9f48fa09ae91] * doc/sphinx/manual/event_extraction.rst: minor style corrections in event_extraction [b69d68a279f7] 2009-05-19 Christoph Schmidt-Hieber * configure, configure.in: Smarter checking for lapack, especially if atlas is installed. [745a8cd09597] 2009-05-18 Christoph Schmidt-Hieber * doc/sphinx/manual/latency_measurements.rst: Minor documentation typo corrections. [7aeec8c14d91] 2009-05-18 Jose Guzman * doc/sphinx/.templates/index.html, doc/sphinx/contents.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/stf_reference/stf.rst: small corrections to the stf module documentation [db257728e948] 2009-05-17 Christoph Schmidt-Hieber * Doxyfile, src/app/app.h, src/app/childframe.h, src/app/dlgs/cursorsdlg.h, src/app/dlgs/fitseldlg.h, src/app/doc.h, src/app/parentframe.h, src/app/zoom.h, src/core/core.h, src/core/filelib/asciilib.h, src/core/fitlib.h, src/core/recording.h, src/core/section.h, src/core/stimdefs.h: Updated doxygen documentation [b80c3c291495] 2009-05-17 Jose Guzman * doc/sphinx/stf_reference/stf.rst, doc/sphinx/stf_reference/stf.txt: Release version and date added to the stf module [44820ef94aef] * doc/sphinx/contents.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/index.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst, doc/sphinx/stf_reference/stf.rst, doc/sphinx/stf_reference/stf.txt: Stf reference module added and cross link references to it in the manual [653bd4410859] 2009-05-16 Jose Guzman * doc/sphinx/linux_install_guide/downloads.rst: syntax of tar command in .doc/sphinx/linux_install_guide/downloads.rst updated [82781e1e4646] * doc/sphinx/.templates/.layout.html.swp, doc/sphinx/.templates/index.html, doc/sphinx/.templates/layout.html, doc/sphinx/conf.py, doc/sphinx/linux_install_guide/.updates.rst.swp: small changes in the html template [8ab0e284c56b] * doc/sphinx/.templates/.layout.html.swp, doc/sphinx/.templates/layout.html, doc/sphinx/.templates/layout_old.html, doc/sphinx/TODO, doc/sphinx/conf.py, doc/sphinx/contents.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst: html layout modified: TOC, search, source and navitation buttons added [d5fd5703a343] * commit_jose.sh, doc/sphinx/.templates/indexold.html, doc/sphinx/.templates/indexsage.html, doc/sphinx/linux_install_guide/.updates.rst.swp, doc/sphinx/linux_install_guide/building.rst, doc/sphinx/linux_install_guide/downloads.rst, doc/sphinx/linux_install_guide/index.rst, doc/sphinx/linux_install_guide/requirement.rst, doc/sphinx/linux_install_guide/updates.rst, doc/sphinx/manual/python.rst, update.sh: linux installation guide added to documentation and small corrections [3563499da997] 2009-05-15 Christoph Schmidt-Hieber * .hgignore, Doxyfile: Updated Doxyfile. [5dae2ec2def8] * doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/python.rst: Corrected some typos in documentation [63169e9de390] 2009-05-15 Jose Guzman * doc/sphinx/.templates/index.html, doc/sphinx/.templates/indexold.html, doc/sphinx/.templates/indexsage.html, doc/sphinx/.templates/layout.html: Minor changes to figures, ./doc/sphinx/.templates folder added necessary to build the html version [d0fdf2f49c43] 2009-05-14 Jose Guzman * .hgignore, doc/sphinx/Makefile, doc/sphinx/TODO, doc/sphinx/conf.py, doc/sphinx/contents.rst, doc/sphinx/manual/event_extraction.rst, doc/sphinx/manual/getting_started.rst, doc/sphinx/manual/images/average.png, doc/sphinx/manual/images/bait_template.png, doc/sphinx/manual/images/baseline.png, doc/sphinx/manual/images/batchanalysis.png, doc/sphinx/manual/images/bla.png, doc/sphinx/manual/images/channelselection.png, doc/sphinx/manual/images/channelselectiondrop.png, doc/sphinx/manual/images/cursorsettings.png, doc/sphinx/manual/images/eventbutton.png, doc/sphinx/manual/images/eventdetectionsettings.png, doc/sphinx/manual/images/events.png, doc/sphinx/manual/images/falsenegative.png, doc/sphinx/manual/images/finaltemplate.png, doc/sphinx/manual/images/fit.png, doc/sphinx/manual/images/fitselection.png, doc/sphinx/manual/images/fittowindow.png, doc/sphinx/manual/images/foot.png, doc/sphinx/manual/images/latency.png, doc/sphinx/manual/images/latencytraces.png, doc/sphinx/manual/images/overview.png, doc/sphinx/manual/images/peak.png, doc/sphinx/manual/images/resultstable.png, doc/sphinx/manual/images/selectfinaltemplate.png, doc/sphinx/manual/images/selection.png, doc/sphinx/manual/images/stimfit_dos.png, doc/sphinx/manual/images/traceselection.png, doc/sphinx/manual/images/viewscalebars.png, doc/sphinx/manual/images/zoom.png, doc/sphinx/manual/images/zoompopup.png, doc/sphinx/manual/index.rst, doc/sphinx/manual/latency_measurements.rst, doc/sphinx/manual/preface.rst, doc/sphinx/manual/python.rst, doc/sphinx/source/conf.py, doc/sphinx/source/event_extraction.rst, doc/sphinx/source/getting_started.rst, doc/sphinx/source/images/average.png, doc/sphinx/source/images/bait_template.png, doc/sphinx/source/images/baseline.png, doc/sphinx/source/images/batchanalysis.png, doc/sphinx/source/images/bla.png, doc/sphinx/source/images/channelselection.png, doc/sphinx/source/images/channelselectiondrop.png, doc/sphinx/source/images/cursorsettings.png, doc/sphinx/source/images/eventbutton.png, doc/sphinx/source/images/eventdetectionsettings.png, doc/sphinx/source/images/events.png, doc/sphinx/source/images/falsenegative.png, doc/sphinx/source/images/finaltemplate.png, doc/sphinx/source/images/fit.png, doc/sphinx/source/images/fitselection.png, doc/sphinx/source/images/fittowindow.png, doc/sphinx/source/images/foot.png, doc/sphinx/source/images/latency.png, doc/sphinx/source/images/latencytraces.png, doc/sphinx/source/images/overview.png, doc/sphinx/source/images/peak.png, doc/sphinx/source/images/resultstable.png, doc/sphinx/source/images/selectfinaltemplate.png, doc/sphinx/source/images/selection.png, doc/sphinx/source/images/stimfit_dos.png, doc/sphinx/source/images/traceselection.png, doc/sphinx/source/images/viewscalebars.png, doc/sphinx/source/images/zoom.png, doc/sphinx/source/images/zoompopup.png, doc/sphinx/source/index.rst, doc/sphinx/source/latency_measurements.rst, doc/sphinx/source/preface.rst, doc/sphinx/source/python.rst: First version of the html documentation tested with sphinx 0.6 [8a5a03e7b9fd] 2009-05-05 Christoph Schmidt-Hieber * nsis/stimfit-0.8.14-full.exe, nsis/stimfit-0.8.14-update.exe: Removed Windows installers from repository. [34fea718057d] * commit_jose.sh: Added commit_jose.sh. [0c6d4078b75d] 2009-05-04 Christoph Schmidt-Hieber * .DS_Store, commit.sh, commit_mac.sh, update.sh, update_mac.sh: Edited commit/update scripts. [7a64c328f888] * commit_mac.sh: Edited commit script. [56b93788b662] * commit_mac.sh, update_mac.sh: Edited update/commit scripts. [c6d3245a8b55] * commit_mac.sh: Updated commit script. [d187ed4c5caa] * commit_mac.sh: Updated commit script. [9b960ba2d244] * commit_mac.sh: Updated commit script. [e907ee5f3da4] * commit_mac.sh: Updated commit script. [10bf6070726c] * commit_mac.sh, update_mac.sh: Changed hg scripts to point to google code. [af1c4475f71d] 2009-04-28 Christoph Schmidt-Hieber * macosx/app.r: Added app.r to repository [19b2b3b7b115] * stimfit.plist.in: Added stimfit.plist.in [54f9a5aa4101] 2009-04-27 Christoph Schmidt-Hieber * src/app/dlgs/smalldlgs.cpp: *corrected a bug in the amplitude slider of the filter settings dialog [dbf43f5ead42] 2009-04-23 Christoph Schmidt-Hieber * commit.sh, commit_mac.sh, update_mac.sh: Added hg commit and update scripts for mac. [cf4bf61ccae4] 2009-04-22 Christoph Schmidt-Hieber * .DS_Store, .cproject, .hgignore, .project, .pydevproject, .settings/org.eclipse.ltk.core.refactoring.prefs, .texlipse, AUTHORS, COPYING, ChangeLog, Doxyfile, INSTALL, Makefile.am, Makefile.in, NEWS, O1.txt, README, SyncToyDirectoryId.txt, TODO, aclocal.m4, acsite.m4, bootstrap, commit.bat, commit.sh, config.guess, config.status, config.sub, configure, configure.in, depcomp, doc/chapter1.pdf, doc/chapter2.pdf, doc/chapter3.pdf, doc/chapter4.pdf, doc/events_content.tex, doc/gui_tutorial_content.tex, doc/img/.Screenshot-Event detection settings.png, doc/img/GUI.jpg, doc/img/GUI_thumb.jpg, doc/img /Screenshot-Cursor settings.png, doc/img/Screenshot-Event detection settings-1.png, doc/img/Screenshot-Event detection settings-2.png, doc/img/Screenshot-Event detection settings.png, doc/img/Screenshot- Non-linear regression.png, doc/img/Screenshot-Stimfit-1.png, doc/img /Screenshot-Stimfit-10.png, doc/img/Screenshot-Stimfit-11.png, doc/img/Screenshot-Stimfit-12.png, doc/img/Screenshot- Stimfit-13.png, doc/img/Screenshot-Stimfit-14.png, doc/img /Screenshot-Stimfit-2.png, doc/img/Screenshot-Stimfit-3.png, doc/img /Screenshot-Stimfit-4.png, doc/img/Screenshot-Stimfit-5.png, doc/img /Screenshot-Stimfit-6.png, doc/img/Screenshot-Stimfit-7.png, doc/img /Screenshot-Stimfit-8.png, doc/img/Screenshot-Stimfit-9.png, doc/img /Screenshot-Stimfit.png, doc/img/Screenshot-Windows XP (20080408-0823) [Running] - VirtualBox OSE.png, doc/img/average.eps, doc/img/average.png, doc/img/bait_template.eps, doc/img/bait_template.png, doc/img/baseline.eps, doc/img/baseline.jpg, doc/img/batchanalysis.eps, doc/img/batchanalysis.png, doc/img/channelselection.eps, doc/img/channelselection.png, doc/img/channelselectiondrop.eps, doc/img/channelselectiondrop.png, doc/img/cursorsettings.eps, doc/img/cursorsettings.png, doc/img/event_dialog.eps, doc/img/eventbutton.eps, doc/img/eventbutton.png, doc/img/events.eps, doc/img/events.png, doc/img/falsenegative.eps, doc/img/falsenegative.png, doc/img/finaltemplate.eps, doc/img/finaltemplate.png, doc/img/fit.eps, doc/img/fit.png, doc/img/fitselection.eps, doc/img/fitselection.png, doc/img/fittowindow.eps, doc/img/fittowindow.png, doc/img/foot.pdf, doc/img/foot.ps, doc/img/foot.svg, doc/img/foot.tex, doc/img/latency.eps, doc/img/latency.png, doc/img/latencytraces.eps, doc/img/latencytraces.png, doc/img/overview.eps, doc/img/overview.jpg, doc/img/peak, doc/img/peak.eps, doc/img/peak.jpg, doc/img/resultstable.eps, doc/img/resultstable.png, doc/img/screenshot.png, doc/img/selectfinal.eps, doc/img/selection.eps, doc/img/selection.png, doc/img/siva.png, doc/img/stimfit_dos.eps, doc/img/stimfit_dos.png, doc/img/stimfit_small.bmp, doc/img/traceselection.eps, doc/img/traceselection.png, doc/img/viewscalebars.eps, doc/img/viewscalebars.png, doc/img/zoom.eps, doc/img/zoom.png, doc/img/zoompopup-0.png, doc/img/zoompopup-1.png, doc/img/zoompopup-10.png, doc/img/zoompopup-11.png, doc/img/zoompopup-12.png, doc/img/zoompopup-13.png, doc/img/zoompopup-14.png, doc/img/zoompopup-15.png, doc/img/zoompopup-16.png, doc/img/zoompopup-17.png, doc/img/zoompopup-18.png, doc/img/zoompopup-2.png, doc/img/zoompopup-3.png, doc/img/zoompopup-4.png, doc/img/zoompopup-5.png, doc/img/zoompopup-6.png, doc/img/zoompopup-7.png, doc/img/zoompopup-8.png, doc/img/zoompopup-9.png, doc/img/zoompopup.eps, doc/img/zoompopup.png, doc/jneurosci.bst, doc/jneurosci.sty, doc/latency_content.tex, doc/preface.tex, doc/py_tutorial_content.tex, doc/pydoc/stf.html, doc/quick, doc/shortcut.pdf, doc/shortcuts_content.tex, doc/sphinx/Makefile, doc/sphinx/source/conf.py, doc/sphinx/source/event_extraction.rst, doc/sphinx/source/getting_started.rst, doc/sphinx/source/images/average.png, doc/sphinx/source/images/bait_template.png, doc/sphinx/source/images/baseline.png, doc/sphinx/source/images/batchanalysis.png, doc/sphinx/source/images/bla.png, doc/sphinx/source/images/channelselection.png, doc/sphinx/source/images/channelselectiondrop.png, doc/sphinx/source/images/cursorsettings.png, doc/sphinx/source/images/eventbutton.png, doc/sphinx/source/images/eventdetectionsettings.png, doc/sphinx/source/images/events.png, doc/sphinx/source/images/falsenegative.png, doc/sphinx/source/images/finaltemplate.png, doc/sphinx/source/images/fit.png, doc/sphinx/source/images/fitselection.png, doc/sphinx/source/images/fittowindow.png, doc/sphinx/source/images/foot.png, doc/sphinx/source/images/latency.png, doc/sphinx/source/images/latencytraces.png, doc/sphinx/source/images/overview.png, doc/sphinx/source/images/peak.png, doc/sphinx/source/images/resultstable.png, doc/sphinx/source/images/selectfinaltemplate.png, doc/sphinx/source/images/selection.png, doc/sphinx/source/images/stimfit_dos.png, doc/sphinx/source/images/traceselection.png, doc/sphinx/source/images/viewscalebars.png, doc/sphinx/source/images/zoom.png, doc/sphinx/source/images/zoompopup.png, doc/sphinx/source/index.rst, doc/sphinx/source/latency_measurements.rst, doc/sphinx/source/preface.rst, doc/sphinx/source/python.rst, doc/stf.html, doc/stf_book.pdf, doc/stf_book.ps, doc/stf_book.tex, doc/stf_book.toc, gpl-2.0.txt, include/fftw3.h, install-sh, libs/BLAS.lib, libs/BLASd.lib, libs/clapack.lib, libs/clapackd.lib, libs/hdf5.lib, libs/hdf5_cpp.lib, libs/hdf5_hl.lib, libs/libf2c.lib, libs/libf2cd.lib, libs/libfftw3-3.lib, libs/stimfit.lib, libs/stimfitd.lib, libs/szlib.lib, libs/wxbase29ud.lib, libs/wxbase29ud_net.lib, libs/wxbase29ud_xml.lib, libs/wxexpatd.lib, libs/wxjpegd.lib, libs/wxmsw29ud_adv.lib, libs/wxmsw29ud_aui.lib, libs/wxmsw29ud_core.lib, libs/wxmsw29ud_gl.lib, libs/wxmsw29ud_html.lib, libs/wxmsw29ud_media.lib, libs/wxmsw29ud_richtext.lib, libs/wxmsw29ud_stc.lib, libs/wxmsw29ud_xrc.lib, libs/wxpngd.lib, libs/wxregexud.lib, libs/wxscintillad.lib, libs/wxtiffd.lib, libs/wxzlibd.lib, libtool, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, macosx/.DS_Store, macosx/package.pmdoc/01stimfit-contents.xml, macosx/package.pmdoc/01stimfit.xml, macosx/package.pmdoc/index.xml, macosx/scripts/.DS_Store, macosx/scripts/change_deps_debug.sh, macosx/scripts/change_deps_release.sh, macosx/scripts/clean_receipts.sh, macosx/scripts/conf_mac_debug.sh, macosx/scripts/conf_mac_release.sh, macosx/scripts/ln_stf.sh, macosx/scripts/testpyver.sh, macosx/wxmac.icns, missing, nsis/example.nsi, nsis/installer.nsi, nsis/stimfit-0.8.14-full.exe, nsis/stimfit-0.8.14-update.exe, prepare, py-compile, resource.h, revision.m4, src/.DS_Store, src/Makefile.am, src/Makefile.in, src/app/Makefile.am, src/app/Makefile.in, src/app/app.cpp, src/app/app.h, src/app/childframe.cpp, src/app/childframe.h, src/app/copygrid.cpp, src/app/copygrid.h, src/app/dclatex.cpp, src/app/dlgs/Makefile.in, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/dlgs/eventdlg.cpp, src/app/dlgs/eventdlg.h, src/app/dlgs/fitseldlg.cpp, src/app/dlgs/fitseldlg.h, src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h, src/app/doc.cpp, src/app/doc.h, src/app/dummy.cpp, src/app/frame.cpp, src/app/frame.h, src/app/funclib/funclib.cpp, src/app/funclib/funclib.h, src/app/graph.cpp, src/app/graph.h, src/app/parentframe.cpp, src/app/parentframe.h, src/app/plugins/plugins.cpp, src/app/plugins/plugins.h, src/app/printout.cpp, src/app/printout.h, src/app/stfcheckbox.cpp, src/app/stfcheckbox.h, src/app/stfpython/stfpython.cpp, src/app/stfpython/stfpython.h, src/app/table.cpp, src/app/table.h, src/app/unopt.cpp, src/app/usrdlg/usrdlg.cpp, src/app/usrdlg/usrdlg.h, src/app/view.cpp, src/app/view.h, src/app/wx/dclatex.h, src/app/zoom.cpp, src/app/zoom.h, src/core/Makefile.am, src/core/channel.cpp, src/core/channel.h, src/core/core.cpp, src/core/core.h, src/core/filelib/Son.h, src/core/filelib/abflib.cpp, src/core/filelib/abflib.h, src/core/filelib/asciilib.cpp, src/core/filelib/asciilib.h, src/core/filelib/atflib.cpp, src/core/filelib/atflib.h, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axg/byteswap.cpp, src/core/filelib/axg/byteswap.h, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.h, src/core/filelib/axg/stringUtils.cpp, src/core/filelib/axg/stringUtils.h, src/core/filelib/axglib.cpp, src/core/filelib/axglib.h, src/core/filelib/axon/AxAbfFio32/AxAbffio32.h, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAbfFio32/abferror.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.h, src/core/filelib/axon/AxAbfFio32/abfhwave.cpp, src/core/filelib/axon/AxAbfFio32/abfoldnx.h, src/core/filelib/axon/AxAbfFio32/abfutil.cpp, src/core/filelib/axon/AxAbfFio32/abfutil.h, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAbfFio32/csynch.hpp, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.hpp, src/core/filelib/axon/AxAbfFio32/msbincvt.cpp, src/core/filelib/axon/AxAbfFio32/msbincvt.h, src/core/filelib/axon/AxAbfFio32/oldheadr.h, src/core/filelib/axon/AxAtfFio32/atfintl.h, src/core/filelib/axon/AxAtfFio32/atfutil.h, src/core/filelib/axon/AxAtfFio32/axatffio32.cpp, src/core/filelib/axon/AxAtfFio32/axatffio32.h, src/core/filelib/axon/AxAtfFio32/fileio.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/ArrayPtr.hpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileIO.hpp, src/core/filelib/axon/Common/FileReadCache.cpp, src/core/filelib/axon/Common/FileReadCache.hpp, src/core/filelib/axon/Common/adcdac.h, src/core/filelib/axon/Common/axodebug.h, src/core/filelib/axon/Common/axodefn.h, src/core/filelib/axon/Common/colors.h, src/core/filelib/axon/Common/resource.h, src/core/filelib/axon/Common/unix.c, src/core/filelib/axon/Common/unix.h, src/core/filelib/axon/Common/wincpp.hpp, src/core/filelib/cfs.c, src/core/filelib/cfs.h, src/core/filelib/cfslib.cpp, src/core/filelib/cfslib.h, src/core/filelib/hdf5lib.cpp, src/core/filelib/hdf5lib.h, src/core/filelib/igor/CrossPlatformFileIO.c, src/core/filelib/igor/CrossPlatformFileIO.h, src/core/filelib/igor/IgorBin.h, src/core/filelib/igor/WriteWave.c, src/core/filelib/igorlib.cpp, src/core/filelib/igorlib.h, src/core/filelib/machine.h, src/core/filelib/sonlib.cpp, src/core/filelib/sonlib.h, src/core/fitlib.cpp, src/core/fitlib.h, src/core/levmar/Axb.c, src/core/levmar/Axb_core.c, src/core/levmar/CMakeLists.txt, src/core/levmar/LICENSE, src/core/levmar/Makefile.am, src/core/levmar/Makefile.icc, src/core/levmar/Makefile.so, src/core/levmar/Makefile.vc, src/core/levmar/README.txt, src/core/levmar/liblevmar.a, src/core/levmar/lm.c, src/core/levmar/lm.h, src/core/levmar/lm_core.c, src/core/levmar/lmbc.c, src/core/levmar/lmbc_core.c, src/core/levmar/lmdemo.c, src/core/levmar/lmlec.c, src/core/levmar/lmlec_core.c, src/core/levmar/misc.c, src/core/levmar/misc.h, src/core/levmar/misc_core.c, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp, src/core/section.h, src/core/spline.h, src/core/stimdefs.h, src/icons/.DS_Store, src/icons/16-em-down.xpm, src/icons/16-em- open.xpm, src/icons/accept.xpm, src/icons/arrow_down.xpm, src/icons/arrow_left.xpm, src/icons/arrow_out.xpm, src/icons/arrow_right.xpm, src/icons/arrow_up.xpm, src/icons/bin.xpm, src/icons/camera.xpm, src/icons/camera_ps.xpm, src/icons/ch1.xpm, src/icons/ch2.xpm, src/icons/cursor.xpm, src/icons/event.xpm, src/icons/fit.xpm, src/icons/fit_lim.xpm, src/icons/latency_lim.xpm, src/icons/resultset_first.xpm, src/icons/resultset_last.xpm, src/icons/resultset_next.xpm, src/icons/resultset_previous.xpm, src/icons/sample.ico, src/icons/sum_new.xpm, src/icons/sum_new_aligned.xpm, src/icons/table.xpm, src/icons/wxmac.icns, src/icons/zoom.xpm, src/icons/zoom_in.xpm, src/icons/zoom_out.xpm, src/res/stimfit.aps, src/res/stimfit.rc, src/stfswig/Doxyfile, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/Vector.i, src/stfswig/Vector.py, src/stfswig/charlie.py, src/stfswig/doxyHeaderLatex, src/stfswig/hdf5tools.py, src/stfswig/helpers.cpp, src/stfswig/ivtools.py, src/stfswig/minidemo.py, src/stfswig/mintools.py, src/stfswig/natools.py, src/stfswig/numpy.i, src/stfswig/plottools.py, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx, stamp-h1, stfconf.h, stfconf.h.in, stimfit, stimfit_VS03/libfftw3-3.dll, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/release/BuildLog.htm, stimfit_VS03/stimfit_exe/release/stimfit.dll, stimfit_VS03/stimfit_exe/release/stimfit.exe, stimfit_VS03/stimfit_exe/release/stimfit.res, stimfit_VS03/stimfit_exe/release/vc70.idb, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj, update.sh: -Added MacOS X port and bugfixes -Added sphinx documentation, contributed by Jose Guzman -Various additions and bugfixes -Faster plotting without resolution loss [9f7eec9422a7] 2009-01-25 Christoph Schmidt-Hieber * config.guess, config.sub, doc/quick, doc/stf_book.pdf, doc/stf_book.ps, doc/stf_book.tex, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, prepare, src/app/Makefile.am, src/app/Makefile.in, src/app/frame.cpp: Some changes according to Jose Guzman's suggestions: Color of channel description text, custom Python initialization script. [a123df8431a6] 2008-12-15 Christoph Schmidt-Hieber * commit.sh: *Changed mode of commit.sh. [0e7276954054] * .cproject, .project, configure, configure.in, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/hdf5lib.cpp: Corrected a bug when reading channel names and units of Axograph files. [bdca8a7eb2ca] 2008-12-14 cs * nsis/installer.nsi, src/app/doc.cpp, src/core/filelib/hdf5lib.cpp, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/release/BuildLog.htm, stimfit_VS03/stimfit_exe/release/stimfit.dll, stimfit_VS03/stimfit_exe/release/stimfit.exe: Corrected some bugs in the hdf5 filter. [3217d20c6415] 2008-12-14 Christoph Schmidt-Hieber * ChangeLog: Edited ChangeLog for release 0.8.15. [50e17ffb609f] 2008-12-14 cs * libs/wxbase29ud.lib, libs/wxbase29ud_net.lib, libs/wxbase29ud_xml.lib, libs/wxexpatd.lib, libs/wxjpegd.lib, libs/wxmsw29ud_adv.lib, libs/wxmsw29ud_aui.lib, libs/wxmsw29ud_core.lib, libs/wxmsw29ud_gl.lib, libs/wxmsw29ud_html.lib, libs/wxmsw29ud_media.lib, libs/wxmsw29ud_richtext.lib, libs/wxmsw29ud_stc.lib, libs/wxmsw29ud_xrc.lib, libs/wxpngd.lib, libs/wxregexud.lib, libs/wxscintillad.lib, libs/wxtiffd.lib, libs/wxzlibd.lib, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/release/BuildLog.htm, stimfit_VS03/stimfit_exe/release/stimfit.dll, stimfit_VS03/stimfit_exe/release/stimfit.exe, stimfit_VS03/stimfit_exe/release/vc70.idb: updated Windows build [64d302325cb0] 2008-12-14 Christoph Schmidt-Hieber * src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.h, src/core/filelib/axglib.cpp: Use vectors in Axograph code to avoid memory leaks. [f961f1d20393] * commit.sh, config.guess, config.status, config.sub, configure, doc/img/stimfit_small.bmp, doc/jneurosci.bst, doc/jneurosci.sty, doc/quick, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, nsis/installer.nsi, prepare, resource.h, src/app/frame.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.h, src/core/filelib/axglib.cpp, src/core/levmar/Axb.c, src/core/levmar/Axb_core.c, src/core/levmar/lm.c, src/core/levmar/lm.h, src/core/levmar/lm_core.c, src/core/levmar/lmbc.c, src/core/levmar/lmbc_core.c, src/core/levmar/lmdemo.c, src/core/levmar/lmlec.c, src/core/levmar/lmlec_core.c, src/core/levmar/misc.c, src/core/levmar/misc.h, src/core/levmar/misc_core.c, src/icons/sample.ico, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj, update.sh: Fixed some memory leaks in Axograph code. Windows specific changes. [e2711f8fd517] 2008-12-13 Christoph Schmidt-Hieber * .cproject, .project, .settings/org.eclipse.ltk.core.refactoring.prefs, .texlipse, SyncToyDirectoryId.txt, configure, configure.in, libs/hdf5.lib, libs/hdf5_cpp.lib, libs/hdf5_hl.lib, libs/szlib.lib, libtool, nsis/installer.nsi, nsis/stimfit-0.8.14-update.exe, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/doc.h, src/app/frame.cpp, src/core/core.cpp, src/core/filelib/atflib.cpp, src/core/filelib/atflib.h, src/core/filelib/cfslib.cpp, src/core/filelib/cfslib.h, src/core/filelib/hdf5lib.cpp, src/core/filelib/hdf5lib.h, src/core/filelib/igorlib.cpp, src/core/filelib/igorlib.h, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx, stimfit, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/release/BuildLog.htm, stimfit_VS03/stimfit_exe/release/stimfit.dll, stimfit_VS03/stimfit_exe/release/stimfit.exe, stimfit_VS03/stimfit_exe/release/vc70.idb: Moved export menu entries to "Save as" dialog. Use hdf5 as default format for file saving. Correctly display the file history. Updated the Windows build for hdf5 and Axograph. [8295db1859ac] 2008-12-12 Christoph Schmidt-Hieber * commit.sh, update.sh: Changed file server locations for commit. [b1c72865f669] * Makefile.am, Makefile.in, doc/stf_book.pdf, doc/stf_book.ps, doc/stf_book.tex, doc/stf_book.toc, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/core/Makefile.am, src/core/core.cpp, src/core/filelib/abflib.cpp, src/core/filelib/abflib.h, src/core/filelib/asciilib.cpp, src/core/filelib/asciilib.h, src/core/filelib/atflib.cpp, src/core/filelib/atflib.h, src/core/filelib/axg/AxoGraph_ReadWrite.cpp, src/core/filelib/axg/AxoGraph_ReadWrite.h, src/core/filelib/axg/byteswap.cpp, src/core/filelib/axg/byteswap.h, src/core/filelib/axg/fileUtils.cpp, src/core/filelib/axg/fileUtils.h, src/core/filelib/axg/stringUtils.cpp, src/core/filelib/axg/stringUtils.h, src/core/filelib/axglib.cpp, src/core/filelib/axglib.h, src/core/filelib/cfslib.h, src/core/filelib/hdf5lib.cpp, src/core/filelib/hdf5lib.h, src/core/measlib.h, src/core/section.cpp, src/core/stimdefs.h, src/stfswig/hdf5tools.py, src/stfswig/ivtools.py, src/stfswig/natools.py, src/stfswig/stfswig.i: Added hdf5 file support. Added Axograph file support. [3100abb784ce] 2008-10-07 Christoph Schmidt-Hieber * .hgignore, Makefile.am, Makefile.in, aclocal.m4, config.guess, config.sub, configure, configure.in, doc/stf.html, ltmain.sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltsugar.m4, m4/ltversion.m4, m4/lt~obsolete.m4, src/Makefile.in, src/app/Makefile.in, src/app/app.cpp, src/app/app.h, src/app/doc.cpp, src/app/doc.h, src/app/frame.cpp, src/app/frame.h, src/core/channel.h, src/core/core.cpp, src/core/core.h, src/core/filelib/cfslib.cpp, src/core/filelib/cfslib.h, src/core/filelib/hdf5lib.cpp, src/core/filelib/hdf5lib.h, src/core/stimdefs.h, src/stfswig/Makefile.am, src/stfswig/Makefile.in, src/stfswig/hdf5tools.py, src/stfswig/ivtools.py, src/stfswig/natools.py, src/stfswig/numpy.i, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx, stfconf.h.in: Added hdf5 file format, accessible both from the main program as well as from Python. Requires PyTables for the Python toolbox (hdf5tools.py). Removed progress dialog when opening files from python. Added new python funtions: - get/set_recording_time/date/comment - get/set_xunits/yunits - get/set_trace/channel_name - get_size_recording - new_window_list now accepts nested list representing more than 1 channel. [e25b823adf46] 2008-10-01 Christoph Schmidt-Hieber * ChangeLog: Edited ChangeLog for 0.8.14 release. [af4d879171c7] * .hgignore: Removed installers from repository. [c127dfa236ef] 2008-09-30 cs * .hgignore: Removed installers from repository. [b3b9935ba1b1] * .hgignore, commit.bat, nsis/installer.nsi, nsis/stimfit-0.8.14-full.exe, nsis/stimfit-0.8.14-update.exe, src/app/app.h, src/stfswig/stf.py, src/stfswig/stfswig_wrap.cxx, stimfit_VS03/libfftw3-3.dll, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/release/BuildLog.htm, stimfit_VS03/stimfit_exe/release/stimfit.dll, stimfit_VS03/stimfit_exe/release/stimfit.exe, stimfit_VS03/stimfit_exe/release/stimfit.res, stimfit_VS03/stimfit_exe/release/vc70.idb: Windows build fixes. [3bd4d38bc320] 2008-09-30 Christoph Schmidt-Hieber * configure, configure.in, src/app/app.cpp, src/app/frame.cpp, src/app/frame.h: Correctly stored the visibility of the Python shell to the config/registry when closing the program. [31db7081b126] 2008-09-29 Christoph Schmidt-Hieber * Makefile.in, aclocal.m4, config.guess, config.sub, configure, ltmain.sh, prepare, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in, stfconf.h.in: Minor change to prepare script. [d85669ceab7d] * Makefile.in, aclocal.m4, config.guess, config.sub, configure, configure.in, ltmain.sh, prepare, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.am, src/stfswig/Makefile.in, stfconf.h.in: Applied some changes to Makefiles and configure.in. [588d2a861ab9] * .cproject, .hgignore, .project, src/app/frame.cpp, src/core/filelib/cfslib.cpp, src/stfswig/natools.py, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx: * Added get_recording_time() and get_recording_date() to Python interface. * Corrected behaviour of mouse mode buttons. [2e28c981164e] 2008-09-22 Christoph Schmidt-Hieber * configure, configure.in: Edited configure.in [fd5737cfd56a] * commit.sh, update.sh: Added update.sh, edited commit.sh [2d0f744659fd] * commit.sh: Edited commit.sh [fe2c1e380aeb] * Makefile.in, commit.sh, src/Makefile.in, src/app/Makefile.in, src/stfswig/Makefile.in: Added commit.sh [e2702af770c8] * aclocal.m4, config.guess, config.sub, configure, configure.in, ltmain.sh, prepare, stfconf.h.in: Modified configure and prepare scripts to work with multiple versions of libtoolize. [68a23bc1a7aa] * .hgignore, aclocal.m4, configure, ltmain.sh, stfconf.h.in: Edited ltmain.sh to work with newer versions of libtool. [2596175a334b] * .cproject, .hgignore, .project, .pydevproject, AUTHORS, COPYING, ChangeLog, Doxyfile, INSTALL, Makefile.am, NEWS, O1.txt, README, TODO, aclocal.m4, acsite.m4, config.guess, config.status, config.sub, configure, configure.in, depcomp, doc/chapter1.pdf, doc/chapter2.pdf, doc/chapter3.pdf, doc/chapter4.pdf, doc/events_content.tex, doc/gui_tutorial_content.tex, doc/img /.Screenshot-Event detection settings.png, doc/img/GUI.jpg, doc/img/GUI_thumb.jpg, doc/img/Screenshot-Cursor settings.png, doc/img/Screenshot-Event detection settings-1.png, doc/img /Screenshot-Event detection settings-2.png, doc/img/Screenshot-Event detection settings.png, doc/img/Screenshot-Non-linear regression.png, doc/img/Screenshot-Stimfit-1.png, doc/img /Screenshot-Stimfit-10.png, doc/img/Screenshot-Stimfit-11.png, doc/img/Screenshot-Stimfit-12.png, doc/img/Screenshot- Stimfit-13.png, doc/img/Screenshot-Stimfit-14.png, doc/img /Screenshot-Stimfit-2.png, doc/img/Screenshot-Stimfit-3.png, doc/img /Screenshot-Stimfit-4.png, doc/img/Screenshot-Stimfit-5.png, doc/img /Screenshot-Stimfit-6.png, doc/img/Screenshot-Stimfit-7.png, doc/img /Screenshot-Stimfit-8.png, doc/img/Screenshot-Stimfit-9.png, doc/img /Screenshot-Stimfit.png, doc/img/Screenshot-Windows XP (20080408-0823) [Running] - VirtualBox OSE.png, doc/img/average.eps, doc/img/average.png, doc/img/bait_template.eps, doc/img/bait_template.png, doc/img/baseline.eps, doc/img/baseline.jpg, doc/img/batchanalysis.eps, doc/img/batchanalysis.png, doc/img/channelselection.eps, doc/img/channelselection.png, doc/img/channelselectiondrop.eps, doc/img/channelselectiondrop.png, doc/img/cursorsettings.eps, doc/img/cursorsettings.png, doc/img/event_dialog.eps, doc/img/eventbutton.eps, doc/img/eventbutton.png, doc/img/events.eps, doc/img/events.png, doc/img/falsenegative.eps, doc/img/falsenegative.png, doc/img/finaltemplate.eps, doc/img/finaltemplate.png, doc/img/fit.eps, doc/img/fit.png, doc/img/fitselection.eps, doc/img/fitselection.png, doc/img/fittowindow.eps, doc/img/fittowindow.png, doc/img/foot.pdf, doc/img/foot.ps, doc/img/foot.svg, doc/img/foot.tex, doc/img/latency.eps, doc/img/latency.png, doc/img/latencytraces.eps, doc/img/latencytraces.png, doc/img/overview.eps, doc/img/overview.jpg, doc/img/peak, doc/img/peak.eps, doc/img/peak.jpg, doc/img/resultstable.eps, doc/img/resultstable.png, doc/img/screenshot.png, doc/img/selectfinal.eps, doc/img/selection.eps, doc/img/selection.png, doc/img/siva.png, doc/img/stimfit_dos.eps, doc/img/stimfit_dos.png, doc/img/stimfit_small.bmp, doc/img/traceselection.eps, doc/img/traceselection.png, doc/img/viewscalebars.eps, doc/img/viewscalebars.png, doc/img/zoom.eps, doc/img/zoom.png, doc/img/zoompopup-0.png, doc/img/zoompopup-1.png, doc/img/zoompopup-10.png, doc/img/zoompopup-11.png, doc/img/zoompopup-12.png, doc/img/zoompopup-13.png, doc/img/zoompopup-14.png, doc/img/zoompopup-15.png, doc/img/zoompopup-16.png, doc/img/zoompopup-17.png, doc/img/zoompopup-18.png, doc/img/zoompopup-2.png, doc/img/zoompopup-3.png, doc/img/zoompopup-4.png, doc/img/zoompopup-5.png, doc/img/zoompopup-6.png, doc/img/zoompopup-7.png, doc/img/zoompopup-8.png, doc/img/zoompopup-9.png, doc/img/zoompopup.eps, doc/img/zoompopup.png, doc/jneurosci.bst, doc/jneurosci.sty, doc/latency_content.tex, doc/preface.tex, doc/py_tutorial_content.tex, doc/pydoc/stf.html, doc/quick, doc/shortcut.pdf, doc/shortcuts_content.tex, doc/stf.html, doc/stf_book.pdf, doc/stf_book.ps, doc/stf_book.tex, doc/stf_book.toc, gpl-2.0.txt, include/fftw3.h, install-sh, libs/BLAS.lib, libs/BLASd.lib, libs/clapack.lib, libs/clapackd.lib, libs/libf2c.lib, libs/libf2cd.lib, libs/libfftw3-3.lib, libs/stimfit.lib, libs/stimfitd.lib, libtool, ltmain.sh, missing, nsis/example.nsi, nsis/installer.nsi, prepare, py-compile, resource.h, src/Makefile.am, src/app/Makefile.am, src/app/app.cpp, src/app/app.h, src/app/copygrid.cpp, src/app/copygrid.h, src/app/dclatex.cpp, src/app/dlgs/Makefile.in, src/app/dlgs/cursorsdlg.cpp, src/app/dlgs/cursorsdlg.h, src/app/dlgs/eventdlg.cpp, src/app/dlgs/eventdlg.h, src/app/dlgs/fitseldlg.cpp, src/app/dlgs/fitseldlg.h, src/app/dlgs/smalldlgs.cpp, src/app/dlgs/smalldlgs.h, src/app/doc.cpp, src/app/doc.h, src/app/dummy.cpp, src/app/frame.cpp, src/app/frame.h, src/app/funclib/funclib.cpp, src/app/funclib/funclib.h, src/app/graph.cpp, src/app/graph.h, src/app/plugins/plugins.cpp, src/app/plugins/plugins.h, src/app/printout.cpp, src/app/printout.h, src/app/stfcheckbox.cpp, src/app/stfcheckbox.h, src/app/stfpython/stfpython.cpp, src/app/stfpython/stfpython.h, src/app/table.cpp, src/app/table.h, src/app/unopt.cpp, src/app/usrdlg/usrdlg.cpp, src/app/usrdlg/usrdlg.h, src/app/view.cpp, src/app/view.h, src/app/wx/dclatex.h, src/app/zoom.cpp, src/app/zoom.h, src/core/Makefile.am, src/core/channel.cpp, src/core/channel.h, src/core/core.cpp, src/core/core.h, src/core/filelib/Son.h, src/core/filelib/abflib.cpp, src/core/filelib/abflib.h, src/core/filelib/asciilib.cpp, src/core/filelib/asciilib.h, src/core/filelib/atflib.cpp, src/core/filelib/atflib.h, src/core/filelib/axon/AxAbfFio32/AxAbffio32.h, src/core/filelib/axon/AxAbfFio32/Oldheadr.cpp, src/core/filelib/axon/AxAbfFio32/abferror.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.cpp, src/core/filelib/axon/AxAbfFio32/abffiles.h, src/core/filelib/axon/AxAbfFio32/abfheadr.cpp, src/core/filelib/axon/AxAbfFio32/abfheadr.h, src/core/filelib/axon/AxAbfFio32/abfhwave.cpp, src/core/filelib/axon/AxAbfFio32/abfoldnx.h, src/core/filelib/axon/AxAbfFio32/abfutil.cpp, src/core/filelib/axon/AxAbfFio32/abfutil.h, src/core/filelib/axon/AxAbfFio32/csynch.cpp, src/core/filelib/axon/AxAbfFio32/csynch.hpp, src/core/filelib/axon/AxAbfFio32/filedesc.cpp, src/core/filelib/axon/AxAbfFio32/filedesc.hpp, src/core/filelib/axon/AxAbfFio32/msbincvt.cpp, src/core/filelib/axon/AxAbfFio32/msbincvt.h, src/core/filelib/axon/AxAbfFio32/oldheadr.h, src/core/filelib/axon/AxAtfFio32/atfintl.h, src/core/filelib/axon/AxAtfFio32/atfutil.h, src/core/filelib/axon/AxAtfFio32/axatffio32.cpp, src/core/filelib/axon/AxAtfFio32/axatffio32.h, src/core/filelib/axon/AxAtfFio32/fileio.cpp, src/core/filelib/axon/AxAtfFio32/fileio2.cpp, src/core/filelib/axon/Common/ArrayPtr.hpp, src/core/filelib/axon/Common/FileIO.cpp, src/core/filelib/axon/Common/FileIO.hpp, src/core/filelib/axon/Common/FileReadCache.cpp, src/core/filelib/axon/Common/FileReadCache.hpp, src/core/filelib/axon/Common/adcdac.h, src/core/filelib/axon/Common/axodebug.h, src/core/filelib/axon/Common/axodefn.h, src/core/filelib/axon/Common/colors.h, src/core/filelib/axon/Common/resource.h, src/core/filelib/axon/Common/unix.c, src/core/filelib/axon/Common/unix.h, src/core/filelib/axon/Common/wincpp.hpp, src/core/filelib/cfs.c, src/core/filelib/cfs.h, src/core/filelib/cfslib.cpp, src/core/filelib/cfslib.h, src/core/filelib/igor/CrossPlatformFileIO.c, src/core/filelib/igor/CrossPlatformFileIO.h, src/core/filelib/igor/IgorBin.h, src/core/filelib/igor/WriteWave.c, src/core/filelib/igorlib.cpp, src/core/filelib/igorlib.h, src/core/filelib/machine.h, src/core/filelib/sonlib.cpp, src/core/filelib/sonlib.h, src/core/fitlib.cpp, src/core/fitlib.h, src/core/levmar/Axb.c, src/core/levmar/Axb_core.c, src/core/levmar/CMakeLists.txt, src/core/levmar/LICENSE, src/core/levmar/Makefile.am, src/core/levmar/Makefile.icc, src/core/levmar/Makefile.so, src/core/levmar/Makefile.vc, src/core/levmar/README.txt, src/core/levmar/liblevmar.a, src/core/levmar/lm.c, src/core/levmar/lm.h, src/core/levmar/lm_core.c, src/core/levmar/lmbc.c, src/core/levmar/lmbc_core.c, src/core/levmar/lmdemo.c, src/core/levmar/lmlec.c, src/core/levmar/lmlec_core.c, src/core/levmar/misc.c, src/core/levmar/misc.h, src/core/levmar/misc_core.c, src/core/measlib.h, src/core/recording.cpp, src/core/recording.h, src/core/section.cpp, src/core/section.h, src/core/spline.h, src/core/stimdefs.h, src/icons/16-em-down.xpm, src/icons/16-em-open.xpm, src/icons/accept.xpm, src/icons/arrow_down.xpm, src/icons/arrow_left.xpm, src/icons/arrow_out.xpm, src/icons/arrow_right.xpm, src/icons/arrow_up.xpm, src/icons/bin.xpm, src/icons/camera.xpm, src/icons/camera_ps.xpm, src/icons/ch1.xpm, src/icons/ch2.xpm, src/icons/cursor.xpm, src/icons/event.xpm, src/icons/fit.xpm, src/icons/fit_lim.xpm, src/icons/latency_lim.xpm, src/icons/resultset_first.xpm, src/icons/resultset_last.xpm, src/icons/resultset_next.xpm, src/icons/resultset_previous.xpm, src/icons/sample.ico, src/icons/sum_new.xpm, src/icons/sum_new_aligned.xpm, src/icons/table.xpm, src/icons/zoom.xpm, src/icons/zoom_in.xpm, src/icons/zoom_out.xpm, src/res/stimfit.aps, src/res/stimfit.rc, src/stfswig/Doxyfile, src/stfswig/Makefile.am, src/stfswig/Vector.i, src/stfswig/Vector.py, src/stfswig/charlie.py, src/stfswig/doxyHeaderLatex, src/stfswig/helpers.cpp, src/stfswig/ivtools.py, src/stfswig/minidemo.py, src/stfswig/mintools.py, src/stfswig/natools.py, src/stfswig/numpy.i, src/stfswig/plottools.py, src/stfswig/stf.py, src/stfswig/stfswig.cxx, src/stfswig/stfswig.h, src/stfswig/stfswig.i, src/stfswig/stfswig_wrap.cxx, stamp-h1, stfconf.h, stfconf.h.in, stimfit, stimfit_VS03/stfswig/stfswig.vcproj, stimfit_VS03/stimfit/stimfit.vcproj, stimfit_VS03/stimfit_VS03.ncb, stimfit_VS03/stimfit_VS03.sln, stimfit_VS03/stimfit_VS03.suo, stimfit_VS03/stimfit_exe/stimfit_exe.vcproj: Initial Mercurial commit [84f2e94c9daa] stimfit-0.17.1/Makefile.static.in000066400000000000000000000210641517235503400166220ustar00rootroot00000000000000######################################################################## # Makefile for static compilation Stimfit # no automake, or libtool, are needed. # # No global installation (sudo make install) is needed, but # stimfit can be started immediately after compilation. # # This is most useful for debugging, when several instances of stimfit # should be available. # # Usage: # cd /path/to/stimfit/ # change into stimfit's root directory # make -f Makefile.static # build stimfit(-lite) i.e. w/o python support # make -f Makefile.static install # install stimfit into bindir # # This file is retained as a standalone make-based build path, but the # supported primary build instructions for the repository are documented # in BUILDING.md. # # WXCONF=/usr/bin/wx-config make -f Makefile.static # # build built with non-default WX # # PREFIX=/usr/local make -f Makefile.static # # ./stimfit # start stimfit # # win32 built # CROSS=i686-pc-mingw32- make -f Makefile.static # WXCONF=i686-pc-mingw32-wx-config make -f Makefile.static # win64 built # CROSS=x86_64-static-mingw32- make -f Makefile.static # WXCONF=x86_64-static-mingw32-wx-config make -f Makefile.static # # The use of WXCONF is deprecated, and might be removed in future # Limitations: # - PYTHON shell, matplotlib (print) are not supported # # Copyright (C) 2012,2013,2014,2015,2021,2025 Alois Schloegl # This is part of the stimfit project http://stimfit.org # ######################################################################## DEFINES += -DWITH_BIOSIG ifeq (@ENABLE_PSLOPE@,yes) DEFINES += -DWITH_PSLOPE endif #DEFINES += -DTEST_MINIMAL #DEFINES += -DPYTHON -DWITH_PYTHON WXCONF = @WXCONFIG@ WXVERSION = $(shell $(WXCONF) --version) PY_VERSION := $(shell py3versions -i | sed 's/python//g') ############################################################## ### SOURCES ############################################################## vpath %.cpp ./src/stimfit:./src/stimfit/gui:./src/stimfit/gui/dlgs:./src/stimfit/gui/usrdlg:./src/libstfnum:./src/libstfio/:./src/libstfio/cfs/:./src/libstfio/atf/:./src/libstfio/abf/:./src/libstfio/abf/axon2:./src/libstfio/abf/axon/Common:./src/libstfio/abf/axon/AxAbfFio32:./src/libstfio/abf/axon/AxAtfFio32/:./src/libstfio/biosig/:./src/libstfio/hdf5/:./src/libstfio/heka/:./src/libstfio/igor:./src/libstfio/ascii/:./src/libstfio/axg/ vpath %.c ./src/libstfnum/levmar/:./src/libstfio/igor/:./src/libstfio/cfs/ vpath %.cpp ./src/libstfnum/:./src/libstfnum/levmar/:./src/stimfit/gui/:./src/stimfit/gui/dlgs/:./src/libstfio/:./src/libstfio/biosig/:./src/libstfio/igor/:./src/libstfio/cfs/ SOURCES = ./src/libstfio/annotation.cpp \ ./src/stimfit/stf.cpp \ ./src/libstfnum/stfnum.cpp \ ./src/libstfnum/funclib.cpp \ ./src/libstfnum/measure.cpp \ ./src/libstfnum/fit.cpp \ ./src/libstfnum/levmar/lm.c \ ./src/libstfnum/levmar/Axb.c \ ./src/libstfnum/levmar/misc.c \ ./src/libstfnum/levmar/lmbc.c \ ./src/libstfnum/levmar/lmlec.c \ ./src/stimfit/gui/doc.cpp \ ./src/stimfit/gui/zoom.cpp \ ./src/stimfit/gui/childframe.cpp \ ./src/stimfit/gui/app.cpp \ ./src/stimfit/gui/parentframe.cpp \ ./src/stimfit/gui/dlgs/convertdlg.cpp \ ./src/stimfit/gui/dlgs/cursorsdlg.cpp \ ./src/stimfit/gui/dlgs/eventdlg.cpp \ ./src/stimfit/gui/dlgs/smalldlgs.cpp \ ./src/stimfit/gui/dlgs/fitseldlg.cpp \ ./src/stimfit/gui/copygrid.cpp \ ./src/stimfit/gui/usrdlg/usrdlg.cpp \ ./src/stimfit/gui/graph.cpp \ ./src/stimfit/gui/view.cpp \ ./src/stimfit/gui/table.cpp \ ./src/stimfit/gui/printout.cpp \ ./src/stimfit/gui/main.cpp \ ./src/libstfio/igor/igorlib.cpp \ ./src/libstfio/cfs/cfslib.cpp \ ./src/libstfio/section.cpp \ ./src/libstfio/recording.cpp \ ./src/libstfio/hdf5/hdf5lib.cpp \ ./src/libstfio/intan/intanlib.cpp \ ./src/libstfio/intan/common.cpp \ ./src/libstfio/intan/streams.cpp \ ./src/libstfio/channel.cpp \ ./src/libstfio/stfio.cpp \ ./src/libstfio/igor/WriteWave.c \ ./src/libstfio/igor/CrossPlatformFileIO.c \ ./src/libstfio/biosig/biosiglib.cpp \ ./src/libstfio/cfs/cfs.c SOURCES_OPTIONAL = \ ./src/libstfio/heka/hekalib.cpp \ SOURCES_ABF = ./src/libstfio/atf/atflib.cpp \ ./src/libstfio/abf/abflib.cpp \ ./src/libstfio/abf/axon2/ProtocolReaderABF2.cpp \ ./src/libstfio/abf/axon2/abf2headr.cpp \ ./src/libstfio/abf/axon2/SimpleStringCache.cpp \ ./src/libstfio/abf/axon/Common/FileReadCache.cpp \ ./src/libstfio/abf/axon/Common/unix.cpp \ ./src/libstfio/abf/axon/Common/FileIO.cpp \ ./src/libstfio/abf/axon/AxAtfFio32/axatffio32.cpp \ ./src/libstfio/abf/axon/AxAtfFio32/fileio2.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/abferror.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/abfheadr.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/filedesc.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/msbincvt.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/abfutil.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/abffiles.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/Oldheadr.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/abfhwave.cpp \ ./src/libstfio/abf/axon/AxAbfFio32/csynch.cpp EXCLUDED = ./src/libstfio/ascii/asciilib.cpp \ ./src/libstfio/abf/axon/AxAtfFio32/fileio2.cpp \ ./src/libstfnum/levmar/lmbc_core.c \ ./src/libstfnum/levmar/lmlec_core.c \ ./src/libstfnum/levmar/misc_core.c \ ./src/libstfnum/levmar/lm_core.c \ ./src/libstfnum/levmar/Axb_core.c \ ./src/stimfit/gui/dclatex.cpp \ TESTSRC = ./src/test/section.cpp \ ./src/test/recording.cpp \ ./src/test/measure.cpp \ ./src/test/channel.cpp \ ./src/test/gtest/src/gtest.cc \ ./src/test/gtest/src/gtest-port.cc \ ./src/test/gtest/src/gtest-test-part.cc \ ./src/test/gtest/src/gtest-typed-test.cc \ ./src/test/gtest/src/gtest.cc \ ./src/test/gtest/src/gtest-printers.cc \ ./src/test/gtest/src/gtest-death-test.cc \ ./src/test/gtest/src/gtest-all.cc \ ./src/test/gtest/src/gtest_main.cc \ ./src/test/gtest/src/gtest-filepath.cc SOURCES_AXG = ./src/libstfio/axg/axglib.cpp \ ./src/libstfio/axg/AxoGraph_ReadWrite.cpp \ ./src/libstfio/axg/fileUtils.cpp \ ./src/libstfio/axg/stringUtils.cpp \ ./src/libstfio/axg/byteswap.cpp \ # needed because of exportATF SOURCES += $(SOURCES_ABF) # SOURCES += $(SOURCES_AXG) ifeq (,$(findstring mingw, $(WXCONF))) TARGET = stimfit OBJEXT = o else ### MINGW ### TARGET = stimfit.exe OBJEXT = obj endif ifeq (,$(findstring TEST_MINIMAL, $(DEFINES))) SOURCES += $(SOURCES_OPTIONAL) endif ifneq (,$(findstring WITH_PYTHON, $(DEFINES))) SOURCES += $(SOURCES_PYSTFIO) CFLAGS += $(shell python$(PY_VERSION)-config --cflags) DEFINES += -I$(shell python$(PY_VERSION)-config --prefix)/lib/pymodules/python$(PY_VERSION)/numpy/core/include LDFLAGS += $(shell python$(PY_VERSION)-config --ldflags) LIBS += $(shell python$(PY_VERSION)-config --libs) endif CC ?= $(shell $(WXCONF) --cc) CXX ?= $(shell $(WXCONF) --cxx) LD = $(shell $(WXCONF) --ld) CFLAGS += $(DEFINES) $(shell $(WXCONF) --cflags) -fstack-protector -O2 -I./ CPPFLAGS += $(DEFINES) $(shell $(WXCONF) --cppflags) -std=c++17 -fstack-protector -O2 -I./ LIBS += $(shell $(WXCONF) --libs net,adv,aui,core,base) SWIG = @SWIG@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ prefix ?= $(PREFIX) exec_prefix = ${prefix} datarootdir = ${prefix}/share datadir = ${datarootdir} libdir = ${exec_prefix}/lib includedir = ${prefix}/include bindir = ${exec_prefix}/bin mandir = ${datarootdir}/man PKGCONF ?= $(CROSS)pkg-config HDF5_CFLAGS = @HDF5_CFLAGS@ CPPFLAGS += $(HDF5_CFLAGS) LIBHDF5_LDFLAGS = @LIBHDF5_LDFLAGS@ LIBS += $(LIBHDF5_LDFLAGS) LIBLAPACK_LDFLAGS = @LIBLAPACK_LDFLAGS@ LIBS += $(LIBLAPACK_LDFLAGS) CXXFLAGS += $(CFLAGS) $(CPPFLAGS) ## BIOSIG related stuff ## LIBS += $(shell $(PKGCONF) --libs libbiosig) -ltinyxml LIBS += $(shell $(PKGCONF) --libs openblas) -lgomp -lbiosig LIBS += -lhdf5 -lhdf5_hl LIBS += -lfftw3 ifeq (mingw,$(findstring mingw, $(WXCONF))) LIBS += -lgfortran -lquadmath endif PYTHON_DEST_DIR = ${prefix}${PYTHON_TARGET_DIR} ############################################################## ### BUILT ############################################################## OBJECTS = $(addsuffix .$(OBJEXT), $(basename $(SOURCES))) $(TARGET): $(OBJECTS) $(LD) "$@" $(OBJECTS) $(LDFLAGS) $(LIBS) %.c: %.h %.cpp: %.h src/stimfit/sip.h: FORCE (cd src/stimfit/ && sip-module PyQt5.sip --sip-h) FORCE: %.$(OBJEXT): %.c $(CC) -o "$@" $(CFLAGS) -c "$<" %.$(OBJEXT): %.cc $(CC) -o "$@" $(CFLAGS) -c "$<" %.$(OBJEXT): %.cpp $(CXX) -o "$@" $(CPPFLAGS) -c "$<" %.$(OBJEXT): %.cxx $(CXX) -o "$@" $(CXXFLAGS) -c "$<" clean: find src -name "*.$(OBJEXT)" -exec rm {} \; install: $(TARGET) install $(TARGET) $(bindir) uninstall: rm $(bindir)/stimfit stimfit-0.17.1/README.md000066400000000000000000000107061517235503400145470ustar00rootroot00000000000000# Stimfit Documentation is available [here](https://neurodroid.github.io/stimfit). ## Introduction Stimfit is a free, fast and simple program for viewing and analyzing electrophysiological data. It's currently available for GNU/Linux, Mac OS X and Windows. The standard version of Stimfit features an embedded Python shell that allows you to extend the program functionality by using numerical libraries such as [NumPy](http://numpy.scipy.org) and [SciPy](http://www.scipy.org). A standalone Python module for file i/o that doesn't depend on the graphical user interface is also available. The "lite" version of Stimfit comes without an embedded Python shell. Stimfit-lite is more lite-weight, easier to build and install. Stimfit is using the Import filters of [Biosig](https://biosig.sourceforge.net/) which supports reading of over 50 different dataformats. ## Branch model The repository uses two upstream lines and two Debian packaging lines: - `master`: primary development branch for the modern CMake-based toolchain - `0.16`: legacy-maintenance branch for the historical 0.16/autotools line - `debian/sid`: Debian unstable packaging branch tracking `master` - `debian/sid-0.16`: Debian packaging branch tracking `0.16` Contributor and maintainer workflow details are documented in [BRANCHES.md](BRANCHES.md). ## List of references In [this link](https://neurodroid.github.io/stimfit/references/index.html) you can find a list of publications that used Stimfit for analysis. We'd appreciate if you could cite the following publication when you use Stimfit for your research: Guzman SJ, Schlögl A, Schmidt-Hieber C (2014) Stimfit: quantifying electrophysiological data with Python. *Front Neuroinform* [doi: 10.3389/fninf.2014.00016](http://www.frontiersin.org/Journal/10.3389/fninf.2014.00016/abstract) ## Installation and source builds For current source builds from this repository, use the CMake-based helper scripts documented in [`BUILDING.md`](BUILDING.md). ### Binary packages - Debian-based systems may provide `stimfit` and `python-stfio` packages through their repositories. - Release artifacts for supported platforms are published on [GitHub Releases](https://github.com/neurodroid/stimfit/releases). ### Python package status - A modern [`pyproject.toml`](pyproject.toml) based `pip` build path is being introduced for the standalone `stfio` Python module. - This targets use inside a user's own Python environment and is separate from the full Stimfit GUI application. - `pip install stimfit` for the full GUI application is not yet a supported distribution path. ### Source builds - GNU/Linux build guide: - macOS build guide: - Windows build guide: The supported repository entry points are: - [`build_linux_cmake.sh`](build_linux_cmake.sh) - [`build_macos_cmake.sh`](build_macos_cmake.sh) - [`build_windows_msvc.ps1`](build_windows_msvc.ps1) Windows packaging is performed with CMake and CPack through [`build_windows_msvc.ps1`](build_windows_msvc.ps1) as described in [`BUILDING.md`](BUILDING.md). ## Important links * [Online documentation](https://neurodroid.github.io/stimfit) * [User mailing list](http://groups.google.com/group/stimfit) * [Downloads](https://github.com/neurodroid/stimfit/wiki/Downloads) ## Source code structure | Directory | Description | | --------------- | ----------- | |./src/libstfio | File i/o library for common electrophysiology formats | |./src/libstfnum | Mathematical operations for measurements and fittings | |./src/pystfio | Python wrapper around libstfio | |./src/stimfit | Stimfit program | |./src/stimfit/py | stf module that gets imported into the embedded Python shell | libstfio is a private library that won't be installed system-wide. You may therefore end up with two copies of libstfio.so: One in the private stimfit library directory (/usr/lib/stimfit/ or similar), the other one in the Python site packages path for pystfio. libstfio may turn into a system-wide library in the future. The historical [`setup.py.in`](setup.py.in) is retained only as legacy reference material and is not the supported packaging entry point for current releases. ## Build system migration status An initial CMake bootstrap layer is available to support migration from Autotools. See [`CMAKE_MIGRATION.md`](CMAKE_MIGRATION.md) for details. stimfit-0.17.1/VERSION000066400000000000000000000000071517235503400143310ustar00rootroot000000000000000.17.1 stimfit-0.17.1/autogen.sh000077500000000000000000000004531517235503400152670ustar00rootroot00000000000000#!/bin/sh cat >&2 <<'MSG' autotools support has been deprecated in this repository. Do not run ./autogen.sh for current builds. Use the CMake build instructions in BUILDING.md instead. Primary entry points: ./build_linux_cmake.sh ./build_macos_cmake.sh ./build_windows_msvc.ps1 MSG exit 1 stimfit-0.17.1/build_linux_cmake.sh000077500000000000000000000113451517235503400173050ustar00rootroot00000000000000#!/bin/bash set -euo pipefail # Configure, build, install, and optionally package Stimfit on GNU/Linux using CMake. # # Usage: # ./build_linux_cmake.sh # ./build_linux_cmake.sh --without-python # ./build_linux_cmake.sh --with-python --install-prefix build/linux-python/install # ./build_linux_cmake.sh --install # ./build_linux_cmake.sh --package-generator TGZ # # Optional environment overrides: # PYTHON_EXECUTABLE=/usr/bin/python3.12 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=cmake/StimfitPresetHelpers.sh source "${SCRIPT_DIR}/cmake/StimfitPresetHelpers.sh" BUILD_DIR="build/linux-default" INSTALL_PREFIX="build/linux-default/install" GENERATOR="Ninja" BUILD_TYPE="Release" WITH_PYTHON=1 DO_INSTALL=0 PACKAGE_GENERATOR="" DEFAULT_SYSTEM_PYTHON="/usr/bin/python3" pick_python_for_cmake() { local requested="$1" local candidates=( "$requested" /usr/bin/python3.14 /usr/bin/python3.13 /usr/bin/python3.12 /usr/bin/python3.11 /usr/bin/python3.10 /usr/bin/python3 ) for py in "${candidates[@]}"; do [[ -x "$py" ]] || continue if "$py" - <<'PY' >/dev/null 2>&1 import sysconfig include_dir = sysconfig.get_config_var('INCLUDEPY') lib_dir = sysconfig.get_config_var('LIBDIR') ld_library = sysconfig.get_config_var('LDLIBRARY') ok = bool(include_dir) and (bool(lib_dir) or bool(ld_library)) raise SystemExit(0 if ok else 1) PY then echo "$py" return 0 fi done return 1 } while [[ $# -gt 0 ]]; do case "$1" in --with-python) WITH_PYTHON=1 BUILD_DIR="build/linux-python" INSTALL_PREFIX="build/linux-python/install" shift ;; --without-python) WITH_PYTHON=0 BUILD_DIR="build/linux-lite" INSTALL_PREFIX="build/linux-lite/install" shift ;; --build-dir) BUILD_DIR="$2" shift 2 ;; --install-prefix) INSTALL_PREFIX="$2" shift 2 ;; --generator) GENERATOR="$2" shift 2 ;; --build-type) BUILD_TYPE="$2" shift 2 ;; --package-generator) PACKAGE_GENERATOR="$2" shift 2 ;; --install) DO_INSTALL=1 shift ;; --no-install) DO_INSTALL=0 shift ;; -h|--help) sed -n '1,45p' "$0" exit 0 ;; *) echo "Unknown argument: $1" >&2 exit 1 ;; esac done stf_select_presets \ "$WITH_PYTHON" \ "linux-ninja-python" \ "linux-ninja" \ "linux-ninja-python-build" \ "linux-ninja-build" CONFIGURE_PRESET="$STF_CONFIGURE_PRESET" BUILD_PRESET="$STF_BUILD_PRESET" if [[ "$WITH_PYTHON" -eq 1 ]]; then PRESET_BUILD_DIR="build/linux-default" else PRESET_BUILD_DIR="build/linux-lite" fi cmake_configure_args=( --preset "$CONFIGURE_PRESET" -B "$BUILD_DIR" -G "$GENERATOR" -USTF_USE_BIOSIG_SUBMODULE "-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" "-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}" "-DSTF_BIOSIG_PROVIDER=SYSTEM" ) if [[ "$WITH_PYTHON" -eq 1 ]]; then PYTHON_EXECUTABLE_GUESS="${PYTHON_EXECUTABLE:-$DEFAULT_SYSTEM_PYTHON}" PYTHON_EXECUTABLE_GUESS="$(pick_python_for_cmake "$PYTHON_EXECUTABLE_GUESS")" || { echo "ERROR: Could not find a usable Python with development files (tried 3.14..3.10 and python3)." >&2 exit 1 } if [[ ! -x "${PYTHON_EXECUTABLE_GUESS}" ]]; then echo "ERROR: Python executable not found or not executable: ${PYTHON_EXECUTABLE_GUESS}" >&2 exit 1 fi cmake_configure_args+=( "-DPython3_EXECUTABLE=${PYTHON_EXECUTABLE_GUESS}" ) echo "==> Python executable: ${PYTHON_EXECUTABLE_GUESS}" fi stf_print_preset_selection "$BUILD_DIR" echo "==> Configuring" cmake "${cmake_configure_args[@]}" echo "==> Building" stf_build_with_optional_preset "$BUILD_DIR" "$PRESET_BUILD_DIR" "$BUILD_PRESET" if [[ "$DO_INSTALL" -eq 1 ]]; then if [[ -e "$INSTALL_PREFIX" ]]; then echo "==> Removing existing install prefix: $INSTALL_PREFIX" rm -rf "$INSTALL_PREFIX" fi echo "==> Installing" cmake --install "$BUILD_DIR" --prefix "$INSTALL_PREFIX" else echo "==> Skipping install (default). Use --install to run install step." fi if [[ -n "$PACKAGE_GENERATOR" ]]; then PACKAGE_CONFIG="${BUILD_DIR}/CPackConfig.cmake" if [[ ! -f "$PACKAGE_CONFIG" ]]; then echo "ERROR: CPack configuration not found at $PACKAGE_CONFIG" >&2 exit 1 fi echo "==> Packaging" cpack --config "$PACKAGE_CONFIG" -G "$PACKAGE_GENERATOR" fi if [[ "$DO_INSTALL" -eq 1 ]]; then INSTALLED_BINARY="${INSTALL_PREFIX}/bin/stimfit" if [[ -x "$INSTALLED_BINARY" ]]; then echo "==> Install complete" echo "==> Binary: ${INSTALLED_BINARY}" else echo "ERROR: Expected installed binary not found at ${INSTALLED_BINARY}" >&2 exit 1 fi else echo "==> Build complete" echo "==> Build directory: ${BUILD_DIR}" fi stimfit-0.17.1/build_macos_cmake.sh000077500000000000000000000104201517235503400172410ustar00rootroot00000000000000#!/bin/bash set -euo pipefail # Configure, build, and install Stimfit on macOS using CMake, # including production of a macOS .app bundle. # # Usage: # ./build_macos_cmake.sh # ./build_macos_cmake.sh --with-python # ./build_macos_cmake.sh --without-python # ./build_macos_cmake.sh --with-python --install-prefix build/macos-app-py/install # # Optional environment overrides: # PYTHON_EXECUTABLE=/opt/local/bin/python3.14 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=cmake/StimfitPresetHelpers.sh source "${SCRIPT_DIR}/cmake/StimfitPresetHelpers.sh" BUILD_DIR="build/macos-app" INSTALL_PREFIX="build/macos-app/install" GENERATOR="Ninja" WITH_PYTHON=1 DEFAULT_MACPORTS_PYTHON="/opt/local/bin/python3.14" pick_python_for_cmake() { local requested="$1" local candidates=( "$requested" /opt/local/bin/python3.13 /opt/local/bin/python3.12 /opt/local/bin/python3.11 /opt/local/bin/python3.10 ) for py in "${candidates[@]}"; do [[ -x "$py" ]] || continue if "$py" - <<'PY' >/dev/null 2>&1 import sysconfig ok = bool(sysconfig.get_config_var('INCLUDEPY')) and bool(sysconfig.get_config_var('LIBDIR')) raise SystemExit(0 if ok else 1) PY then echo "$py" return 0 fi done return 1 } while [[ $# -gt 0 ]]; do case "$1" in --with-python) WITH_PYTHON=1 BUILD_DIR="build/macos-app-py" INSTALL_PREFIX="build/macos-app-py/install" shift ;; --without-python) WITH_PYTHON=0 BUILD_DIR="build/macos-app-nopython" INSTALL_PREFIX="build/macos-app-nopython/install" shift ;; --build-dir) BUILD_DIR="$2" shift 2 ;; --install-prefix) INSTALL_PREFIX="$2" shift 2 ;; --generator) GENERATOR="$2" shift 2 ;; -h|--help) sed -n '1,35p' "$0" exit 0 ;; *) echo "Unknown argument: $1" >&2 exit 1 ;; esac done stf_select_presets \ "$WITH_PYTHON" \ "macos-ninja-app-python" \ "macos-ninja-app" \ "macos-ninja-app-python-stimfit" \ "macos-ninja-app-stimfit" CONFIGURE_PRESET="$STF_CONFIGURE_PRESET" BUILD_PRESET="$STF_BUILD_PRESET" if [[ "$WITH_PYTHON" -eq 1 ]]; then PRESET_BUILD_DIR="build/macos-app" else PRESET_BUILD_DIR="build/macos-app-nopython" fi cmake_configure_args=( --preset "$CONFIGURE_PRESET" -B "$BUILD_DIR" -G "$GENERATOR" -USTF_USE_BIOSIG_SUBMODULE "-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}" ) if [[ "$WITH_PYTHON" -eq 1 ]]; then PYTHON_EXECUTABLE_GUESS="${PYTHON_EXECUTABLE:-$DEFAULT_MACPORTS_PYTHON}" PYTHON_EXECUTABLE_GUESS="$(pick_python_for_cmake "$PYTHON_EXECUTABLE_GUESS")" || { echo "ERROR: Could not find a usable MacPorts Python with development files (tried 3.14..3.10)." >&2 exit 1 } if [[ ! -x "${PYTHON_EXECUTABLE_GUESS}" ]]; then echo "ERROR: Python executable not found or not executable: ${PYTHON_EXECUTABLE_GUESS}" >&2 exit 1 fi PYTHON_BIN_DIR="$(dirname "${PYTHON_EXECUTABLE_GUESS}")" WX_CONFIG_CANDIDATE="${PYTHON_BIN_DIR}/wx-config" if [[ ! -x "${WX_CONFIG_CANDIDATE}" ]]; then PYTHON_FRAMEWORK_WX_CONFIG="$(${PYTHON_EXECUTABLE_GUESS} -c 'import pathlib, sys; print((pathlib.Path(sys.base_prefix) / "bin" / "wx-config").as_posix())')" if [[ -x "${PYTHON_FRAMEWORK_WX_CONFIG}" ]]; then WX_CONFIG_CANDIDATE="${PYTHON_FRAMEWORK_WX_CONFIG}" fi fi if [[ -x "${WX_CONFIG_CANDIDATE}" ]]; then cmake_configure_args+=( "-DwxWidgets_CONFIG_EXECUTABLE=${WX_CONFIG_CANDIDATE}" ) fi cmake_configure_args+=( "-DPython3_EXECUTABLE=${PYTHON_EXECUTABLE_GUESS}" ) echo "==> Python executable: ${PYTHON_EXECUTABLE_GUESS}" fi stf_print_preset_selection "$BUILD_DIR" echo "==> Configuring" cmake "${cmake_configure_args[@]}" echo "==> Building" stf_build_with_optional_preset "$BUILD_DIR" "$PRESET_BUILD_DIR" "$BUILD_PRESET" if [[ -e "$INSTALL_PREFIX" ]]; then echo "==> Removing existing install prefix: $INSTALL_PREFIX" rm -rf "$INSTALL_PREFIX" fi echo "==> Installing" cmake --install "$BUILD_DIR" --prefix "$INSTALL_PREFIX" APP_BUNDLE="${INSTALL_PREFIX}/stimfit.app" if [[ -d "$APP_BUNDLE" ]]; then echo "==> App bundle created: $APP_BUNDLE" echo "==> Binary: ${APP_BUNDLE}/Contents/MacOS/stimfit" else echo "ERROR: Expected app bundle not found at $APP_BUNDLE" >&2 exit 1 fi stimfit-0.17.1/build_windows_msvc.ps1000066400000000000000000000154361517235503400176230ustar00rootroot00000000000000param( [switch]$WithPython = $false, [string]$ConfigurePreset, [string]$BuildPreset, [string]$PackageGenerator, [string]$InstallPrefix, [string]$BuildDir ) $ErrorActionPreference = "Stop" Set-StrictMode -Version Latest <# .SYNOPSIS Configure, build, install, and optionally package Stimfit on Windows/MSVC using CMake. .DESCRIPTION Analogous to build_macos_cmake.sh, but tailored for the Visual Studio 2022 / MSVC preset-based Windows workflow. By default this script builds the non-Python patched-biosig preset using vcpkg dependencies configured through environment variables. .USAGE ./build_windows_msvc.ps1 ./build_windows_msvc.ps1 -WithPython ./build_windows_msvc.ps1 -InstallPrefix ..\stimfit-out\install\custom-python ./build_windows_msvc.ps1 -PackageGenerator INNOSETUP ./build_windows_msvc.ps1 -PackageGenerator ZIP Optional parameter overrides: -ConfigurePreset -BuildPreset -BuildDir #> function Invoke-Step { param( [Parameter(Mandatory = $true)][string]$Name, [Parameter(Mandatory = $true)][string[]]$Command ) Write-Host "==> $Name" -ForegroundColor Cyan Write-Host " $($Command -join ' ')" & $Command[0] $Command[1..($Command.Length - 1)] if ($LASTEXITCODE -ne 0) { throw "Step failed ($Name) with exit code $LASTEXITCODE" } } $repoRoot = Resolve-Path $PSScriptRoot Push-Location $repoRoot try { if ([string]::IsNullOrWhiteSpace($env:VCPKG_ROOT)) { $defaultVsVcpkg = "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\vcpkg" if (Test-Path (Join-Path $defaultVsVcpkg "scripts\buildsystems\vcpkg.cmake")) { $env:VCPKG_ROOT = $defaultVsVcpkg } else { throw "VCPKG_ROOT is not set and no bundled Visual Studio vcpkg was found. Set VCPKG_ROOT to your vcpkg checkout." } } if ([string]::IsNullOrWhiteSpace($env:VCPKG_INSTALLED_DIR)) { $env:VCPKG_INSTALLED_DIR = Join-Path $repoRoot "vcpkg_installed" } if ([string]::IsNullOrWhiteSpace($env:VCPKG_BINARY_CACHE_DIR)) { $env:VCPKG_BINARY_CACHE_DIR = Join-Path $repoRoot "build\vcpkg-binary-cache" } if (-not (Test-Path $env:VCPKG_BINARY_CACHE_DIR)) { New-Item -ItemType Directory -Path $env:VCPKG_BINARY_CACHE_DIR -Force | Out-Null } if ([string]::IsNullOrWhiteSpace($env:VCPKG_DEFAULT_BINARY_CACHE)) { $env:VCPKG_DEFAULT_BINARY_CACHE = $env:VCPKG_BINARY_CACHE_DIR } if ([string]::IsNullOrWhiteSpace($env:VCPKG_BINARY_SOURCES)) { $env:VCPKG_BINARY_SOURCES = "clear;files,$($env:VCPKG_BINARY_CACHE_DIR),readwrite" } Write-Host "Using VCPKG_ROOT=$env:VCPKG_ROOT" Write-Host "Using VCPKG_INSTALLED_DIR=$env:VCPKG_INSTALLED_DIR" Write-Host "Using VCPKG_BINARY_CACHE_DIR=$env:VCPKG_BINARY_CACHE_DIR" Write-Host "Using VCPKG_BINARY_SOURCES=$env:VCPKG_BINARY_SOURCES" $vcpkgExe = Join-Path $env:VCPKG_ROOT "vcpkg.exe" if (-not (Test-Path $vcpkgExe)) { throw "Could not find vcpkg executable at '$vcpkgExe'." } $tripletOverlay = Join-Path $repoRoot "cmake\triplets" Invoke-Step -Name "Install vcpkg dependencies" -Command @( $vcpkgExe, "install", "--overlay-triplets", $tripletOverlay, "--triplet", "x64-windows-ci-release", "--x-install-root", $env:VCPKG_INSTALLED_DIR ) $wxRoot = Join-Path $env:VCPKG_INSTALLED_DIR "x64-windows-ci-release\lib" $wxReleaseSetup = Join-Path $wxRoot "mswu\wx\setup.h" $wxDebugSetupDir = Join-Path $wxRoot "mswud\wx" $wxDebugSetup = Join-Path $wxDebugSetupDir "setup.h" if (Test-Path $wxReleaseSetup) { if (-not (Test-Path $wxDebugSetupDir)) { New-Item -ItemType Directory -Path $wxDebugSetupDir -Force | Out-Null } Copy-Item -Path $wxReleaseSetup -Destination $wxDebugSetup -Force Write-Host "Normalized wx include layout at $wxDebugSetup" } $selectedConfigurePreset = $ConfigurePreset $selectedBuildPreset = $BuildPreset if ([string]::IsNullOrWhiteSpace($selectedConfigurePreset)) { if ($WithPython) { $selectedConfigurePreset = "vs2022-vcpkg-wx-hdf5-python314-biosig-patched" } else { $selectedConfigurePreset = "vs2022-vcpkg-wx-hdf5-biosig-patched" } } if ([string]::IsNullOrWhiteSpace($selectedBuildPreset)) { if ($WithPython) { $selectedBuildPreset = "vs2022-release-all-python314-biosig-patched" } else { $selectedBuildPreset = "vs2022-release-all-biosig-patched" } } $resolvedBuildDir = $BuildDir if ([string]::IsNullOrWhiteSpace($resolvedBuildDir)) { $resolvedBuildDir = Join-Path "..\stimfit-out" $selectedConfigurePreset } $configureCommand = @("cmake", "--preset", $selectedConfigurePreset) if (-not [string]::IsNullOrWhiteSpace($BuildDir)) { $configureCommand += @("-B", $resolvedBuildDir) } Invoke-Step -Name "Configure" -Command $configureCommand if ([string]::IsNullOrWhiteSpace($BuildDir)) { Invoke-Step -Name "Build" -Command @("cmake", "--build", "--preset", $selectedBuildPreset) } else { Invoke-Step -Name "Build" -Command @("cmake", "--build", $resolvedBuildDir, "--config", "Release", "--target", "ALL_BUILD") } $installCommand = @("cmake", "--install", $resolvedBuildDir, "--config", "Release") if (-not [string]::IsNullOrWhiteSpace($InstallPrefix)) { $installCommand += @("--prefix", $InstallPrefix) } Invoke-Step -Name "Install" -Command $installCommand if (-not [string]::IsNullOrWhiteSpace($PackageGenerator)) { $resolvedPackageGenerator = $PackageGenerator.ToUpperInvariant() if ($resolvedPackageGenerator -notin @("INNOSETUP", "ZIP")) { throw "Unsupported package generator '$PackageGenerator'. Expected INNOSETUP or ZIP." } $packageConfig = Join-Path $resolvedBuildDir "CPackConfig.cmake" if (-not (Test-Path $packageConfig)) { throw "CPack configuration was not found at '$packageConfig'. Run configure first and verify the build directory." } $packageCommand = @("cpack", "--config", $packageConfig, "-C", "Release", "-G", $resolvedPackageGenerator) Invoke-Step -Name "Package" -Command $packageCommand } $displayInstallPrefix = $InstallPrefix if ([string]::IsNullOrWhiteSpace($displayInstallPrefix)) { $displayInstallPrefix = "the preset-defined install prefix" } Write-Host "Build completed successfully." -ForegroundColor Green Write-Host "Configure preset: $selectedConfigurePreset" Write-Host "Build preset: $selectedBuildPreset" Write-Host "Build directory: $resolvedBuildDir" Write-Host "Install prefix: $displayInstallPrefix" } finally { Pop-Location } stimfit-0.17.1/cmake/000077500000000000000000000000001517235503400143445ustar00rootroot00000000000000stimfit-0.17.1/cmake/PrepareBiosigMSVC.cmake000066400000000000000000000126711517235503400206010ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.21) if(NOT CMAKE_HOST_WIN32) message(FATAL_ERROR "PrepareBiosigMSVC.cmake is only supported on Windows hosts") endif() set(_repo_root "${CMAKE_CURRENT_LIST_DIR}/..") set(STF_BIOSIG_SOURCE_DIR "${_repo_root}/src/biosig" CACHE PATH "Path to biosig submodule checkout") set(STF_BIOSIG_WORK_DIR "${_repo_root}/build/biosig-msvc-src" CACHE PATH "Path to working copy for patched biosig sources") set(STF_BIOSIG_BUILD_DIR "${_repo_root}/build/biosig-msvc-build" CACHE PATH "Path to out-of-tree biosig build directory") set(STF_BIOSIG_PATCH_DIR "${CMAKE_CURRENT_LIST_DIR}/patches/biosig-msvc" CACHE PATH "Path to patch queue directory (*.patch)") set(STF_BIOSIG_EXPECTED_TAG "v3.9.5" CACHE STRING "Expected biosig tag used as patch baseline") set(STF_BIOSIG_GENERATOR "Visual Studio 17 2022" CACHE STRING "CMake generator for biosig build") set(STF_BIOSIG_ARCH "x64" CACHE STRING "Architecture used with Visual Studio generator") set(STF_BIOSIG_CONFIG "Release" CACHE STRING "Configuration to build") set(STF_BIOSIG_TARGETS "biosig2shared" CACHE STRING "Semicolon-separated target list to build") set(STF_BIOSIG_CLEAN ON CACHE BOOL "Remove existing work/build directories before preparing") if(NOT EXISTS "${STF_BIOSIG_SOURCE_DIR}/biosig4c++/CMakeLists.txt") message(FATAL_ERROR "Invalid STF_BIOSIG_SOURCE_DIR: ${STF_BIOSIG_SOURCE_DIR}") endif() if(NOT EXISTS "${STF_BIOSIG_PATCH_DIR}") message(FATAL_ERROR "Patch directory does not exist: ${STF_BIOSIG_PATCH_DIR}") endif() file(GLOB _biosig_patch_files "${STF_BIOSIG_PATCH_DIR}/*.patch") list(SORT _biosig_patch_files) if(NOT _biosig_patch_files) message(FATAL_ERROR "No .patch files found under ${STF_BIOSIG_PATCH_DIR}") endif() find_program(STF_GIT_EXECUTABLE NAMES git REQUIRED) execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_SOURCE_DIR}" rev-parse --verify --quiet "refs/tags/${STF_BIOSIG_EXPECTED_TAG}^{commit}" RESULT_VARIABLE _biosig_expected_tag_result OUTPUT_VARIABLE _biosig_expected_commit OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _biosig_expected_tag_result EQUAL 0) message(FATAL_ERROR "Expected biosig tag '${STF_BIOSIG_EXPECTED_TAG}' was not found in ${STF_BIOSIG_SOURCE_DIR}") endif() execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_SOURCE_DIR}" rev-parse HEAD RESULT_VARIABLE _biosig_head_result OUTPUT_VARIABLE _biosig_source_head OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _biosig_head_result EQUAL 0) message(FATAL_ERROR "Failed to determine biosig HEAD from ${STF_BIOSIG_SOURCE_DIR}") endif() if(NOT _biosig_source_head STREQUAL _biosig_expected_commit) message(FATAL_ERROR "biosig submodule mismatch: expected tag '${STF_BIOSIG_EXPECTED_TAG}' -> ${_biosig_expected_commit}, " "but src/biosig is at ${_biosig_source_head}. " "Update src/biosig to tag '${STF_BIOSIG_EXPECTED_TAG}' before running PrepareBiosigMSVC.cmake." ) endif() function(_run_checked) execute_process( COMMAND ${ARGV} RESULT_VARIABLE _stf_result ) if(NOT _stf_result EQUAL 0) message(FATAL_ERROR "Command failed (${_stf_result}): ${ARGV}") endif() endfunction() if(STF_BIOSIG_CLEAN) file(REMOVE_RECURSE "${STF_BIOSIG_WORK_DIR}") file(REMOVE_RECURSE "${STF_BIOSIG_BUILD_DIR}") endif() if(NOT EXISTS "${STF_BIOSIG_WORK_DIR}/.git") file(MAKE_DIRECTORY "${STF_BIOSIG_WORK_DIR}") file(REMOVE_RECURSE "${STF_BIOSIG_WORK_DIR}") _run_checked(${STF_GIT_EXECUTABLE} clone --local --no-hardlinks "${STF_BIOSIG_SOURCE_DIR}" "${STF_BIOSIG_WORK_DIR}") endif() _run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" config core.autocrlf false) _run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" config core.eol lf) _run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" checkout --force "${_biosig_expected_commit}") _run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" reset --hard) _run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" clean -fdx) foreach(_patch IN LISTS _biosig_patch_files) execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_WORK_DIR}" apply --3way --ignore-space-change --ignore-whitespace --whitespace=nowarn "${_patch}" RESULT_VARIABLE _patch_result ) if(NOT _patch_result EQUAL 0) message(FATAL_ERROR "Failed to apply patch: ${_patch}") endif() endforeach() file(MAKE_DIRECTORY "${STF_BIOSIG_BUILD_DIR}") _run_checked( "${CMAKE_COMMAND}" -S "${STF_BIOSIG_WORK_DIR}/biosig4c++" -B "${STF_BIOSIG_BUILD_DIR}" -G "${STF_BIOSIG_GENERATOR}" -A "${STF_BIOSIG_ARCH}" ) set(_build_targets) foreach(_tgt IN LISTS STF_BIOSIG_TARGETS) list(APPEND _build_targets --target "${_tgt}") endforeach() _run_checked( "${CMAKE_COMMAND}" --build "${STF_BIOSIG_BUILD_DIR}" --config "${STF_BIOSIG_CONFIG}" ${_build_targets} ) set(_biosig_include_dir "${STF_BIOSIG_WORK_DIR}/biosig4c++") set(_biosig_library "${STF_BIOSIG_BUILD_DIR}/${STF_BIOSIG_CONFIG}/biosig2.lib") if(NOT EXISTS "${_biosig_library}") message(FATAL_ERROR "Expected library was not produced: ${_biosig_library}") endif() set(_hint_file "${STF_BIOSIG_BUILD_DIR}/biosig-msvc-paths.cmake") file(WRITE "${_hint_file}" "# Generated by cmake/PrepareBiosigMSVC.cmake\n" "set(BIOSIG_INCLUDE_DIR \"${_biosig_include_dir}\")\n" "set(BIOSIG_LIBRARY \"${_biosig_library}\")\n" ) message(STATUS "Prepared patched biosig source: ${STF_BIOSIG_WORK_DIR}") message(STATUS "Built patched biosig in: ${STF_BIOSIG_BUILD_DIR}") message(STATUS "BIOSIG_INCLUDE_DIR=${_biosig_include_dir}") message(STATUS "BIOSIG_LIBRARY=${_biosig_library}") message(STATUS "Path hint file: ${_hint_file}") stimfit-0.17.1/cmake/StagePatchedBiosig.cmake000066400000000000000000000113401517235503400210360ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.21) if(NOT CMAKE_HOST_WIN32) message(FATAL_ERROR "StagePatchedBiosig.cmake is only supported on Windows hosts") endif() set(STF_BIOSIG_SOURCE_DIR "" CACHE PATH "Path to the pristine biosig checkout") set(STF_BIOSIG_STAGE_DIR "" CACHE PATH "Path to the staged patched biosig working tree") set(STF_BIOSIG_PATCH_DIR "" CACHE PATH "Path to biosig patch files") set(STF_BIOSIG_SIGNATURE_FILE "" CACHE FILEPATH "Path to the generated biosig signature file") set(STF_BIOSIG_EXPECTED_TAG "" CACHE STRING "Expected biosig tag for staged patching") set(STF_BIOSIG_EXPECTED_COMMIT "" CACHE STRING "Expected biosig commit resolved from the expected tag") set(STF_BIOSIG_FORCE_REFRESH OFF CACHE BOOL "Force recreation of the staged biosig tree") if(STF_BIOSIG_SOURCE_DIR STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_SOURCE_DIR must be provided") endif() if(STF_BIOSIG_STAGE_DIR STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_STAGE_DIR must be provided") endif() if(STF_BIOSIG_PATCH_DIR STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_PATCH_DIR must be provided") endif() if(STF_BIOSIG_SIGNATURE_FILE STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_SIGNATURE_FILE must be provided") endif() if(STF_BIOSIG_EXPECTED_TAG STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_EXPECTED_TAG must be provided") endif() if(STF_BIOSIG_EXPECTED_COMMIT STREQUAL "") message(FATAL_ERROR "STF_BIOSIG_EXPECTED_COMMIT must be provided") endif() if(NOT EXISTS "${STF_BIOSIG_SOURCE_DIR}/biosig4c++/CMakeLists.txt") message(FATAL_ERROR "Invalid STF_BIOSIG_SOURCE_DIR: ${STF_BIOSIG_SOURCE_DIR}") endif() if(NOT EXISTS "${STF_BIOSIG_PATCH_DIR}") message(FATAL_ERROR "Patch directory does not exist: ${STF_BIOSIG_PATCH_DIR}") endif() file(GLOB _stf_biosig_patch_files LIST_DIRECTORIES FALSE "${STF_BIOSIG_PATCH_DIR}/*.patch") list(SORT _stf_biosig_patch_files) if(NOT _stf_biosig_patch_files) message(FATAL_ERROR "No .patch files found under ${STF_BIOSIG_PATCH_DIR}") endif() find_program(STF_GIT_EXECUTABLE NAMES git REQUIRED) function(_stf_run_checked) execute_process( COMMAND ${ARGV} RESULT_VARIABLE _stf_result ) if(NOT _stf_result EQUAL 0) message(FATAL_ERROR "Command failed (${_stf_result}): ${ARGV}") endif() endfunction() set(_stf_refresh_stage ${STF_BIOSIG_FORCE_REFRESH}) set(_stf_existing_signature_file "${STF_BIOSIG_STAGE_DIR}/.stimfit-biosig-signature.txt") if(EXISTS "${_stf_existing_signature_file}") file(READ "${_stf_existing_signature_file}" _stf_existing_signature) else() set(_stf_existing_signature "") endif() file(READ "${STF_BIOSIG_SIGNATURE_FILE}" _stf_requested_signature) if(NOT EXISTS "${STF_BIOSIG_STAGE_DIR}/.git") set(_stf_refresh_stage ON) endif() if(NOT _stf_existing_signature STREQUAL _stf_requested_signature) set(_stf_refresh_stage ON) endif() if(_stf_refresh_stage) file(REMOVE_RECURSE "${STF_BIOSIG_STAGE_DIR}") get_filename_component(_stf_stage_parent "${STF_BIOSIG_STAGE_DIR}" DIRECTORY) file(MAKE_DIRECTORY "${_stf_stage_parent}") _stf_run_checked(${STF_GIT_EXECUTABLE} clone --local --no-hardlinks "${STF_BIOSIG_SOURCE_DIR}" "${STF_BIOSIG_STAGE_DIR}") endif() _stf_run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" config core.autocrlf false) _stf_run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" config core.eol lf) _stf_run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" checkout --force HEAD) _stf_run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" reset --hard) _stf_run_checked(${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" clean -fdx) execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" rev-parse HEAD RESULT_VARIABLE _stf_stage_head_result OUTPUT_VARIABLE _stf_stage_head OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _stf_stage_head_result EQUAL 0) message(FATAL_ERROR "Failed to determine staged biosig HEAD from ${STF_BIOSIG_STAGE_DIR}") endif() if(NOT _stf_stage_head STREQUAL "${STF_BIOSIG_EXPECTED_COMMIT}") message(FATAL_ERROR "biosig staged source mismatch: expected tag '${STF_BIOSIG_EXPECTED_TAG}' -> ${STF_BIOSIG_EXPECTED_COMMIT}, " "but staged HEAD is ${_stf_stage_head}. " "Update src/biosig to tag '${STF_BIOSIG_EXPECTED_TAG}' and reconfigure." ) endif() foreach(_stf_patch IN LISTS _stf_biosig_patch_files) execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${STF_BIOSIG_STAGE_DIR}" apply --3way --ignore-space-change --ignore-whitespace --whitespace=nowarn "${_stf_patch}" RESULT_VARIABLE _stf_patch_result ) if(NOT _stf_patch_result EQUAL 0) message(FATAL_ERROR "Failed to apply patch: ${_stf_patch}") endif() endforeach() file(WRITE "${_stf_existing_signature_file}" "${_stf_requested_signature}") message(STATUS "Staged patched biosig source tree: ${STF_BIOSIG_STAGE_DIR}") stimfit-0.17.1/cmake/StimfitBiosigExternal.cmake000066400000000000000000000203071517235503400216270ustar00rootroot00000000000000include_guard(GLOBAL) include(ExternalProject) function(stf_configure_windows_patched_biosig) if(TARGET stimfit::biosig) return() endif() if(NOT WIN32) message(FATAL_ERROR "stf_configure_windows_patched_biosig() is only valid on Windows") endif() set(_stf_biosig_source_dir "${CMAKE_SOURCE_DIR}/src/biosig") set(_stf_biosig_patch_dir "${CMAKE_SOURCE_DIR}/cmake/patches/biosig-msvc") set(STF_BIOSIG_EXPECTED_TAG "v3.9.5" CACHE STRING "Expected biosig tag for Windows patched-submodule provider") if(NOT EXISTS "${_stf_biosig_source_dir}/biosig4c++/CMakeLists.txt") message(FATAL_ERROR "Patched biosig provider requires the biosig submodule under ${_stf_biosig_source_dir}") endif() file(GLOB _stf_biosig_patch_files LIST_DIRECTORIES FALSE "${_stf_biosig_patch_dir}/*.patch") list(SORT _stf_biosig_patch_files) if(NOT _stf_biosig_patch_files) message(FATAL_ERROR "No biosig MSVC patch files were found in ${_stf_biosig_patch_dir}") endif() find_program(STF_GIT_EXECUTABLE NAMES git REQUIRED) execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${_stf_biosig_source_dir}" rev-parse HEAD RESULT_VARIABLE _stf_biosig_rev_parse_result OUTPUT_VARIABLE _stf_biosig_head OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _stf_biosig_rev_parse_result EQUAL 0) message(FATAL_ERROR "Failed to determine biosig submodule HEAD from ${_stf_biosig_source_dir}") endif() execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${_stf_biosig_source_dir}" rev-parse --verify --quiet "refs/tags/${STF_BIOSIG_EXPECTED_TAG}^{commit}" RESULT_VARIABLE _stf_biosig_expected_tag_result OUTPUT_VARIABLE _stf_biosig_expected_commit OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _stf_biosig_expected_tag_result EQUAL 0) message(FATAL_ERROR "Expected biosig tag '${STF_BIOSIG_EXPECTED_TAG}' was not found in ${_stf_biosig_source_dir}") endif() if(NOT _stf_biosig_head STREQUAL _stf_biosig_expected_commit) message(FATAL_ERROR "biosig submodule mismatch: expected tag '${STF_BIOSIG_EXPECTED_TAG}' -> ${_stf_biosig_expected_commit}, " "but src/biosig HEAD is ${_stf_biosig_head}. " "Update src/biosig to tag '${STF_BIOSIG_EXPECTED_TAG}' and reconfigure." ) endif() execute_process( COMMAND ${STF_GIT_EXECUTABLE} -C "${_stf_biosig_source_dir}" status --porcelain --untracked-files=all RESULT_VARIABLE _stf_biosig_status_result OUTPUT_VARIABLE _stf_biosig_status OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _stf_biosig_status_result EQUAL 0) message(FATAL_ERROR "Failed to determine biosig submodule working tree status from ${_stf_biosig_source_dir}") endif() set(_stf_patch_manifest "") foreach(_stf_patch IN LISTS _stf_biosig_patch_files) file(SHA256 "${_stf_patch}" _stf_patch_hash) string(APPEND _stf_patch_manifest "${_stf_patch}=${_stf_patch_hash}\n") endforeach() if(DEFINED CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "") set(_stf_biosig_platform "${CMAKE_GENERATOR_PLATFORM}") elseif(CMAKE_VS_PLATFORM_NAME) set(_stf_biosig_platform "${CMAKE_VS_PLATFORM_NAME}") else() set(_stf_biosig_platform "") endif() set(_stf_biosig_stage_root "${CMAKE_BINARY_DIR}/_deps/biosig") set(_stf_biosig_stage_dir "${_stf_biosig_stage_root}/src") set(_stf_biosig_build_dir "${_stf_biosig_stage_root}/build") set(_stf_biosig_stamp_dir "${_stf_biosig_stage_root}/stamp") set(_stf_biosig_tmp_dir "${_stf_biosig_stage_root}/tmp") set(_stf_biosig_signature_file "${_stf_biosig_stage_root}/biosig-input-signature.txt") set(STF_BIOSIG_PATCHED_TARGETS "biosig2shared" CACHE STRING "Semicolon-separated biosig targets built for the Windows patched provider") file(MAKE_DIRECTORY "${_stf_biosig_stage_root}") file(MAKE_DIRECTORY "${_stf_biosig_stamp_dir}") file(MAKE_DIRECTORY "${_stf_biosig_tmp_dir}") set(_stf_biosig_signature "biosig-expected-tag=${STF_BIOSIG_EXPECTED_TAG}\n" "biosig-expected-commit=${_stf_biosig_expected_commit}\n" "biosig-head=${_stf_biosig_head}\n" "biosig-status=${_stf_biosig_status}\n" "generator=${CMAKE_GENERATOR}\n" "platform=${_stf_biosig_platform}\n" "targets=${STF_BIOSIG_PATCHED_TARGETS}\n" "patches=\n${_stf_patch_manifest}" ) string(JOIN "" _stf_biosig_signature ${_stf_biosig_signature}) string(SHA256 _stf_biosig_signature_hash "${_stf_biosig_signature}") file(WRITE "${_stf_biosig_signature_file}" "${_stf_biosig_signature_hash}\n${_stf_biosig_signature}") set(_stf_biosig_stage_stamp "${_stf_biosig_stamp_dir}/stage-${_stf_biosig_signature_hash}.stamp") add_custom_command( OUTPUT "${_stf_biosig_stage_stamp}" COMMAND "${CMAKE_COMMAND}" -DSTF_BIOSIG_SOURCE_DIR=${_stf_biosig_source_dir} -DSTF_BIOSIG_STAGE_DIR=${_stf_biosig_stage_dir} -DSTF_BIOSIG_PATCH_DIR=${_stf_biosig_patch_dir} -DSTF_BIOSIG_SIGNATURE_FILE=${_stf_biosig_signature_file} -DSTF_BIOSIG_EXPECTED_TAG=${STF_BIOSIG_EXPECTED_TAG} -DSTF_BIOSIG_EXPECTED_COMMIT=${_stf_biosig_expected_commit} -P "${CMAKE_SOURCE_DIR}/cmake/StagePatchedBiosig.cmake" COMMAND "${CMAKE_COMMAND}" -E touch "${_stf_biosig_stage_stamp}" DEPENDS "${_stf_biosig_source_dir}/biosig4c++/CMakeLists.txt" ${_stf_biosig_patch_files} "${CMAKE_SOURCE_DIR}/cmake/StagePatchedBiosig.cmake" COMMENT "Staging patched biosig working tree" VERBATIM ) add_custom_target(stimfit_biosig_stage DEPENDS "${_stf_biosig_stage_stamp}") set(_stf_biosig_library_dir "${_stf_biosig_build_dir}/$") set(_stf_biosig_import_library "${_stf_biosig_library_dir}/biosig2.lib") set(_stf_biosig_runtime_library "${_stf_biosig_library_dir}/biosig2.dll") set(_stf_biosig_include_dir "${_stf_biosig_stage_dir}/biosig4c++") set(_stf_biosig_release_import_library "${_stf_biosig_build_dir}/Release/biosig2.lib") set(_stf_biosig_release_runtime_library "${_stf_biosig_build_dir}/Release/biosig2.dll") set(_stf_biosig_debug_import_library "${_stf_biosig_build_dir}/Debug/biosig2.lib") set(_stf_biosig_debug_runtime_library "${_stf_biosig_build_dir}/Debug/biosig2.dll") set(_stf_biosig_relwithdebinfo_import_library "${_stf_biosig_build_dir}/RelWithDebInfo/biosig2.lib") set(_stf_biosig_relwithdebinfo_runtime_library "${_stf_biosig_build_dir}/RelWithDebInfo/biosig2.dll") set(_stf_biosig_minsizerel_import_library "${_stf_biosig_build_dir}/MinSizeRel/biosig2.lib") set(_stf_biosig_minsizerel_runtime_library "${_stf_biosig_build_dir}/MinSizeRel/biosig2.dll") ExternalProject_Add(stimfit_biosig_external SOURCE_DIR "${_stf_biosig_stage_dir}/biosig4c++" BINARY_DIR "${_stf_biosig_build_dir}" STAMP_DIR "${_stf_biosig_stamp_dir}/external" TMP_DIR "${_stf_biosig_tmp_dir}" DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" CONFIGURE_HANDLED_BY_BUILD ON DEPENDS stimfit_biosig_stage CMAKE_GENERATOR "${CMAKE_GENERATOR}" CMAKE_GENERATOR_PLATFORM "${_stf_biosig_platform}" BUILD_COMMAND "${CMAKE_COMMAND}" --build "${_stf_biosig_build_dir}" --config $ --target ${STF_BIOSIG_PATCHED_TARGETS} BUILD_BYPRODUCTS "${_stf_biosig_import_library}" "${_stf_biosig_runtime_library}" ) add_library(stimfit::biosig SHARED IMPORTED GLOBAL) set_target_properties(stimfit::biosig PROPERTIES IMPORTED_CONFIGURATIONS "Debug;Release;RelWithDebInfo;MinSizeRel" IMPORTED_IMPLIB_DEBUG "${_stf_biosig_debug_import_library}" IMPORTED_LOCATION_DEBUG "${_stf_biosig_debug_runtime_library}" IMPORTED_IMPLIB_RELEASE "${_stf_biosig_release_import_library}" IMPORTED_LOCATION_RELEASE "${_stf_biosig_release_runtime_library}" IMPORTED_IMPLIB_RELWITHDEBINFO "${_stf_biosig_relwithdebinfo_import_library}" IMPORTED_LOCATION_RELWITHDEBINFO "${_stf_biosig_relwithdebinfo_runtime_library}" IMPORTED_IMPLIB_MINSIZEREL "${_stf_biosig_minsizerel_import_library}" IMPORTED_LOCATION_MINSIZEREL "${_stf_biosig_minsizerel_runtime_library}" INTERFACE_INCLUDE_DIRECTORIES "${_stf_biosig_include_dir}" ) add_dependencies(stimfit::biosig stimfit_biosig_external) set(BIOSIG_LIBRARY "${_stf_biosig_release_import_library}" PARENT_SCOPE) set(BIOSIG_INCLUDE_DIR "${_stf_biosig_include_dir}" PARENT_SCOPE) set(STF_BIOSIG_RUNTIME_DIR "${_stf_biosig_build_dir}/Release" PARENT_SCOPE) endfunction() stimfit-0.17.1/cmake/StimfitDependencies.cmake000066400000000000000000000761611517235503400213070ustar00rootroot00000000000000include_guard(GLOBAL) include(CheckSymbolExists) include(StimfitBiosigExternal) function(stf_get_python_bootstrap out_var) set(_stf_python_bootstrap "") if(WIN32) set(_stf_python_extra_paths ${STF_WINDOWS_PYTHON_EXTRA_PATHS}) list(FILTER _stf_python_extra_paths EXCLUDE REGEX "^$") foreach(_stf_path IN LISTS _stf_python_extra_paths) string(REPLACE "\\" "\\\\" _stf_path_escaped "${_stf_path}") string(APPEND _stf_python_bootstrap "import sys; sys.path.insert(0, r'${_stf_path_escaped}'); ") endforeach() endif() set(${out_var} "${_stf_python_bootstrap}" PARENT_SCOPE) endfunction() function(stf_find_macos_wx_config out_var) set(_stf_wx_config_candidate "") if(APPLE) find_program(_stf_wx_config_candidate NAMES wx-config HINTS "/opt/local/bin" NO_DEFAULT_PATH ) if(NOT _stf_wx_config_candidate) file(GLOB _stf_macports_python_bins LIST_DIRECTORIES FALSE "/opt/local/Library/Frameworks/Python.framework/Versions/*/bin") foreach(_stf_python_bin IN LISTS _stf_macports_python_bins) find_program(_stf_wx_config_from_python NAMES wx-config HINTS "${_stf_python_bin}" NO_DEFAULT_PATH ) if(_stf_wx_config_from_python) set(_stf_wx_config_candidate "${_stf_wx_config_from_python}") break() endif() endforeach() unset(_stf_wx_config_from_python) unset(_stf_python_bin) unset(_stf_macports_python_bins) endif() endif() set(${out_var} "${_stf_wx_config_candidate}" PARENT_SCOPE) endfunction() function(stf_import_biosig_target) if(TARGET stimfit::biosig) return() endif() set(_stf_biosig_include_dir "${BIOSIG_INCLUDE_DIR}") set(_stf_biosig_library "${BIOSIG_LIBRARY}") set(_stf_biosig_link_libraries "") if(PkgConfig_FOUND) pkg_check_modules(PC_LIBBIOSIG QUIET libbiosig) if(NOT PC_LIBBIOSIG_FOUND) pkg_check_modules(PC_LIBBIOSIG QUIET biosig) endif() if(PC_LIBBIOSIG_FOUND) if(NOT _stf_biosig_library) foreach(_stf_biosig_pkg_lib IN LISTS PC_LIBBIOSIG_LINK_LIBRARIES) if(IS_ABSOLUTE "${_stf_biosig_pkg_lib}" AND EXISTS "${_stf_biosig_pkg_lib}") set(_stf_biosig_library "${_stf_biosig_pkg_lib}") break() endif() endforeach() unset(_stf_biosig_pkg_lib) endif() if(NOT _stf_biosig_library) find_library(_stf_biosig_library NAMES biosig biosig2 HINTS ${PC_LIBBIOSIG_LIBRARY_DIRS} ) endif() if(NOT _stf_biosig_include_dir) foreach(_stf_biosig_inc IN LISTS PC_LIBBIOSIG_INCLUDE_DIRS) if(EXISTS "${_stf_biosig_inc}/biosig.h") set(_stf_biosig_include_dir "${_stf_biosig_inc}") break() endif() endforeach() unset(_stf_biosig_inc) endif() if(NOT _stf_biosig_include_dir) foreach(_stf_biosig_inc IN LISTS PC_LIBBIOSIG_INCLUDEDIR PC_LIBBIOSIG_INCLUDE_DIRS) if(EXISTS "${_stf_biosig_inc}/biosig.h") set(_stf_biosig_include_dir "${_stf_biosig_inc}") break() endif() endforeach() unset(_stf_biosig_inc) endif() if(PC_LIBBIOSIG_LINK_LIBRARIES) set(_stf_biosig_link_libraries ${PC_LIBBIOSIG_LINK_LIBRARIES}) elseif(PC_LIBBIOSIG_LIBRARIES) set(_stf_biosig_link_libraries ${PC_LIBBIOSIG_LIBRARIES}) endif() endif() endif() if(NOT _stf_biosig_library) find_library(_stf_biosig_library NAMES biosig biosig2 HINTS /lib /lib64 /usr/lib /usr/lib64 /lib/${CMAKE_LIBRARY_ARCHITECTURE} /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} ) endif() if(NOT _stf_biosig_library) set(_stf_biosig_library_candidates "/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.so" "/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.so.3" "/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.a" "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.so" "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.so.3" "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libbiosig.a" "/lib/x86_64-linux-gnu/libbiosig.so" "/lib/x86_64-linux-gnu/libbiosig.so.3" "/lib/x86_64-linux-gnu/libbiosig.a" "/usr/lib/x86_64-linux-gnu/libbiosig.so" "/usr/lib/x86_64-linux-gnu/libbiosig.so.3" "/usr/lib/x86_64-linux-gnu/libbiosig.a" "/lib/aarch64-linux-gnu/libbiosig.so" "/lib/aarch64-linux-gnu/libbiosig.so.3" "/lib/aarch64-linux-gnu/libbiosig.a" "/usr/lib/aarch64-linux-gnu/libbiosig.so" "/usr/lib/aarch64-linux-gnu/libbiosig.so.3" "/usr/lib/aarch64-linux-gnu/libbiosig.a" ) foreach(_stf_biosig_candidate IN LISTS _stf_biosig_library_candidates) if(EXISTS "${_stf_biosig_candidate}") set(_stf_biosig_library "${_stf_biosig_candidate}") break() endif() endforeach() unset(_stf_biosig_candidate) unset(_stf_biosig_library_candidates) endif() if(_stf_biosig_library AND NOT _stf_biosig_include_dir) get_filename_component(_stf_biosig_lib_dir "${_stf_biosig_library}" DIRECTORY) set(_stf_biosig_include_candidates "${_stf_biosig_lib_dir}" "${_stf_biosig_lib_dir}/include" "${_stf_biosig_lib_dir}/../include" ) foreach(_stf_biosig_inc IN LISTS _stf_biosig_include_candidates) if(EXISTS "${_stf_biosig_inc}/biosig.h") set(_stf_biosig_include_dir "${_stf_biosig_inc}") break() endif() endforeach() unset(_stf_biosig_inc) unset(_stf_biosig_include_candidates) unset(_stf_biosig_lib_dir) endif() if(NOT _stf_biosig_include_dir) find_path(_stf_biosig_include_dir NAMES biosig.h HINTS /usr/include /usr/local/include ) endif() if(NOT _stf_biosig_include_dir) foreach(_stf_biosig_inc_candidate IN ITEMS /usr/include /usr/local/include) if(EXISTS "${_stf_biosig_inc_candidate}/biosig.h") set(_stf_biosig_include_dir "${_stf_biosig_inc_candidate}") break() endif() endforeach() unset(_stf_biosig_inc_candidate) endif() if(_stf_biosig_library) add_library(stimfit::biosig UNKNOWN IMPORTED) set_target_properties(stimfit::biosig PROPERTIES IMPORTED_LOCATION "${_stf_biosig_library}") if(_stf_biosig_include_dir) target_include_directories(stimfit::biosig INTERFACE "${_stf_biosig_include_dir}") endif() if(_stf_biosig_link_libraries) target_link_libraries(stimfit::biosig INTERFACE ${_stf_biosig_link_libraries}) endif() set(BIOSIG_LIBRARY "${_stf_biosig_library}" PARENT_SCOPE) set(BIOSIG_INCLUDE_DIR "${_stf_biosig_include_dir}" PARENT_SCOPE) endif() unset(_stf_biosig_link_libraries) endfunction() find_package(Threads REQUIRED) find_package(PkgConfig QUIET) if(STF_HDF5_PREFIX) list(PREPEND CMAKE_PREFIX_PATH "${STF_HDF5_PREFIX}") list(PREPEND CMAKE_LIBRARY_PATH "${STF_HDF5_PREFIX}/lib") list(PREPEND CMAKE_INCLUDE_PATH "${STF_HDF5_PREFIX}/include") endif() # Prefer CMake config exports first (works reliably with vcpkg on Windows). set(_stf_hdf5_resolved FALSE) find_package(hdf5 CONFIG QUIET) find_package(HDF5 CONFIG QUIET) if(TARGET hdf5::hdf5-shared OR TARGET hdf5::hdf5 OR TARGET hdf5::hdf5-static OR TARGET HDF5::HDF5) add_library(stimfit::hdf5 INTERFACE IMPORTED) if(TARGET hdf5::hdf5-shared) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5-shared) elseif(TARGET hdf5::hdf5) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5) elseif(TARGET hdf5::hdf5-static) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5-static) else() target_link_libraries(stimfit::hdf5 INTERFACE HDF5::HDF5) endif() if(TARGET hdf5::hdf5_hl-shared) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5_hl-shared) elseif(TARGET hdf5::hdf5_hl) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5_hl) elseif(TARGET hdf5::hdf5_hl-static) target_link_libraries(stimfit::hdf5 INTERFACE hdf5::hdf5_hl-static) elseif(TARGET HDF5::hdf5_hl) target_link_libraries(stimfit::hdf5 INTERFACE HDF5::hdf5_hl) endif() set(_stf_hdf5_resolved TRUE) endif() if(NOT _stf_hdf5_resolved) # Fall back to module mode and then direct library probing. set(HDF5_NO_FIND_PACKAGE_CONFIG_FILE TRUE) find_package(HDF5 MODULE COMPONENTS C HL QUIET) unset(HDF5_NO_FIND_PACKAGE_CONFIG_FILE) if(HDF5_FOUND) add_library(stimfit::hdf5 INTERFACE IMPORTED) target_include_directories(stimfit::hdf5 INTERFACE ${HDF5_INCLUDE_DIRS}) if(HDF5_DEFINITIONS) target_compile_definitions(stimfit::hdf5 INTERFACE ${HDF5_DEFINITIONS}) endif() if(HDF5_C_DEFINITIONS) target_compile_definitions(stimfit::hdf5 INTERFACE ${HDF5_C_DEFINITIONS}) endif() set(_stimfit_hdf5_libs ${HDF5_LIBRARIES}) if(HDF5_HL_LIBRARIES) list(APPEND _stimfit_hdf5_libs ${HDF5_HL_LIBRARIES}) endif() if(HDF5_C_HL_LIBRARIES) list(APPEND _stimfit_hdf5_libs ${HDF5_C_HL_LIBRARIES}) endif() list(REMOVE_DUPLICATES _stimfit_hdf5_libs) target_link_libraries(stimfit::hdf5 INTERFACE ${_stimfit_hdf5_libs}) unset(_stimfit_hdf5_libs) set(_stf_hdf5_resolved TRUE) endif() endif() if(NOT _stf_hdf5_resolved) find_library(HDF5_LIBRARY NAMES hdf5 hdf5-shared libhdf5) find_library(HDF5_HL_LIBRARY NAMES hdf5_hl hdf5_hl-shared libhdf5_hl) if(HDF5_LIBRARY AND HDF5_HL_LIBRARY) add_library(stimfit::hdf5 INTERFACE IMPORTED) target_link_libraries(stimfit::hdf5 INTERFACE ${HDF5_LIBRARY} ${HDF5_HL_LIBRARY}) if(STF_HDF5_PREFIX) target_include_directories(stimfit::hdf5 INTERFACE ${STF_HDF5_PREFIX}/include) endif() set(_stf_hdf5_resolved TRUE) endif() endif() if(NOT _stf_hdf5_resolved) message(FATAL_ERROR "HDF5 not found. Install HDF5 development files or set STF_HDF5_PREFIX to your HDF5 prefix.") endif() unset(_stf_hdf5_resolved) check_symbol_exists(strptime "time.h" HAVE_STRPTIME_H) set(STF_BIOSIG_USE_SUBMODULE OFF) set(STF_BIOSIG_SELECTED_PROVIDER "DISABLED") if(STF_WITH_BIOSIG) set(_stf_biosig_provider_candidates) if(STF_BIOSIG_PROVIDER STREQUAL "AUTO") if(WIN32) list(APPEND _stf_biosig_provider_candidates PATCHED_SUBMODULE SYSTEM SUBMODULE) else() list(APPEND _stf_biosig_provider_candidates SUBMODULE SYSTEM) endif() else() list(APPEND _stf_biosig_provider_candidates "${STF_BIOSIG_PROVIDER}") endif() foreach(_stf_biosig_provider IN LISTS _stf_biosig_provider_candidates) if(_stf_biosig_provider STREQUAL "PATCHED_SUBMODULE") if(WIN32 AND EXISTS "${CMAKE_SOURCE_DIR}/src/biosig/biosig4c++/CMakeLists.txt") stf_configure_windows_patched_biosig() if(TARGET stimfit::biosig) set(STF_BIOSIG_SELECTED_PROVIDER "PATCHED_SUBMODULE") break() endif() endif() elseif(_stf_biosig_provider STREQUAL "SUBMODULE") if(DEFINED BIOSIG_LIBRARY AND NOT "${BIOSIG_LIBRARY}" STREQUAL "") stf_import_biosig_target() if(TARGET stimfit::biosig) set(STF_BIOSIG_SELECTED_PROVIDER "SUBMODULE") break() endif() elseif(EXISTS "${CMAKE_SOURCE_DIR}/src/biosig/biosig4c++/CMakeLists.txt") set(STF_BIOSIG_USE_SUBMODULE ON) set(STF_BIOSIG_SELECTED_PROVIDER "SUBMODULE") break() endif() elseif(_stf_biosig_provider STREQUAL "SYSTEM") stf_import_biosig_target() if(TARGET stimfit::biosig) set(STF_BIOSIG_SELECTED_PROVIDER "SYSTEM") break() endif() endif() endforeach() if(STF_BIOSIG_SELECTED_PROVIDER STREQUAL "DISABLED") if(STF_BIOSIG_PROVIDER STREQUAL "AUTO") message(WARNING "STF_WITH_BIOSIG is ON but the requested BIOSIG provider was unavailable; turning BIOSIG support OFF") set(STF_WITH_BIOSIG OFF CACHE BOOL "Enable BIOSIG support" FORCE) else() message(FATAL_ERROR "STF_WITH_BIOSIG is ON but STF_BIOSIG_PROVIDER='${STF_BIOSIG_PROVIDER}' could not be resolved. Install system BIOSIG development files or choose STF_BIOSIG_PROVIDER=PATCHED_SUBMODULE or SUBMODULE.") endif() endif() unset(_stf_biosig_provider) unset(_stf_biosig_provider_candidates) endif() set(_stf_fftw3_include_dir "") set(_stf_fftw3_link_libraries "") if(PkgConfig_FOUND) pkg_check_modules(PC_FFTW3 QUIET fftw3) if(PC_FFTW3_FOUND) foreach(_stf_fftw3_pkg_lib IN LISTS PC_FFTW3_LINK_LIBRARIES) if(IS_ABSOLUTE "${_stf_fftw3_pkg_lib}" AND EXISTS "${_stf_fftw3_pkg_lib}") set(FFTW3_LIBRARY "${_stf_fftw3_pkg_lib}") break() endif() endforeach() unset(_stf_fftw3_pkg_lib) if(NOT FFTW3_LIBRARY) find_library(FFTW3_LIBRARY NAMES fftw3 libfftw3-3 fftw3-3 HINTS ${PC_FFTW3_LIBRARY_DIRS} ) endif() foreach(_stf_fftw3_inc IN LISTS PC_FFTW3_INCLUDE_DIRS PC_FFTW3_INCLUDEDIR) if(EXISTS "${_stf_fftw3_inc}/fftw3.h") set(_stf_fftw3_include_dir "${_stf_fftw3_inc}") break() endif() endforeach() unset(_stf_fftw3_inc) if(PC_FFTW3_LINK_LIBRARIES) set(_stf_fftw3_link_libraries ${PC_FFTW3_LINK_LIBRARIES}) elseif(PC_FFTW3_LIBRARIES) set(_stf_fftw3_link_libraries ${PC_FFTW3_LIBRARIES}) endif() endif() endif() if(NOT FFTW3_LIBRARY) find_library(FFTW3_LIBRARY NAMES fftw3 libfftw3-3 fftw3-3 REQUIRED) endif() add_library(stimfit::fftw3 UNKNOWN IMPORTED) set_target_properties(stimfit::fftw3 PROPERTIES IMPORTED_LOCATION "${FFTW3_LIBRARY}") if(NOT _stf_fftw3_include_dir) # Try to locate fftw3.h for custom/local installs (e.g. ~/libs/fftw3). get_filename_component(_fftw3_lib_dir "${FFTW3_LIBRARY}" DIRECTORY) set(_fftw3_include_candidates "${_fftw3_lib_dir}" "${_fftw3_lib_dir}/include" "${_fftw3_lib_dir}/../include" ) foreach(_fftw3_inc IN LISTS _fftw3_include_candidates) if(EXISTS "${_fftw3_inc}/fftw3.h") set(_stf_fftw3_include_dir "${_fftw3_inc}") break() endif() endforeach() unset(_fftw3_inc) unset(_fftw3_include_candidates) unset(_fftw3_lib_dir) endif() if(_stf_fftw3_include_dir) target_include_directories(stimfit::fftw3 INTERFACE "${_stf_fftw3_include_dir}") endif() if(_stf_fftw3_link_libraries) target_link_libraries(stimfit::fftw3 INTERFACE ${_stf_fftw3_link_libraries}) endif() unset(_stf_fftw3_include_dir) unset(_stf_fftw3_link_libraries) macro(_stf_reset_lapack_blas_find_state) unset(LAPACK_FOUND) unset(LAPACK_FOUND CACHE) unset(LAPACK_LIBRARIES) unset(LAPACK_LIBRARIES CACHE) unset(BLAS_FOUND) unset(BLAS_FOUND CACHE) unset(BLAS_LIBRARIES) unset(BLAS_LIBRARIES CACHE) endmacro() if(NOT DEFINED STF_DEBUG_LAPACK_DISCOVERY) set(STF_DEBUG_LAPACK_DISCOVERY OFF) endif() macro(_stf_debug_lapack msg) if(STF_DEBUG_LAPACK_DISCOVERY) message(STATUS "[lapack-debug] ${msg}") endif() endmacro() macro(_stf_collect_lapack_link_items out_var) set(_stf_tmp_link_items) if(TARGET LAPACK::LAPACK) list(APPEND _stf_tmp_link_items LAPACK::LAPACK) endif() if(DEFINED LAPACK_LIBRARIES AND NOT "${LAPACK_LIBRARIES}" STREQUAL "") list(APPEND _stf_tmp_link_items ${LAPACK_LIBRARIES}) endif() list(REMOVE_DUPLICATES _stf_tmp_link_items) set(${out_var} ${_stf_tmp_link_items}) unset(_stf_tmp_link_items) endmacro() macro(_stf_collect_blas_link_items out_var) set(_stf_tmp_link_items) if(TARGET BLAS::BLAS) list(APPEND _stf_tmp_link_items BLAS::BLAS) endif() if(DEFINED BLAS_LIBRARIES AND NOT "${BLAS_LIBRARIES}" STREQUAL "") list(APPEND _stf_tmp_link_items ${BLAS_LIBRARIES}) endif() list(REMOVE_DUPLICATES _stf_tmp_link_items) set(${out_var} ${_stf_tmp_link_items}) unset(_stf_tmp_link_items) endmacro() set(_stf_lapack_provider_candidates) if(STF_LAPACK_PROVIDER STREQUAL "AUTO") if(APPLE) list(APPEND _stf_lapack_provider_candidates ACCELERATE OPENBLAS LEGACY) else() list(APPEND _stf_lapack_provider_candidates OPENBLAS LEGACY) endif() else() list(APPEND _stf_lapack_provider_candidates "${STF_LAPACK_PROVIDER}") endif() set(_stf_lapack_selected_provider "UNRESOLVED") set(_stf_lapack_imported_location "") set(_stf_lapack_link_libraries "") set(_stf_lapack_use_interface_target ON) set(_stf_lapack_is_openblas OFF) foreach(_stf_lapack_provider IN LISTS _stf_lapack_provider_candidates) if(_stf_lapack_provider STREQUAL "ACCELERATE") if(APPLE) find_library(ACCELERATE_FRAMEWORK Accelerate) if(ACCELERATE_FRAMEWORK) set(_stf_lapack_selected_provider "ACCELERATE") set(_stf_lapack_link_libraries "-framework Accelerate") set(_stf_lapack_use_interface_target ON) break() endif() endif() elseif(_stf_lapack_provider STREQUAL "OPENBLAS") find_library(OPENBLAS_LIBRARY NAMES openblas) _stf_debug_lapack("OPENBLAS provider: OPENBLAS_LIBRARY='${OPENBLAS_LIBRARY}'") set(_stf_had_bla_vendor OFF) if(DEFINED BLA_VENDOR) set(_stf_saved_bla_vendor "${BLA_VENDOR}") set(_stf_had_bla_vendor ON) endif() set(BLA_VENDOR OpenBLAS) _stf_reset_lapack_blas_find_state() find_package(LAPACK QUIET) _stf_debug_lapack("OPENBLAS/LAPACK probe: LAPACK_FOUND='${LAPACK_FOUND}' LAPACK_LIBRARIES='${LAPACK_LIBRARIES}'") if(LAPACK_FOUND) _stf_collect_lapack_link_items(_stf_lapack_candidates) _stf_debug_lapack("OPENBLAS/LAPACK candidates='${_stf_lapack_candidates}'") if(_stf_lapack_candidates) set(_stf_lapack_selected_provider "OPENBLAS") set(_stf_lapack_link_libraries ${_stf_lapack_candidates}) set(_stf_lapack_use_interface_target ON) set(_stf_lapack_is_openblas ON) if(_stf_had_bla_vendor) set(BLA_VENDOR "${_stf_saved_bla_vendor}") else() unset(BLA_VENDOR) endif() unset(_stf_saved_bla_vendor) unset(_stf_had_bla_vendor) unset(_stf_lapack_candidates) break() endif() unset(_stf_lapack_candidates) endif() _stf_reset_lapack_blas_find_state() find_package(BLAS QUIET) _stf_debug_lapack("OPENBLAS/BLAS probe: BLAS_FOUND='${BLAS_FOUND}' BLAS_LIBRARIES='${BLAS_LIBRARIES}'") if(BLAS_FOUND) _stf_collect_blas_link_items(_stf_blas_candidates) _stf_debug_lapack("OPENBLAS/BLAS candidates='${_stf_blas_candidates}'") _stf_debug_lapack("OPENBLAS/BLAS candidates are ignored for LAPACK provider selection (BLAS-only is insufficient)") unset(_stf_blas_candidates) endif() find_library(LAPACK_LIBRARY NAMES lapack lapack3 lapack-3) if(OPENBLAS_LIBRARY AND LAPACK_LIBRARY) set(_stf_lapack_selected_provider "OPENBLAS") set(_stf_lapack_link_libraries "${LAPACK_LIBRARY};${OPENBLAS_LIBRARY}") set(_stf_lapack_use_interface_target ON) set(_stf_lapack_is_openblas ON) _stf_debug_lapack("OPENBLAS fallback selected pair LAPACK='${LAPACK_LIBRARY}' BLAS='${OPENBLAS_LIBRARY}'") if(_stf_had_bla_vendor) set(BLA_VENDOR "${_stf_saved_bla_vendor}") else() unset(BLA_VENDOR) endif() unset(_stf_saved_bla_vendor) unset(_stf_had_bla_vendor) break() endif() unset(LAPACK_LIBRARY) if(OPENBLAS_LIBRARY) _stf_debug_lapack("OPENBLAS fallback rejected because no LAPACK companion library was found") endif() if(_stf_had_bla_vendor) set(BLA_VENDOR "${_stf_saved_bla_vendor}") else() unset(BLA_VENDOR) endif() unset(_stf_saved_bla_vendor) unset(_stf_had_bla_vendor) elseif(_stf_lapack_provider STREQUAL "LEGACY") _stf_reset_lapack_blas_find_state() find_package(LAPACK QUIET) _stf_debug_lapack("LEGACY/LAPACK probe: LAPACK_FOUND='${LAPACK_FOUND}' LAPACK_LIBRARIES='${LAPACK_LIBRARIES}'") if(LAPACK_FOUND) _stf_collect_lapack_link_items(_stf_lapack_candidates) _stf_debug_lapack("LEGACY/LAPACK candidates='${_stf_lapack_candidates}'") if(_stf_lapack_candidates) set(_stf_lapack_selected_provider "LEGACY") set(_stf_lapack_link_libraries ${_stf_lapack_candidates}) set(_stf_lapack_use_interface_target ON) unset(_stf_lapack_candidates) break() endif() unset(_stf_lapack_candidates) endif() _stf_reset_lapack_blas_find_state() find_package(BLAS QUIET) _stf_debug_lapack("LEGACY/BLAS probe: BLAS_FOUND='${BLAS_FOUND}' BLAS_LIBRARIES='${BLAS_LIBRARIES}'") if(BLAS_FOUND) _stf_collect_blas_link_items(_stf_blas_candidates) _stf_debug_lapack("LEGACY/BLAS candidates='${_stf_blas_candidates}'") _stf_debug_lapack("LEGACY/BLAS candidates are ignored for LAPACK provider selection (BLAS-only is insufficient)") unset(_stf_blas_candidates) endif() find_library(LAPACK_LIBRARY NAMES lapack lapack3 lapack-3) if(LAPACK_LIBRARY) set(_stf_lapack_selected_provider "LEGACY") set(_stf_lapack_imported_location "${LAPACK_LIBRARY}") set(_stf_lapack_use_interface_target OFF) break() endif() endif() endforeach() if(_stf_lapack_selected_provider STREQUAL "UNRESOLVED") message(FATAL_ERROR "Could not resolve LAPACK provider for STF_LAPACK_PROVIDER='${STF_LAPACK_PROVIDER}'. " "Requested candidates: ${_stf_lapack_provider_candidates}") endif() if(_stf_lapack_use_interface_target) add_library(stimfit::lapack INTERFACE IMPORTED) target_link_libraries(stimfit::lapack INTERFACE ${_stf_lapack_link_libraries}) else() add_library(stimfit::lapack UNKNOWN IMPORTED) set_target_properties(stimfit::lapack PROPERTIES IMPORTED_LOCATION "${_stf_lapack_imported_location}") endif() target_compile_definitions(stimfit::lapack INTERFACE HAVE_LAPACK) if(_stf_lapack_is_openblas) target_compile_definitions(stimfit::lapack INTERFACE WITH_OPENBLAS) endif() unset(_stf_lapack_provider) unset(_stf_lapack_provider_candidates) unset(_stf_lapack_selected_provider) unset(_stf_lapack_imported_location) unset(_stf_lapack_link_libraries) unset(_stf_lapack_use_interface_target) unset(_stf_lapack_is_openblas) unset(ACCELERATE_FRAMEWORK) unset(OPENBLAS_LIBRARY) unset(LAPACK_LIBRARY) # When linking against an embedded-Python-capable build (wxPython), the C++ # wxWidgets runtime MUST match the version that wxPython was built against. # wxPython Phoenix 4.x ships bundled wx 3.2.x DLLs; if stimfit links against # a different wx (e.g. vcpkg wx 3.3.x) the two runtimes coexist in the same # process with incompatible ABIs, causing wxPyConvertWrappedPtr to return NULL # ("Pointer is zero" at startup). Set STF_WX_PREFER_MODULE_FIND=ON together # with wxWidgets_ROOT_DIR and wxWidgets_LIB_DIR pointing to the wxPython wx # tree to compile and link against that exact wx build. # # NOTE: vcpkg installs a vcpkg-cmake-wrapper.cmake for wxWidgets that forcibly # resets wxWidgets_ROOT_DIR / wxWidgets_LIB_DIR with CACHE INTERNAL before # FindwxWidgets runs, defeating preset values. When STF_WX_PREFER_MODULE_FIND # is ON we therefore bypass find_package(wxWidgets) entirely and build the # interface target directly from the caller-supplied paths. option(STF_WX_PREFER_MODULE_FIND "Bypass find_package(wxWidgets) and build the interface directly from wxWidgets_ROOT_DIR/wxWidgets_LIB_DIR. Required when the C++ wx must match the wxPython wheel's bundled wx (e.g. Phoenix 4.x ships wx 3.2)." OFF) if(NOT STF_BUILD_MODULE) add_library(stimfit::wx INTERFACE IMPORTED) set(_stf_wx_resolved FALSE) if(STF_WX_PREFER_MODULE_FIND) # Bypass find_package entirely to prevent vcpkg's cmake wrapper from # overriding wxWidgets_ROOT_DIR / wxWidgets_LIB_DIR with CACHE INTERNAL. if(NOT wxWidgets_ROOT_DIR) message(FATAL_ERROR "STF_WX_PREFER_MODULE_FIND=ON requires wxWidgets_ROOT_DIR " "(e.g. C:/path/to/Phoenix/ext/wxWidgets)") endif() if(NOT wxWidgets_LIB_DIR) message(FATAL_ERROR "STF_WX_PREFER_MODULE_FIND=ON requires wxWidgets_LIB_DIR " "(e.g. C:/path/to/Phoenix/ext/wxWidgets/lib/vc140_x64_dll)") endif() # vcpkg installs all package headers into a single flat include/ directory. # Other vcpkg packages (HDF5, FFTW3, ...) add that directory to the include # path as transitive interface includes from their imported targets. Because # transitive interface includes are appended after the target's own include # directories, we use include_directories(BEFORE ...) at directory scope to # ensure Phoenix wx 3.2.x headers appear before vcpkg's wx 3.3.x headers in # every target's compile command. include_directories(BEFORE "${wxWidgets_ROOT_DIR}/include" "${wxWidgets_LIB_DIR}/mswu" ) # Include dirs: root/include + lib-dir/mswu (MSVC unicode DLL setup.h) target_include_directories(stimfit::wx INTERFACE "${wxWidgets_ROOT_DIR}/include" "${wxWidgets_LIB_DIR}/mswu" ) # Locate import libs for the required components by glob so that the # version number embedded in the filename (e.g. 32u vs 33u) is agnostic. # Note: 'base' and 'net' live in the wxbase library; the GUI components # live in the wxmsw library. foreach(_stf_wx_comp IN ITEMS base core adv aui net) if(_stf_wx_comp STREQUAL "base") file(GLOB _stf_wx_lib LIST_DIRECTORIES false "${wxWidgets_LIB_DIR}/wxbase3*u.lib") elseif(_stf_wx_comp STREQUAL "net") file(GLOB _stf_wx_lib LIST_DIRECTORIES false "${wxWidgets_LIB_DIR}/wxbase3*u_net.lib") else() file(GLOB _stf_wx_lib LIST_DIRECTORIES false "${wxWidgets_LIB_DIR}/wxmsw3*u_${_stf_wx_comp}.lib") endif() if(NOT _stf_wx_lib) message(FATAL_ERROR "Could not find wx import lib for component '${_stf_wx_comp}' in " "${wxWidgets_LIB_DIR}. Verify wxWidgets_LIB_DIR is correct.") endif() list(APPEND _stf_wx_libs ${_stf_wx_lib}) unset(_stf_wx_lib) endforeach() target_link_libraries(stimfit::wx INTERFACE ${_stf_wx_libs}) unset(_stf_wx_libs) # Standard definitions for a unicode wxWidgets DLL build on Windows target_compile_definitions(stimfit::wx INTERFACE WXUSINGDLL _UNICODE UNICODE) set(_stf_wx_resolved TRUE) endif() # Prefer config packages (vcpkg) before legacy FindwxWidgets module. if(NOT _stf_wx_resolved) find_package(wxWidgets CONFIG QUIET) if(TARGET wx::base AND TARGET wx::core AND TARGET wx::adv AND TARGET wx::aui AND TARGET wx::net) target_link_libraries(stimfit::wx INTERFACE wx::base wx::core wx::adv wx::aui wx::net) set(_stf_wx_resolved TRUE) endif() endif() if(NOT _stf_wx_resolved) if(APPLE AND ( NOT DEFINED wxWidgets_CONFIG_EXECUTABLE OR "${wxWidgets_CONFIG_EXECUTABLE}" STREQUAL "" OR "${wxWidgets_CONFIG_EXECUTABLE}" MATCHES "-NOTFOUND$" )) stf_find_macos_wx_config(_stf_wx_config_candidate) if(_stf_wx_config_candidate) set(wxWidgets_CONFIG_EXECUTABLE "${_stf_wx_config_candidate}" CACHE FILEPATH "Path to wx-config executable" FORCE) endif() unset(_stf_wx_config_candidate) endif() find_package(wxWidgets MODULE REQUIRED COMPONENTS base core adv aui net) target_include_directories(stimfit::wx INTERFACE ${wxWidgets_INCLUDE_DIRS}) target_link_libraries(stimfit::wx INTERFACE ${wxWidgets_LIBRARIES}) target_compile_definitions(stimfit::wx INTERFACE ${wxWidgets_DEFINITIONS}) set(_stf_wx_resolved TRUE) endif() unset(_stf_wx_resolved) else() add_library(stimfit::wx INTERFACE IMPORTED) endif() if(STF_ENABLE_PYTHON) find_package(Python3 COMPONENTS Interpreter Development REQUIRED) add_library(stimfit::python INTERFACE IMPORTED) target_include_directories(stimfit::python INTERFACE ${Python3_INCLUDE_DIRS}) target_link_libraries(stimfit::python INTERFACE ${Python3_LIBRARIES}) stf_get_python_bootstrap(_stf_python_bootstrap) if(Python3_Interpreter_FOUND) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import sysconfig; print(sysconfig.get_paths()['platlib'])" OUTPUT_VARIABLE STF_PYTHON_PLATLIB OUTPUT_STRIP_TRAILING_WHITESPACE ) file(TO_CMAKE_PATH "${STF_PYTHON_PLATLIB}" STF_PYTHON_PLATLIB) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import sysconfig; print(sysconfig.get_paths()['purelib'])" OUTPUT_VARIABLE STF_PYTHON_PURELIB OUTPUT_STRIP_TRAILING_WHITESPACE ) file(TO_CMAKE_PATH "${STF_PYTHON_PURELIB}" STF_PYTHON_PURELIB) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import sysconfig; print(sysconfig.get_path('stdlib'))" OUTPUT_VARIABLE STF_PYTHON_STDLIB OUTPUT_STRIP_TRAILING_WHITESPACE ) file(TO_CMAKE_PATH "${STF_PYTHON_STDLIB}" STF_PYTHON_STDLIB) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import pathlib, sys; print((pathlib.Path(sys.base_prefix) / 'DLLs').as_posix())" OUTPUT_VARIABLE STF_PYTHON_DLLS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) file(TO_CMAKE_PATH "${STF_PYTHON_DLLS_DIR}" STF_PYTHON_DLLS_DIR) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import pathlib, sys; dll = pathlib.Path(sys.base_prefix) / ('python%d%d.dll' % (sys.version_info[0], sys.version_info[1])); print(dll.as_posix())" OUTPUT_VARIABLE STF_PYTHON_RUNTIME_DLL OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) file(TO_CMAKE_PATH "${STF_PYTHON_RUNTIME_DLL}" STF_PYTHON_RUNTIME_DLL) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import numpy; print(numpy.get_include())" OUTPUT_VARIABLE STF_NUMPY_INCLUDE OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) if(NOT STF_BUILD_MODULE) execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import wx, pathlib; print(pathlib.Path(wx.__file__).resolve().parent.as_posix())" OUTPUT_VARIABLE STF_WXPYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_VARIABLE _stf_wxpy_err RESULT_VARIABLE _stf_wxpy_status ) file(TO_CMAKE_PATH "${STF_WXPYTHON_DIR}" STF_WXPYTHON_DIR) if(NOT _stf_wxpy_status EQUAL 0) string(STRIP "${_stf_wxpy_err}" _stf_wxpy_err) message(FATAL_ERROR "Embedded Python shell requires wxPython to be importable from Python3_EXECUTABLE. ${_stf_wxpy_err}") endif() execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}from wx.py import shell" RESULT_VARIABLE _stf_legacy_shell_status ERROR_QUIET ) if(NOT _stf_legacy_shell_status EQUAL 0) message(WARNING "wx.py.shell is unavailable; the Legacy backend will not be fully functional at runtime.") endif() execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import IPython" RESULT_VARIABLE _stf_ipython_status ERROR_VARIABLE _stf_ipython_err ) if(NOT _stf_ipython_status EQUAL 0) string(STRIP "${_stf_ipython_err}" _stf_ipython_err) message(WARNING "IPython is unavailable; Stimfit will fall back to non-IPython backends at runtime. ${_stf_ipython_err}") endif() endif() if(STF_NUMPY_INCLUDE STREQUAL "") message(FATAL_ERROR "NumPy headers were not detected. Install numpy into the selected Python environment.") endif() message(STATUS "Stimfit Python shell backend: ${STF_PY_SHELL_BACKEND}") message(STATUS "Stimfit Python interpreter: ${Python3_EXECUTABLE}") message(STATUS "Stimfit Python platlib: ${STF_PYTHON_PLATLIB}") if(WIN32 AND NOT "${STF_WINDOWS_PYTHON_EXTRA_PATHS}" STREQUAL "") message(STATUS "Stimfit Python extra paths: ${STF_WINDOWS_PYTHON_EXTRA_PATHS}") endif() endif() find_package(SWIG QUIET) unset(_stf_python_bootstrap) endif() stimfit-0.17.1/cmake/StimfitMacOS.cmake000066400000000000000000000037261517235503400176600ustar00rootroot00000000000000include_guard(GLOBAL) if(APPLE) set(CMAKE_MACOSX_RPATH ON) set(CMAKE_INSTALL_NAME_DIR "@rpath") endif() function(stf_apply_macos_runtime_policy target_name) if(NOT APPLE) return() endif() if(NOT TARGET ${target_name}) message(FATAL_ERROR "stf_apply_macos_runtime_policy: target '${target_name}' does not exist") endif() get_target_property(_stf_target_type ${target_name} TYPE) if(NOT _stf_target_type) unset(_stf_target_type) return() endif() set(_stf_install_rpath "@loader_path") if(_stf_target_type STREQUAL "EXECUTABLE") get_target_property(_stf_is_macos_bundle ${target_name} MACOSX_BUNDLE) if(_stf_is_macos_bundle) list(APPEND _stf_install_rpath "@loader_path/../lib/stimfit") else() list(APPEND _stf_install_rpath "@loader_path/../lib/stimfit") endif() else() list(APPEND _stf_install_rpath "@loader_path/../lib/stimfit") endif() if(ARGN) foreach(_stf_extra_rpath IN LISTS ARGN) if(NOT "${_stf_extra_rpath}" STREQUAL "") list(APPEND _stf_install_rpath "${_stf_extra_rpath}") endif() endforeach() endif() list(REMOVE_DUPLICATES _stf_install_rpath) # On macOS, CMake otherwise emits install-time `install_name_tool -add_rpath` # commands for these targets. Re-running `cmake --install` against an existing # prefix then fails once the installed binary already carries the same LC_RPATH # entries. Building with the final install rpath avoids that extra install-time # mutation and makes installs idempotent. set_property(TARGET ${target_name} PROPERTY BUILD_WITH_INSTALL_RPATH ON) set_property(TARGET ${target_name} PROPERTY INSTALL_RPATH "${_stf_install_rpath}") if(_stf_target_type STREQUAL "SHARED_LIBRARY" OR _stf_target_type STREQUAL "MODULE_LIBRARY") set_property(TARGET ${target_name} PROPERTY INSTALL_NAME_DIR "@rpath") endif() unset(_stf_extra_rpath) unset(_stf_is_macos_bundle) unset(_stf_install_rpath) unset(_stf_target_type) endfunction() stimfit-0.17.1/cmake/StimfitMigration.cmake000066400000000000000000000015111517235503400206350ustar00rootroot00000000000000include_guard(GLOBAL) function(stf_print_configuration_summary) message(STATUS "") message(STATUS "Stimfit CMake migration configuration") message(STATUS " STF_BUILD_MODULE : ${STF_BUILD_MODULE}") message(STATUS " STF_MACOS_APP_BUNDLE: ${STF_MACOS_APP_BUNDLE}") message(STATUS " STF_ENABLE_PYTHON : ${STF_ENABLE_PYTHON}") message(STATUS " STF_PY_SHELL_BACKEND: ${STF_PY_SHELL_BACKEND}") message(STATUS " STF_ENABLE_PSLOPE : ${STF_ENABLE_PSLOPE}") message(STATUS " STF_ENABLE_AUI : ${STF_ENABLE_AUI}") message(STATUS " STF_BUILD_DEBIAN : ${STF_BUILD_DEBIAN}") message(STATUS " STF_WITH_BIOSIG : ${STF_WITH_BIOSIG}") message(STATUS " STF_BIOSIG_PROVIDER : ${STF_BIOSIG_PROVIDER}") message(STATUS " STF_BIOSIG_SELECTED : ${STF_BIOSIG_SELECTED_PROVIDER}") message(STATUS "") endfunction() stimfit-0.17.1/cmake/StimfitOptions.cmake000066400000000000000000000115071517235503400203450ustar00rootroot00000000000000include_guard(GLOBAL) option(STF_BUILD_MODULE "Build standalone Python module (like --enable-module)" OFF) option(STF_BUILD_TESTS "Build gtest-based stimfittest target" OFF) option(STF_BUILD_NUMERIC_TESTS "Build stfnum-based gtest suites in addition to minimal container tests" OFF) option(STF_ENABLE_PYTHON "Enable Python integration (like --enable-python)" ON) option(STF_MACOS_APP_BUNDLE "Build and install stimfit as a macOS .app bundle" OFF) set(STF_PY_SHELL_BACKEND "JUPYTER" CACHE STRING "Default embedded Python shell backend selection (MODERN, LEGACY, or JUPYTER)") set_property(CACHE STF_PY_SHELL_BACKEND PROPERTY STRINGS MODERN LEGACY JUPYTER) option(STF_WINDOWS_COPY_PYTHON_RUNTIME "Copy Python runtime DLL to install/bin on Windows" ON) option(STF_WINDOWS_COPY_PYTHON_STDLIB "Copy Python standard library to install/bin/Lib on Windows" ON) option(STF_WINDOWS_COPY_PYTHON_DLLS "Copy Python DLLs directory to install/bin/DLLs on Windows" ON) option(STF_WINDOWS_COPY_PYTHON_SITE_PACKAGES "Copy selected Python site-packages into install/stf-site-packages on Windows" ON) option(STF_WINDOWS_PYTHON_FULL_REFRESH "Force full per-file refresh/check for stdlib and stf-site-packages on install (slower, but picks up source changes)" OFF) set(STF_WINDOWS_PYTHON_SITE_PACKAGES "numpy;wx" CACHE STRING "Semicolon-separated Python packages copied to install/stf-site-packages on Windows") set(STF_WINDOWS_PYTHON_EXTRA_PATHS "" CACHE STRING "Semicolon-separated extra Python import paths (e.g. local Phoenix checkout root)") set(STF_WXPYTHON_INCLUDE_DIR "" CACHE PATH "Path containing wxPython/wxpy_api.h (e.g. /wx/include)") option(STF_PYTHON_PACKAGE_INSTALL "Install Python artifacts into a wheel-friendly package layout" OFF) option(STF_ENABLE_PSLOPE "Enable slope cursor measurements (like --enable-pslope)" OFF) option(STF_ENABLE_AUI "Enable experimental AUI doc/view mode (like --enable-aui)" OFF) option(STF_BUILD_DEBIAN "Enable Debian-oriented build flags/paths (like --enable-debian)" OFF) option(STF_WITH_BIOSIG "Enable BIOSIG support" ON) set(STF_BIOSIG_PROVIDER "AUTO" CACHE STRING "BIOSIG provider (AUTO, SYSTEM, SUBMODULE, or PATCHED_SUBMODULE)") set_property(CACHE STF_BIOSIG_PROVIDER PROPERTY STRINGS AUTO SYSTEM SUBMODULE PATCHED_SUBMODULE) if(APPLE) set(_stf_default_lapack_provider "ACCELERATE") else() set(_stf_default_lapack_provider "AUTO") endif() set(STF_LAPACK_PROVIDER "${_stf_default_lapack_provider}" CACHE STRING "LAPACK/BLAS provider (AUTO, ACCELERATE, OPENBLAS, or LEGACY)") set_property(CACHE STF_LAPACK_PROVIDER PROPERTY STRINGS AUTO ACCELERATE OPENBLAS LEGACY) unset(_stf_default_lapack_provider) set(STF_HDF5_PREFIX "" CACHE PATH "Optional HDF5 installation prefix (like --with-hdf5-prefix)") if(STF_BUILD_MODULE) set(STF_ENABLE_PYTHON ON CACHE BOOL "Enable Python integration (like --enable-python)" FORCE) endif() string(TOUPPER "${STF_PY_SHELL_BACKEND}" STF_PY_SHELL_BACKEND) if(NOT STF_PY_SHELL_BACKEND STREQUAL "MODERN" AND NOT STF_PY_SHELL_BACKEND STREQUAL "LEGACY" AND NOT STF_PY_SHELL_BACKEND STREQUAL "JUPYTER") message(FATAL_ERROR "STF_PY_SHELL_BACKEND must be MODERN, LEGACY, or JUPYTER") endif() string(TOUPPER "${STF_BIOSIG_PROVIDER}" STF_BIOSIG_PROVIDER) if(NOT STF_BIOSIG_PROVIDER STREQUAL "AUTO" AND NOT STF_BIOSIG_PROVIDER STREQUAL "SYSTEM" AND NOT STF_BIOSIG_PROVIDER STREQUAL "SUBMODULE" AND NOT STF_BIOSIG_PROVIDER STREQUAL "PATCHED_SUBMODULE") message(FATAL_ERROR "STF_BIOSIG_PROVIDER must be AUTO, SYSTEM, SUBMODULE, or PATCHED_SUBMODULE") endif() string(TOUPPER "${STF_LAPACK_PROVIDER}" STF_LAPACK_PROVIDER) if(NOT STF_LAPACK_PROVIDER STREQUAL "AUTO" AND NOT STF_LAPACK_PROVIDER STREQUAL "ACCELERATE" AND NOT STF_LAPACK_PROVIDER STREQUAL "OPENBLAS" AND NOT STF_LAPACK_PROVIDER STREQUAL "LEGACY") message(FATAL_ERROR "STF_LAPACK_PROVIDER must be AUTO, ACCELERATE, OPENBLAS, or LEGACY") endif() if(DEFINED STF_USE_BIOSIG_SUBMODULE) set(_STF_USE_BIOSIG_SUBMODULE_VALUE "${STF_USE_BIOSIG_SUBMODULE}") unset(STF_USE_BIOSIG_SUBMODULE CACHE) unset(STF_USE_BIOSIG_SUBMODULE) if(_STF_USE_BIOSIG_SUBMODULE_VALUE) message(DEPRECATION "STF_USE_BIOSIG_SUBMODULE is deprecated; use STF_BIOSIG_PROVIDER=PATCHED_SUBMODULE on Windows or SUBMODULE elsewhere instead") if(WIN32) set(STF_BIOSIG_PROVIDER "PATCHED_SUBMODULE" CACHE STRING "BIOSIG provider (AUTO, SYSTEM, SUBMODULE, or PATCHED_SUBMODULE)" FORCE) else() set(STF_BIOSIG_PROVIDER "SUBMODULE" CACHE STRING "BIOSIG provider (AUTO, SYSTEM, SUBMODULE, or PATCHED_SUBMODULE)" FORCE) endif() else() message(DEPRECATION "STF_USE_BIOSIG_SUBMODULE is deprecated; use STF_BIOSIG_PROVIDER=SYSTEM instead") if(STF_BIOSIG_PROVIDER STREQUAL "AUTO") set(STF_BIOSIG_PROVIDER "SYSTEM" CACHE STRING "BIOSIG provider (AUTO, SYSTEM, SUBMODULE, or PATCHED_SUBMODULE)" FORCE) endif() endif() unset(_STF_USE_BIOSIG_SUBMODULE_VALUE) endif() stimfit-0.17.1/cmake/StimfitPresetHelpers.sh000066400000000000000000000017551517235503400210350ustar00rootroot00000000000000#!/bin/bash stf_select_presets() { local with_python="$1" local python_configure_preset="$2" local no_python_configure_preset="$3" local python_build_preset="${4:-}" local no_python_build_preset="${5:-}" if [[ "$with_python" -eq 1 ]]; then STF_CONFIGURE_PRESET="$python_configure_preset" STF_BUILD_PRESET="$python_build_preset" else STF_CONFIGURE_PRESET="$no_python_configure_preset" STF_BUILD_PRESET="$no_python_build_preset" fi } stf_print_preset_selection() { local build_dir="$1" echo "==> Configure preset: ${STF_CONFIGURE_PRESET}" if [[ -n "${STF_BUILD_PRESET:-}" ]]; then echo "==> Build preset: ${STF_BUILD_PRESET}" fi echo "==> Build directory: ${build_dir}" } stf_build_with_optional_preset() { local build_dir="$1" local default_build_dir="$2" local build_preset="${3:-}" if [[ -n "$build_preset" && "$build_dir" == "$default_build_dir" ]]; then cmake --build --preset "$build_preset" else cmake --build "$build_dir" fi } stimfit-0.17.1/cmake/StimfitToolchain.cmake000066400000000000000000000114671517235503400206370ustar00rootroot00000000000000include_guard(GLOBAL) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_compile_definitions($<$:_STFDEBUG>) if(STF_ENABLE_PYTHON) add_compile_definitions(WITH_PYTHON) endif() if(STF_ENABLE_PYTHON) if(STF_PY_SHELL_BACKEND STREQUAL "LEGACY") add_compile_definitions(STF_PY_SHELL_BACKEND_LEGACY) elseif(STF_PY_SHELL_BACKEND STREQUAL "JUPYTER") add_compile_definitions(STF_PY_SHELL_BACKEND_JUPYTER) else() add_compile_definitions(STF_PY_SHELL_BACKEND_MODERN) endif() endif() if(STF_ENABLE_PSLOPE) add_compile_definitions(WITH_PSLOPE) endif() if(STF_ENABLE_AUI) add_compile_definitions(WITH_AUIDOCVIEW) endif() if(STF_BUILD_MODULE) add_compile_definitions(MODULE_ONLY) endif() if(STF_WITH_BIOSIG) add_compile_definitions(WITH_BIOSIG) endif() add_compile_definitions(H5_USE_16_API) if(HAVE_STRPTIME_H) add_compile_definitions(HAVE_STRPTIME_H=1) endif() add_compile_definitions(PACKAGE_VERSION=\"${PROJECT_VERSION}\") add_library(stimfit_config INTERFACE) target_include_directories(stimfit_config INTERFACE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR} ) target_compile_options(stimfit_config INTERFACE $<$,$>:/W4 /Zc:__cplusplus> $<$,$>>:-Wall> $<$,$>>:-O0 -g3> ) if(STF_BUILD_DEBIAN) if(DEFINED ENV{CPPFLAGS}) separate_arguments(_debian_cppflags NATIVE_COMMAND "$ENV{CPPFLAGS}") target_compile_options(stimfit_config INTERFACE ${_debian_cppflags}) endif() if(DEFINED ENV{CFLAGS}) separate_arguments(_debian_cflags NATIVE_COMMAND "$ENV{CFLAGS}") target_compile_options(stimfit_config INTERFACE ${_debian_cflags}) endif() if(DEFINED ENV{CXXFLAGS}) separate_arguments(_debian_cxxflags NATIVE_COMMAND "$ENV{CXXFLAGS}") target_compile_options(stimfit_config INTERFACE ${_debian_cxxflags}) endif() if(DEFINED ENV{LDFLAGS}) separate_arguments(_debian_ldflags NATIVE_COMMAND "$ENV{LDFLAGS}") target_link_options(stimfit_config INTERFACE ${_debian_ldflags}) endif() endif() if(STF_ENABLE_PYTHON AND NOT STF_BUILD_MODULE AND TARGET stimfit::python AND Python3_Interpreter_FOUND) stf_get_python_bootstrap(_stf_python_bootstrap) set(_stf_wxpython_include_dir "${STF_WXPYTHON_INCLUDE_DIR}") if(_stf_wxpython_include_dir) if(NOT EXISTS "${_stf_wxpython_include_dir}/wxPython/wxpy_api.h") message(FATAL_ERROR "STF_WXPYTHON_INCLUDE_DIR='${_stf_wxpython_include_dir}' does not contain wxPython/wxpy_api.h") endif() else() execute_process( COMMAND ${Python3_EXECUTABLE} -c "${_stf_python_bootstrap}import os, wx; print(os.path.join(os.path.dirname(wx.__spec__.origin), 'include'))" OUTPUT_VARIABLE STF_WXPYTHON_INCLUDE_FROM_WX OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) file(TO_CMAKE_PATH "${STF_WXPYTHON_INCLUDE_FROM_WX}" STF_WXPYTHON_INCLUDE_FROM_WX) set(_stf_wxpython_include_hints "") if(STF_WXPYTHON_INCLUDE_FROM_WX) list(APPEND _stf_wxpython_include_hints "${STF_WXPYTHON_INCLUDE_FROM_WX}") endif() if(STF_WINDOWS_PYTHON_EXTRA_PATHS) list(APPEND _stf_wxpython_include_hints ${STF_WINDOWS_PYTHON_EXTRA_PATHS}) endif() if(DEFINED STF_WXPYTHON_DIR AND NOT "${STF_WXPYTHON_DIR}" STREQUAL "") list(APPEND _stf_wxpython_include_hints "${STF_WXPYTHON_DIR}") endif() if(DEFINED STF_PYTHON_PLATLIB AND NOT "${STF_PYTHON_PLATLIB}" STREQUAL "") list(APPEND _stf_wxpython_include_hints "${STF_PYTHON_PLATLIB}") endif() if(DEFINED STF_PYTHON_PURELIB AND NOT "${STF_PYTHON_PURELIB}" STREQUAL "") list(APPEND _stf_wxpython_include_hints "${STF_PYTHON_PURELIB}") endif() foreach(_stf_wx_hint IN LISTS _stf_wxpython_include_hints) if(EXISTS "${_stf_wx_hint}/wxPython/wxpy_api.h") set(_stf_wxpython_include_dir "${_stf_wx_hint}") break() endif() endforeach() if(NOT _stf_wxpython_include_dir) find_path(_stf_wxpython_include_dir NAMES wxPython/wxpy_api.h HINTS ${_stf_wxpython_include_hints} PATH_SUFFIXES wx/include include ) endif() endif() if(_stf_wxpython_include_dir) set(STF_WXPYTHON_INCLUDE_DIR "${_stf_wxpython_include_dir}" CACHE PATH "Path containing wxPython/wxpy_api.h (e.g. /wx/include)" FORCE) target_include_directories(stimfit::python INTERFACE "${STF_WXPYTHON_INCLUDE_DIR}") else() message(FATAL_ERROR "Could not locate wxPython/wxpy_api.h. Set STF_WXPYTHON_INCLUDE_DIR (for Phoenix, typically /wx/include).") endif() unset(_stf_wxpython_include_dir) unset(_stf_wxpython_include_hints) unset(_stf_wx_hint) unset(STF_WXPYTHON_INCLUDE_FROM_WX) unset(_stf_python_bootstrap) endif() stimfit-0.17.1/cmake/build-stimfit-with-patched-biosig.ps1000066400000000000000000000020211517235503400233710ustar00rootroot00000000000000param( [switch]$SkipPrepare ) $ErrorActionPreference = "Stop" function Run-Step { param( [Parameter(Mandatory=$true)][string]$Name, [Parameter(Mandatory=$true)][string[]]$Command ) Write-Host "==> $Name" -ForegroundColor Cyan Write-Host " $($Command -join ' ')" & $Command[0] $Command[1..($Command.Length - 1)] if ($LASTEXITCODE -ne 0) { throw "Step failed ($Name) with exit code $LASTEXITCODE" } } $repoRoot = Resolve-Path (Join-Path $PSScriptRoot "..") Push-Location $repoRoot try { if (-not $SkipPrepare) { Run-Step -Name "Prepare patched biosig" -Command @("cmake", "-P", "cmake/PrepareBiosigMSVC.cmake") } Run-Step -Name "Configure Stimfit preset" -Command @("cmake", "--preset", "vs2022-vcpkg-wx-hdf5-biosig-patched") Run-Step -Name "Build Stimfit preset" -Command @("cmake", "--build", "--preset", "vs2022-release-stimfit-biosig-patched") Write-Host "All steps completed successfully." -ForegroundColor Green } finally { Pop-Location } stimfit-0.17.1/cmake/patches/000077500000000000000000000000001517235503400157735ustar00rootroot00000000000000stimfit-0.17.1/cmake/patches/biosig-msvc/000077500000000000000000000000001517235503400202155ustar00rootroot00000000000000stimfit-0.17.1/cmake/patches/biosig-msvc/0001-b4c-msvc-enable-Visual-Studio-2022-builds.patch000066400000000000000000001757371517235503400310530ustar00rootroot00000000000000From e028ef47a273cf2f062b4dfdfaa2994804cc485c Mon Sep 17 00:00:00 2001 From: Christoph Schmidt-Hieber Date: Tue, 10 Mar 2026 16:47:43 +0100 Subject: [PATCH] [b4c][msvc] enable Visual Studio 2022 builds Make biosig4c++ build and link under MSVC for both static and shared targets. - Rework generated-file and AWK handling in CMake for VS generators - Add Windows-specific runtime/link fixes (including ws2_32 and extern path handling) - Replace GCC-only constructs used by MSVC-unfriendly code paths (typeof, attributes, pointer arithmetic) - Add win32 getline/getdelim/getlogin compatibility updates - Include MSVC fallback stubs for optional readers to unblock shared linking - Apply biosig2 API portability fixes required by shared builds --- biosig4c++/CMakeLists.txt | 117 +++++++++++++---- biosig4c++/XMLParser/tinyxml.cpp | 4 + biosig4c++/biosig-dev.h | 18 +++ biosig4c++/biosig.c | 183 ++++++++++++++++++--------- biosig4c++/biosig2.c | 48 +++---- biosig4c++/igor/IgorBin.h | 8 ++ biosig4c++/physicalunits.c | 10 +- biosig4c++/t210/scp-decode.cpp | 12 ++ biosig4c++/t210/sopen_abf_read.c | 2 +- biosig4c++/t210/sopen_acqbiopac.c | 4 + biosig4c++/t210/sopen_alpha_read.c | 6 +- biosig4c++/t210/sopen_axg_read.c | 14 +- biosig4c++/t210/sopen_cfs_read.c | 20 +-- biosig4c++/t210/sopen_heka_read.c | 6 + biosig4c++/t210/sopen_igor.c | 25 ++-- biosig4c++/t210/sopen_msvc_stubs.c | 46 +++++++ biosig4c++/t210/sopen_nicolet.c | 4 + biosig4c++/t210/sopen_rhd2000_read.c | 4 + biosig4c++/t210/sopen_scp_read.c | 26 +++- biosig4c++/t220/sopen_scp_write.c | 7 +- biosig4c++/t230/sopen_hl7aecg.cpp | 9 +- biosig4c++/win32/getdelim.c | 5 + biosig4c++/win32/getline.c | 7 + biosig4c++/win32/getlogin.c | 4 +- 24 files changed, 439 insertions(+), 150 deletions(-) create mode 100644 biosig4c++/t210/sopen_msvc_stubs.c diff --git a/biosig4c++/CMakeLists.txt b/biosig4c++/CMakeLists.txt index 2dcba9f7..48f4c38b 100644 --- a/biosig4c++/CMakeLists.txt +++ b/biosig4c++/CMakeLists.txt @@ -9,26 +9,77 @@ set (libbiosig_VERSION_MAJOR 1) set (libbiosig_VERSION_MINOR 8) set (libbiosig_VERSION_PATCH 4) -find_program (GAWK NAMES gawk) +find_program (GAWK + NAMES gawk awk + PATHS + "C:/Program Files/Git/usr/bin" + "C:/msys64/usr/bin" + "C:/msys32/usr/bin" + REQUIRED +) + +set (_eventcodes_i ${CMAKE_CURRENT_BINARY_DIR}/eventcodes.i) +set (_eventcodegroups_i ${CMAKE_CURRENT_BINARY_DIR}/eventcodegroups.i) +set (_units_i ${CMAKE_CURRENT_BINARY_DIR}/units.i) +set (_annexb_i ${CMAKE_CURRENT_BINARY_DIR}/11073-10102-AnnexB.i) + +set (_extern_dir ${CMAKE_CURRENT_SOURCE_DIR}/extern) +if (NOT IS_DIRECTORY ${_extern_dir}) + file (READ ${_extern_dir} _extern_relpath) + string (STRIP ${_extern_relpath} _extern_relpath) + set (_extern_dir ${CMAKE_CURRENT_SOURCE_DIR}/${_extern_relpath}) +endif () + +set (_awk_to_file_script ${CMAKE_CURRENT_BINARY_DIR}/run_awk_to_file.cmake) +file (WRITE ${_awk_to_file_script} +"if (NOT DEFINED GAWK OR NOT DEFINED AWK_SCRIPT OR NOT DEFINED AWK_INPUT OR NOT DEFINED AWK_OUTPUT)\n" +" message (FATAL_ERROR \"Missing awk command arguments\")\n" +"endif ()\n" +"execute_process (\n" +" COMMAND \"\${GAWK}\" -f \"\${AWK_SCRIPT}\" \"\${AWK_INPUT}\"\n" +" OUTPUT_FILE \"\${AWK_OUTPUT}\"\n" +" RESULT_VARIABLE _awk_result\n" +")\n" +"if (NOT \${_awk_result} EQUAL 0)\n" +" message (FATAL_ERROR \"awk failed with exit code \${_awk_result}\")\n" +"endif ()\n" +) + +add_custom_command ( + OUTPUT ${_eventcodes_i} ${_eventcodegroups_i} + COMMAND ${GAWK} -f ${CMAKE_CURRENT_SOURCE_DIR}/eventcodes.awk ${_extern_dir}/eventcodes.txt + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/eventcodes.awk ${_extern_dir}/eventcodes.txt +) -add_custom_target (eventcodes - COMMAND ${GAWK} -f eventcodes.awk extern/eventcodes.txt - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - DEPENDS eventcodes.awk extern/eventcodes.txt +add_custom_command ( + OUTPUT ${_units_i} + COMMAND ${CMAKE_COMMAND} + "-DGAWK=${GAWK}" + "-DAWK_SCRIPT=${CMAKE_CURRENT_SOURCE_DIR}/units.awk" + "-DAWK_INPUT=${_extern_dir}/units.csv" + "-DAWK_OUTPUT=${_units_i}" + -P ${_awk_to_file_script} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/units.awk ${_extern_dir}/units.csv ${_awk_to_file_script} ) -add_custom_target (units - COMMAND ${GAWK} -f units.awk extern/units.csv > "units.i" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - DEPENDS units.awk extern/units.csv +add_custom_command ( + OUTPUT ${_annexb_i} + COMMAND ${CMAKE_COMMAND} + "-DGAWK=${GAWK}" + "-DAWK_SCRIPT=${CMAKE_CURRENT_SOURCE_DIR}/annotatedECG.awk" + "-DAWK_INPUT=${_extern_dir}/11073-10102-AnnexB.txt" + "-DAWK_OUTPUT=${_annexb_i}" + -P ${_awk_to_file_script} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/annotatedECG.awk ${_extern_dir}/11073-10102-AnnexB.txt ${_awk_to_file_script} ) -add_custom_target (annexb - COMMAND ${GAWK} -f annotatedECG.awk extern/11073-10102-AnnexB.txt > "11073-10102-AnnexB.i" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - DEPENDS annotatedECG.awk extern/11073-10102-AnnexB.txt +add_custom_target (biosig_generated + DEPENDS ${_eventcodes_i} ${_eventcodegroups_i} ${_units_i} ${_annexb_i} ) +include_directories (${CMAKE_CURRENT_BINARY_DIR}) + set (headers t210/abfheadr.h XMLParser/tinyxml.h @@ -70,6 +121,10 @@ if (WIN32) ) endif () +if (MSVC) + list (APPEND sources t210/sopen_msvc_stubs.c) +endif () + if (APPLE) list (APPEND sources win32/getdelim.c @@ -119,20 +174,30 @@ if (APPLE) ) endif () -add_dependencies (biosigstatic eventcodes units annexb) -add_dependencies (biosigshared eventcodes units annexb) -add_dependencies (biosig2static eventcodes units annexb) -add_dependencies (biosig2shared eventcodes units annexb) +if (WIN32) + set_target_properties (biosigshared biosig2shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) + target_link_libraries (biosigstatic ws2_32) + target_link_libraries (biosigshared ws2_32) + target_link_libraries (biosig2static ws2_32) + target_link_libraries (biosig2shared ws2_32) +endif () + +add_dependencies (biosigstatic biosig_generated) +add_dependencies (biosigshared biosig_generated) +add_dependencies (biosig2static biosig_generated) +add_dependencies (biosig2shared biosig_generated) -FIND_LIBRARY( ICONV_LIBRARY NAMES iconv ) +FIND_LIBRARY( ICONV_LIBRARY NAMES iconv libiconv ) MARK_AS_ADVANCED( ICONV_LIBRARY ) -target_link_libraries( biosigstatic ${ICONV_LIBRARY} ) -target_link_libraries( biosigshared ${ICONV_LIBRARY} ) -target_link_libraries( biosig2static ${ICONV_LIBRARY} ) -target_link_libraries( biosig2shared ${ICONV_LIBRARY} ) +if (ICONV_LIBRARY) + target_link_libraries( biosigstatic ${ICONV_LIBRARY} ) + target_link_libraries( biosigshared ${ICONV_LIBRARY} ) + target_link_libraries( biosig2static ${ICONV_LIBRARY} ) + target_link_libraries( biosig2shared ${ICONV_LIBRARY} ) +endif () if (USE_ZLIB) - add_definitions (-D=WITH_ZLIB) + add_definitions (-DWITH_ZLIB) find_package( ZLIB REQUIRED ) if ( ZLIB_FOUND ) include_directories( ${ZLIB_INCLUDE_DIRS} ) @@ -144,7 +209,7 @@ if (USE_ZLIB) endif () if (USE_SUITESPARSE) - add_definitions (-D=WITH_CHOLMOD) + add_definitions (-DWITH_CHOLMOD) FIND_LIBRARY( CHOLMOD_LIBRARY NAMES cholmod ) MARK_AS_ADVANCED( CHOLMOD_LIBRARY ) target_link_libraries( biosigstatic ${CHOLMOD_LIBRARY} ) @@ -153,7 +218,9 @@ if (USE_SUITESPARSE) target_link_libraries( biosig2shared ${CHOLMOD_LIBRARY} ) endif () -add_definitions (-D=WITHOUT_NETWORK) +if (MSVC) + add_definitions (-DWITHOUT_NETWORK) +endif () install (TARGETS biosigstatic DESTINATION lib) install (TARGETS biosigshared DESTINATION lib) diff --git a/biosig4c++/XMLParser/tinyxml.cpp b/biosig4c++/XMLParser/tinyxml.cpp index 86672687..f79a0aa1 100644 --- a/biosig4c++/XMLParser/tinyxml.cpp +++ b/biosig4c++/XMLParser/tinyxml.cpp @@ -38,7 +38,11 @@ add support for zlib-compressed (gzipped) XML data */ #include +#if defined(__has_include) +#if __has_include() #include +#endif +#endif #ifdef TIXML_USE_STL #include diff --git a/biosig4c++/biosig-dev.h b/biosig4c++/biosig-dev.h index d96e17d9..444e6941 100644 --- a/biosig4c++/biosig-dev.h +++ b/biosig4c++/biosig-dev.h @@ -40,6 +40,18 @@ extern "C" { #endif +#if defined(_WIN32) && !defined(__WIN32__) + #define __WIN32__ 1 +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1600) + #include + #ifndef _SSIZE_T_DEFINED + typedef SSIZE_T ssize_t; + #define _SSIZE_T_DEFINED + #endif +#endif + #ifdef NDEBUG #define VERBOSE_LEVEL 0 // turn off debugging information, but its only used without NDEBUG #else @@ -135,6 +147,12 @@ char *getlogin (void); #include "gdftime.h" +#ifndef __GNUC__ + #ifndef __attribute__ + #define __attribute__(x) + #endif +#endif + /* * pack structures to fulfil following requirements: * (1) Matlab v7.3+ requires 8 byte alignment diff --git a/biosig4c++/biosig.c b/biosig4c++/biosig.c index 7d34feae..e4b1f42d 100644 --- a/biosig4c++/biosig.c +++ b/biosig4c++/biosig.c @@ -83,10 +83,32 @@ int __cdecl stat(const char *_Filename,struct stat *_Stat); # include #endif +#ifndef __GNUC__ +#ifndef __attribute__ +#define __attribute__(x) +#endif +#endif + +#ifdef _WIN32 +#include +#include +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#define timezone _timezone +#define __builtin_bswap16 _byteswap_ushort +#define __builtin_bswap32 _byteswap_ulong +#define __builtin_bswap64 _byteswap_uint64 +#define _builtin_bswap64 _byteswap_uint64 +#define strtok_r strtok_s +#define alloca _alloca +#endif + int VERBOSE_LEVEL __attribute__ ((visibility ("default") )) = 0; // this variable is always available, but only used without NDEBUG #include "biosig.h" +#ifndef WITHOUT_NETWORK #include "biosig-network.h" +#endif #ifdef _WIN32 @@ -628,6 +650,24 @@ ssize_t iftell(HDRTYPE* hdr) { } int ifsetpos(HDRTYPE* hdr, size_t *pos) { +#ifdef _WIN32 +#ifdef ZLIB_H + if (hdr->FILE.COMPRESSION) { + gzseek(hdr->FILE.gzFID,*pos,SEEK_SET); + size_t pos1 = *pos; + *pos = gztell(hdr->FILE.gzFID); + return(*pos - pos1); + } + else +#endif + { + int c = _fseeki64(hdr->FILE.FID, (__int64)(*pos), SEEK_SET); + if (c == 0) { + *pos = (size_t)_ftelli64(hdr->FILE.FID); + } + return c; + } +#else #if __gnu_linux__ // gnu linux on sparc needs this fpos_t p; @@ -660,9 +700,27 @@ int ifsetpos(HDRTYPE* hdr, size_t *pos) { #endif return(c); } +#endif } int ifgetpos(HDRTYPE* hdr, size_t *pos) { +#ifdef _WIN32 +#ifdef ZLIB_H + if (hdr->FILE.COMPRESSION) { + z_off_t p = gztell(hdr->FILE.gzFID); + if (p<0) return(-1); + *pos = (size_t)p; + return(0); + } + else +#endif + { + __int64 p = _ftelli64(hdr->FILE.FID); + if (p < 0) return(-1); + *pos = (size_t)p; + return(0); + } +#else #ifdef ZLIB_H if (hdr->FILE.COMPRESSION) { z_off_t p = gztell(hdr->FILE.gzFID); @@ -686,6 +744,7 @@ int ifgetpos(HDRTYPE* hdr, size_t *pos) { #endif return(c); } +#endif } int ifeof(HDRTYPE* hdr) { @@ -823,12 +882,12 @@ void convert2to4_eventtable(HDRTYPE *hdr) { sort_eventtable(hdr); if (hdr->EVENT.DUR == NULL) - hdr->EVENT.DUR = (typeof(hdr->EVENT.DUR)) calloc(N,sizeof(*hdr->EVENT.DUR)); + hdr->EVENT.DUR = calloc(N,sizeof(*hdr->EVENT.DUR)); if (hdr->EVENT.CHN == NULL) - hdr->EVENT.CHN = (typeof(hdr->EVENT.CHN)) calloc(N,sizeof(*hdr->EVENT.CHN)); + hdr->EVENT.CHN = calloc(N,sizeof(*hdr->EVENT.CHN)); for (k1=0; k1EVENT.TYP) typ = hdr->EVENT.TYP[k1]; + uint16_t typ = hdr->EVENT.TYP[k1]; if ((typ < 0x8000) && (typ>0) && !hdr->EVENT.DUR[k1]) for (k2 = k1+1; k2EVENT.TYP[k2]) { @@ -863,8 +922,8 @@ void convert4to2_eventtable(HDRTYPE *hdr) { for (k1=0; k1EVENT.CHN[k1]) return; - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP,2*N*sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS,2*N*sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP,2*N*sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS,2*N*sizeof(*hdr->EVENT.POS)); #if (BIOSIG_VERSION >= 10500) hdr->EVENT.TimeStamp = (gdf_time*) realloc(hdr->EVENT.TimeStamp,2*N*sizeof(gdf_time)); #endif @@ -971,7 +1030,7 @@ void FreeTextEvent(HDRTYPE* hdr,size_t N_EVENT, const char* annotation) { int flag; // static int LengthCodeDesc = 0; if (hdr->EVENT.CodeDesc == NULL) { - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0] = ""; // typ==0, is always empty hdr->EVENT.LenCodeDesc = 1; } @@ -1093,7 +1152,7 @@ double dur2val(uint32_t DUR, uint16_t gdftyp) { the header of the time channel is in hdr->CHANNEL[getTimeChannelNumber(hdr)-1] ------------------------------------------------------------------------*/ int getTimeChannelNumber(HDRTYPE* hdr) { - typeof(hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) if (hdr->CHANNEL[k].OnOff==2) @@ -2333,7 +2392,7 @@ void struct2gdfbin(HDRTYPE *hdr) uint32_t Dur[2]; // NS number of channels selected for writing - typeof(hdr->NS) NS = 0; + uint16_t NS = 0; for (k=0; kNS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL+k; if (hc->OnOff) NS++; @@ -2633,7 +2692,7 @@ void struct2gdfbin(HDRTYPE *hdr) this requires checking the arguments in the fields of the struct HDR.CHANNEL and filling in the bytes in HDR.Header2. */ - typeof(k) k2=0; + uint16_t k2=0; for (k=0; kNS; k++) if (hdr->CHANNEL[k].OnOff) { @@ -3147,7 +3206,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"#%2i: <%s> %i %i\n",k,hc->Label,(int)len,(i if (VERBOSE_LEVEL>6) fprintf(stdout,"user-specific events defined\n"); hdr->AS.auxBUF = (uint8_t*) realloc(hdr->AS.auxBUF,len); memcpy(hdr->AS.auxBUF, Header2+pos+4, len); - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0] = ""; // typ==0, is always empty hdr->EVENT.LenCodeDesc = 1; k = 1; @@ -4063,7 +4122,7 @@ else if (!strncmp(MODE,"r",1)) { return(hdr); } - typeof(hdr->NS) StatusChannel = 0; + uint16_t StatusChannel = 0; int annotStartBi=-1; int annotEndBi=-1; int annotNumBytesPerBlock=0; @@ -5113,13 +5172,13 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"EDF+ event\n\ts1:\t<%s>\n\ts2:\t<%s>\n\ts3: if (i>0xffff) fprintf(stdout,"Warning: Type %i of event %i does not fit in 16bit\n",i,hdr->EVENT.N); else - hdr->EVENT.TYP[hdr->EVENT.N] = (typeof(hdr->EVENT.TYP[0]))i; + hdr->EVENT.TYP[hdr->EVENT.N] = (uint16_t)i; double d; val = strchr(val,'\t')+1; sscanf(val,"%lf",&d); - hdr->EVENT.POS[hdr->EVENT.N] = (typeof(*hdr->EVENT.POS))round(d*hdr->EVENT.SampleRate); // 0-based indexing + hdr->EVENT.POS[hdr->EVENT.N] = (uint32_t)round(d*hdr->EVENT.SampleRate); // 0-based indexing #if (BIOSIG_VERSION >= 10500) hdr->EVENT.TimeStamp[hdr->EVENT.N] = 0; #endif @@ -5127,7 +5186,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"EDF+ event\n\ts1:\t<%s>\n\ts2:\t<%s>\n\ts3: val = strchr(val,'\t')+1; if (val[0]!='\t') { sscanf(val,"%lf",&d); - hdr->EVENT.DUR[hdr->EVENT.N] = (typeof(*hdr->EVENT.POS))round(d*hdr->EVENT.SampleRate); + hdr->EVENT.DUR[hdr->EVENT.N] = (uint32_t)round(d*hdr->EVENT.SampleRate); } else hdr->EVENT.DUR[hdr->EVENT.N] = 0; @@ -5167,7 +5226,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"EDF+ event\n\ts1:\t<%s>\n\ts2:\t<%s>\n\ts3: biosigERROR(hdr, B4C_FORMAT_UNKNOWN, "not a BCI2000 format"); else { /* read whole header */ - hdr->HeadLen = (typeof(hdr->HeadLen)) strtod(ptr+10,&ptr); + hdr->HeadLen = (uint32_t) strtod(ptr+10,&ptr); if (count <= hdr->HeadLen) { hdr->AS.Header = (uint8_t*)realloc(hdr->AS.Header, hdr->HeadLen+1); count += ifread(hdr->AS.Header+count,1,hdr->HeadLen-count,hdr); @@ -5185,7 +5244,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"EDF+ event\n\ts1:\t<%s>\n\ts2:\t<%s>\n\ts3: if (ptr==NULL) biosigERROR(hdr, B4C_FORMAT_UNKNOWN, "not a BCI2000 format"); else - hdr->NS = (typeof(hdr->NS)) strtod(ptr+9,&ptr); + hdr->NS = (uint16_t) strtod(ptr+9,&ptr); /* decode length of state vector */ ptr = strstr(t1,"StatevectorLen="); @@ -6934,7 +6993,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ return(hdr); } - typeof(hdr->NS) k; + uint16_t k; for (k = 0; k < hdr->NS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL + k; hc->GDFTYP = 3; // int16 @@ -7063,8 +7122,8 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ sscanf((char*)(h3+5),"%02u%02u%02u",&tm_time.tm_hour,&tm_time.tm_min,&tm_time.tm_sec); } - typeof(hdr->NS) NS = h3[38]; - typeof(hdr->SampleRate) SampleRate = leu16p(h3+26) & 0x3fff; + uint16_t NS = h3[38]; + double SampleRate = leu16p(h3+26) & 0x3fff; nrec_t NRec = (nrec_t)(leu32p(h3+28) * SampleRate * 0.1); size_t HeadLen = pos2 + 39 + 10*NS; @@ -7367,7 +7426,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ /* read event code description */ hdr->AS.auxBUF = (uint8_t*) realloc(hdr->AS.auxBUF,5*NEC); - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0] = ""; // typ==0, is always empty hdr->EVENT.LenCodeDesc = NEC+1; for (k=0; k < NEC; k++) { @@ -7425,7 +7484,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ size_t skip = hdr->AS.bpb - NEC * sz; ifseek(hdr, hdr->HeadLen + skip, SEEK_SET); - typeof(NEC) k1; + uint16_t k1; nrec_t k; for (k=0; (k < hdr->NRec*hdr->SPR) && !ifeof(hdr); k++) { ifread(buf, sz, NEC, hdr); @@ -7771,7 +7830,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ } if (fid != NULL) { size_t N_EVENTS = 0; - const int sz = 69; + enum { sz = 69 }; char buf[sz+1]; hdr->EVENT.SampleRate = hdr->SampleRate; while (!feof(fid)) { @@ -8065,7 +8124,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ if (hdr->EVENT.LenCodeDesc==0) { // allocate memory hdr->EVENT.LenCodeDesc = 257; - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0] = ""; // typ==0, is always empty for (k=0; k<=256; k++) hdr->EVENT.CodeDesc[k] = NULL; @@ -8503,11 +8562,11 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"biosig/%s (line %d): #%d label <%s>\n", _ if (flagANN) { hdr->NRec=0; hdr->EVENT.N = (hdr->FILE.size - hdr->HeadLen)/4; - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP, hdr->EVENT.N * sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS, hdr->EVENT.N * sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP, hdr->EVENT.N * sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS, hdr->EVENT.N * sizeof(*hdr->EVENT.POS)); /* define user specified events according to ECG Annotation format of http://thew-project.org/THEWFileFormat.htm */ - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,10*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,10*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0]=""; hdr->EVENT.CodeDesc[1]="Normal beat"; hdr->EVENT.CodeDesc[2]="Premature ventricular contraction"; @@ -9357,7 +9416,7 @@ if (VERBOSE_LEVEL>2) NumberOfSegments = atol(strchr(line,'/')+1); biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, "MIT/HEA/PhysioBank: multi-segment records are not supported"); } - hdr->NS = (typeof(hdr->NS))strtod(ptr+1,&ptr); // number of channels + hdr->NS = (uint16_t)strtod(ptr+1,&ptr); // number of channels if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i) %s(...): NS=%i %p\n",__FILE__,__LINE__,__func__, hdr->NS, ptr); @@ -9430,7 +9489,7 @@ if (VERBOSE_LEVEL>2) else if (strcmp(DatFiles[nDatFiles-1],line)) DatFiles[nDatFiles++]=line; - fmt = (typeof(fmt))strtod(ptr+1,&ptr); + fmt = (enum FileFormat)strtod(ptr+1,&ptr); if (k==0) FMT = fmt; else if (FMT != fmt) { biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, "MIT/HEA/PhysioBank: different formats within a single data set is not supported"); @@ -9637,7 +9696,7 @@ if (VERBOSE_LEVEL>2) Marker[count]=0; /* define user specified events according to http://www.physionet.org/physiotools/wfdb/lib/ecgcodes.h */ - hdr->EVENT.CodeDesc = (typeof(hdr->EVENT.CodeDesc)) realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); + hdr->EVENT.CodeDesc = realloc(hdr->EVENT.CodeDesc,257*sizeof(*hdr->EVENT.CodeDesc)); hdr->EVENT.CodeDesc[0] = ""; for (k=0; strlen(MIT_EVENT_DESC[k])>0; k++) { if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i) %s(...) [MIT 182]: %i\n",__FILE__,__LINE__,__func__, (int)k); @@ -9651,9 +9710,9 @@ if (VERBOSE_LEVEL>2) /* decode ATR annotation information */ size_t N = count; - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP,N*sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS,N*sizeof(*hdr->EVENT.POS)); - hdr->EVENT.CHN = (typeof(hdr->EVENT.CHN)) realloc(hdr->EVENT.CHN,N*sizeof(*hdr->EVENT.CHN)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP,N*sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS,N*sizeof(*hdr->EVENT.POS)); + hdr->EVENT.CHN = realloc(hdr->EVENT.CHN,N*sizeof(*hdr->EVENT.CHN)); hdr->EVENT.N = 0; hdr->EVENT.SampleRate = hdr->SampleRate; @@ -9693,7 +9752,7 @@ if (VERBOSE_LEVEL>2) } } if (flag_chn) - hdr->EVENT.DUR = (typeof(hdr->EVENT.DUR)) realloc(hdr->EVENT.DUR,N*sizeof(*hdr->EVENT.DUR)); + hdr->EVENT.DUR = realloc(hdr->EVENT.DUR,N*sizeof(*hdr->EVENT.DUR)); else { free(hdr->EVENT.CHN); hdr->EVENT.CHN = NULL; @@ -10379,7 +10438,7 @@ if (VERBOSE_LEVEL>2) } hdr->AS.bpb = hdr->NS*GDFTYP_BITS[gdftyp]>>3; hdr->CHANNEL = (CHANNEL_TYPE*)realloc(hdr->CHANNEL,hdr->NS*sizeof(CHANNEL_TYPE)); - typeof (hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL+k; hc->Transducer[0] = 0; @@ -10844,7 +10903,7 @@ if (VERBOSE_LEVEL>2) size_t pos = leu32p(hdr->AS.Header+28); uint8_t len; - typeof(hdr->NS) k; + uint16_t k; for (k=0; k<5; k++) { #define line ((char*)(hdr->AS.Header+pos)) len = strcspn(line,"\x0a\x0d"); @@ -10978,9 +11037,9 @@ if (VERBOSE_LEVEL>2) hc->XYZ[2] = lei32p(hdr->AS.Header+pos+166); } #undef line - hdr->SPR = (typeof(hdr->SPR))round(hdr->SampleRate/minFs); + hdr->SPR = (uint32_t)round(hdr->SampleRate/minFs); for (k=0,hdr->AS.bpb=0; kNS; k++) { - hdr->CHANNEL[k].SPR = (typeof(hdr->SPR))round(fs[k]/minFs); + hdr->CHANNEL[k].SPR = (uint32_t)round(fs[k]/minFs); hdr->CHANNEL[k].bi = hdr->AS.bpb; hdr->AS.bpb += hdr->CHANNEL[k].SPR*2; } @@ -11299,7 +11358,7 @@ if (VERBOSE_LEVEL>2) } else { // hdr->FLAG.SWAP = 0; // no swaping required - typeof(hdr->NS) k2; + uint16_t k2; size_t k; hdr->FILE.LittleEndian = (__BYTE_ORDER == __LITTLE_ENDIAN); size_t sz = (size_t)hdr->NS * hdr->SPR * hdr->NRec * GDFTYP_BITS[gdftyp]>>3; @@ -11473,8 +11532,8 @@ if (VERBOSE_LEVEL>2) if (N+1 >= hdr->EVENT.N) { hdr->EVENT.N += max(4096,hdr->EVENT.N); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS, hdr->EVENT.N*sizeof(*hdr->EVENT.POS) ); - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP, hdr->EVENT.N*sizeof(*hdr->EVENT.TYP) ); + hdr->EVENT.POS = realloc(hdr->EVENT.POS, hdr->EVENT.N*sizeof(*hdr->EVENT.POS) ); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP, hdr->EVENT.N*sizeof(*hdr->EVENT.TYP) ); } if (N==0) { hdr->T0 = (gdf_time)(tm_time2gdf_time(&t) + ldexp((ms-rri)/(24*3600*1e3),32)); @@ -11636,7 +11695,7 @@ if (VERBOSE_LEVEL>2) stat(hdr->FileName,&FileBuf); hdr->SPR = 1; - typeof (hdr->NS) k; + uint16_t k; size_t bpb8=0; for (k = 0; k < hdr->NS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL+k; @@ -11778,9 +11837,9 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ #endif // NS number of channels selected for writing - typeof(hdr->NS) NS = 0; + uint16_t NS = 0; { - typeof(hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) if (hdr->CHANNEL[k].OnOff) NS++; } @@ -11913,7 +11972,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ fprintf(fid,"\n0x%04x\t%f\t",hdr->EVENT.TYP[k],hdr->EVENT.POS[k]/hdr->EVENT.SampleRate); // EVENT.POS uses 0-based indexing if (hdr->EVENT.DUR != NULL) { - typeof(*hdr->EVENT.DUR) DUR; + uint32_t DUR; DUR = (hdr->EVENT.TYP[k]==0x7fff) ? 0 : hdr->EVENT.DUR[k]; fprintf(fid,"%f\t%d\t", DUR/hdr->EVENT.SampleRate, hdr->EVENT.CHN[k]); } @@ -11921,7 +11980,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ fprintf(fid,"\t\t"); if (hdr->EVENT.TYP[k] == 0x7fff) { - typeof(hdr->NS) chan = hdr->EVENT.CHN[k] - 1; + uint16_t chan = hdr->EVENT.CHN[k] - 1; double val = dur2val(hdr->EVENT.DUR[k], hdr->CHANNEL[chan].GDFTYP); val *= hdr->CHANNEL[chan].Cal; @@ -11945,7 +12004,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ hdr->FILE.POS = 0; hdr->FILE.FID = fopen(hdr->FileName, "w"); - typeof(hdr->NS) k, NS = 1; + uint16_t k, NS = 1; for (k = 0; k < hdr->NS; k++) { NS += (hdr->CHANNEL[k].OnOff > 0); } @@ -11997,7 +12056,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ fprintf(fid,"[Binary Infos]\r\nBinaryFormat="); uint16_t gdftyp = 0; - typeof(hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) if (gdftyp < hdr->CHANNEL[k].GDFTYP) gdftyp = hdr->CHANNEL[k].GDFTYP; @@ -12122,7 +12181,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ lei32a(0, hdr->AS.Header+60); // 1: time channel int32_t gdftyp = 3; // 1:double, 2:float, 3: int16; see CFWB_GDFTYP too. - typeof(hdr->NS) k,k2; + uint16_t k,k2; for (k=0; kNS; k++) if (hdr->CHANNEL[k].OnOff) { @@ -12172,7 +12231,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ struct2gdfbin(hdr); size_t bpb8 = 0; - typeof(hdr->NS) k; + uint16_t k; for (k=0, hdr->AS.bpb=0; kNS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL+k; hc->bi8 = bpb8; @@ -12257,7 +12316,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ if (len>4) fprintf(stderr,"Warning: NS is (%s) too long (%i>4).\n",tmp,(int)len); memcpy(Header1+252, tmp, len); - typeof(hdr->NS) k,k2; + uint16_t k,k2; for (k=0,k2=0; kNS; k++) if (hdr->CHANNEL[k].OnOff) { @@ -12639,7 +12698,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ #endif //ONLYGDF hdr->AS.bpb = 0; - typeof(hdr->NS) k; + uint16_t k; for (k=0, hdr->SPR = 1; k < hdr->NS; k++) { hdr->CHANNEL[k].bi = bpb8>>3; hdr->CHANNEL[k].bi8 = bpb8; @@ -12669,7 +12728,7 @@ else if (!strncmp(MODE,"w",1)) /* --- WRITE --- */ fprintf(stdout,"Debugging Information: (Format=%d) %s FILE.POS=%d is not zero.\n",hdr->TYPE,hdr->FileName,(int)hdr->FILE.POS); fprintf(stderr,"%s line %d: %s(...) NS=%d\n",__FILE__,__LINE__,__func__,hdr->NS); - typeof(hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) if (hdr->CHANNEL[k].GDFTYP * sizeof(GDFTYP_BITS[0]) >= sizeof(GDFTYP_BITS)) fprintf(stderr,"%s line %d: %s(...) #%d gdftyp invalid (%d>%d)\n",__FILE__,__LINE__,__func__,k,hdr->CHANNEL[k].GDFTYP,sizeof(GDFTYP_BITS)/sizeof(GDFTYP_BITS[0]) ); @@ -12705,7 +12764,7 @@ size_t bpb8_collapsed_rawdata(HDRTYPE *hdr) { size_t bpb8=0; CHANNEL_TYPE *CHptr; - typeof(hdr->NS) k; + uint16_t k; for (k=0; kNS; k++) { CHptr = hdr->CHANNEL+k; if (CHptr->OnOff) bpb8 += (size_t)CHptr->SPR*GDFTYP_BITS[CHptr->GDFTYP]; @@ -12781,8 +12840,8 @@ void collapse_rawdata(HDRTYPE *hdr, void *buf, size_t count) { } for (k4 = 0; k4 < count; k4++) { - void *src = buf + k4*hdr->AS.bpb; - void *dest = buf + k4*bpb; + uint8_t *src = (uint8_t*)buf + k4*hdr->AS.bpb; + uint8_t *dest = (uint8_t*)buf + k4*bpb; for (k1=0; k1 < num3Segments; k1+=3) if ((dest + idxList[k1]) != (src + idxList[k1+1])) memcpy(dest + idxList[k1], src + idxList[k1+1], idxList[k1+2]); @@ -13585,7 +13644,7 @@ size_t swrite(const biosig_data_type *data, size_t nelem, HDRTYPE* hdr) { nrec_t nr = hdr->data.size[(int)hdr->FLAG.ROW_BASED_CHANNELS]; // if collapsed data, use k2, otherwise use k1 assert(nr == hdr->NRec * hdr->SPR); - typeof(hdr->NS) k,k2; + uint16_t k,k2; nrec_t c = 0; unsigned timeChan = getTimeChannelNumber(hdr); @@ -13641,7 +13700,7 @@ size_t swrite(const biosig_data_type *data, size_t nelem, HDRTYPE* hdr) { if ((hdr->NRec*bpb8>0) && (hdr->TYPE != SCP_ECG)) { // memory allocation for SCP is done in SOPEN_SCP_WRITE Section 6 - ptr = (typeof(ptr))realloc(hdr->AS.rawdata, (hdr->NRec*bpb8>>3)+1); + ptr = (uint8_t*)realloc(hdr->AS.rawdata, (hdr->NRec*bpb8>>3)+1); if (ptr==NULL) { biosigERROR(hdr, B4C_INSUFFICIENT_MEMORY, "SWRITE: memory allocation failed."); return(0); @@ -13906,7 +13965,7 @@ size_t swrite(const biosig_data_type *data, size_t nelem, HDRTYPE* hdr) { ifopen(&H1,"wb"); if (hdr->TYPE == ASCII) { - typeof(hdr->SPR) SPR; + uint32_t SPR; if (CHptr->SPR>0) { DIV = hdr->SPR/CHptr->SPR; SPR = CHptr->SPR; @@ -14453,7 +14512,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout, "asprintf_hdr2json: count=%i\n", (int)c); if (hdr->EVENT.TYP[k] == 0x7fff) { // c += sprintf(STR, ",\n\t\t\"Description\"\t: \"[sparse sample]\""); - typeof(hdr->NS) chan = hdr->EVENT.CHN[k] - 1; + uint16_t chan = hdr->EVENT.CHN[k] - 1; double val = dur2val(hdr->EVENT.DUR[k], hdr->CHANNEL[chan].GDFTYP); @@ -14634,7 +14693,7 @@ int fprintf_hdr2json(FILE *fid, HDRTYPE* hdr) //fprintf(fid,"\t\t\"Description\"\t: [neds]\n"); // no comma at the end because its the last element //fprintf(fid,",\n\t\t\"Description\"\t: \"[sparse sample]\""); - typeof(hdr->NS) chan = hdr->EVENT.CHN[k] - 1; + uint16_t chan = hdr->EVENT.CHN[k] - 1; double val = dur2val(hdr->EVENT.DUR[k], hdr->CHANNEL[chan].GDFTYP); @@ -14774,7 +14833,7 @@ int hdr2ascii(HDRTYPE* hdr, FILE *fid, int VERBOSE) fprintf(fid,"\nNo LeadId Label\tFs[Hz]\tSPR\tGDFTYP\tCal\tOff\tPhysDim\tPhysMax \tPhysMin \tDigMax \tDigMin \tHighPass\tLowPass \tNotch \tdelay [s]\tX\tY\tZ"); size_t k; #ifdef CHOLMOD_H - typeof(hdr->NS) NS = hdr->NS; + uint16_t NS = hdr->NS; if (hdr->Calib) NS += hdr->Calib->ncol; for (k=0; kNS) @@ -14826,7 +14885,7 @@ int hdr2ascii(HDRTYPE* hdr, FILE *fid, int VERBOSE) fprintf(fid,"\t%d\t%5d",hdr->EVENT.CHN[k],hdr->EVENT.DUR[k]); if ((hdr->EVENT.TYP[k] == 0x7fff) && (hdr->TYPE==GDF)) { - typeof(hdr->NS) chan = hdr->EVENT.CHN[k]-1; + uint16_t chan = hdr->EVENT.CHN[k]-1; double val = dur2val(hdr->EVENT.DUR[k], hdr->CHANNEL[chan].GDFTYP); diff --git a/biosig4c++/biosig2.c b/biosig4c++/biosig2.c index 3357c7e3..3c91ab15 100644 --- a/biosig4c++/biosig2.c +++ b/biosig4c++/biosig2.c @@ -40,7 +40,7 @@ int biosig_set_filetype(HDRTYPE *hdr, enum FileFormat format) { if (hdr==NULL) return -1; hdr->TYPE=format; if (format==GDF) - hdr->VERSION = 1.0/0.0; // use latest version + hdr->VERSION = INFINITY; // use latest version return 0; } @@ -487,7 +487,7 @@ int biosig_set_application_specific_information(HDRTYPE *hdr, const char* appinf // returns M-th channel, M is 0-based CHANNEL_TYPE* biosig_get_channel(HDRTYPE *hdr, int M) { if (hdr==NULL) return NULL; - typeof(hdr->NS) k,m; + size_t k,m; for (k=0,m=0; kNS; k++) if (hdr->CHANNEL[k].OnOff==1) { if (M==m) return hdr->CHANNEL+k; @@ -701,7 +701,7 @@ struct hdrlist_t hdrlist[hdrlistlen]; CHANNEL_TYPE *getChannelHeader(HDRTYPE *hdr, uint16_t channel) { // returns channel header - skip Off-channels CHANNEL_TYPE *hc = hdr->CHANNEL; - typeof(hdr->NS) chan = 0; + size_t chan = 0; while (1) { if (hc->OnOff==1) { if (chan==channel) return hc; @@ -902,7 +902,7 @@ double biosig_get_samplefrequency(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NAN); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NAN); return (hdr->SampleRate*hdr->CHANNEL[biosig_signal].SPR/hdr->SPR); @@ -912,7 +912,7 @@ int biosig_set_samplefrequency(int handle, int biosig_signal, double samplefrequ if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = 0; + size_t ns = 0; int ch; for (ch = 0; ch < hdr->NS; ch++) { if (hdr->CHANNEL[ch].OnOff==1) { @@ -937,7 +937,7 @@ double biosig_get_physical_maximum(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NAN); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NAN); return (hdr->CHANNEL[biosig_signal].PhysMax); @@ -947,7 +947,7 @@ int biosig_set_physical_maximum(int handle, int biosig_signal, double phys_max) if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].PhysMax = phys_max; @@ -958,7 +958,7 @@ double biosig_get_physical_minimum(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NAN); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NAN); return (hdr->CHANNEL[biosig_signal].PhysMin); @@ -968,7 +968,7 @@ int biosig_set_physical_minimum(int handle, int biosig_signal, double phys_min) if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].PhysMin = phys_min; @@ -979,7 +979,7 @@ double biosig_get_digital_maximum(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NAN); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NAN); return (hdr->CHANNEL[biosig_signal].DigMax); @@ -989,7 +989,7 @@ int biosig_set_digital_maximum(int handle, int biosig_signal, double dig_max) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].DigMax = dig_max; @@ -1000,7 +1000,7 @@ double biosig_get_digital_minimum(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NAN); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NAN); return (hdr->CHANNEL[biosig_signal].DigMin); @@ -1010,7 +1010,7 @@ int biosig_set_digital_minimum(int handle, int biosig_signal, double dig_min) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].DigMin = dig_min; @@ -1021,7 +1021,7 @@ const char *biosig_get_label(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NULL); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NULL); return (hdr->CHANNEL[biosig_signal].Label); @@ -1031,7 +1031,7 @@ int biosig_set_label(int handle, int biosig_signal, const char *label) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); strncpy(hdr->CHANNEL[biosig_signal].Label, label, MAX_LENGTH_LABEL); @@ -1048,7 +1048,7 @@ int biosig_set_highpassfilter(int handle, int biosig_signal, double frequency) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].HighPass = frequency; @@ -1060,7 +1060,7 @@ int biosig_set_lowpassfilter(int handle, int biosig_signal, double frequency) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].LowPass = frequency; @@ -1072,7 +1072,7 @@ int biosig_set_notchfilter(int handle, int biosig_signal, double frequency) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].Notch = frequency; @@ -1085,7 +1085,7 @@ const char *biosig_get_transducer(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NULL); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NULL); return (hdr->CHANNEL[biosig_signal].Transducer); @@ -1095,7 +1095,7 @@ int biosig_set_transducer(int handle, int biosig_signal, const char *transducer) if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); strncpy(hdr->CHANNEL[biosig_signal].Transducer, transducer, MAX_LENGTH_TRANSDUCER+1); @@ -1108,7 +1108,7 @@ const char *biosig_physical_dimension(int handle, int biosig_signal) { if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(NULL); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(NULL); return (PhysDim3(hdr->CHANNEL[biosig_signal].PhysDimCode)); @@ -1118,7 +1118,7 @@ int biosig_set_physical_dimension(int handle, int biosig_signal, const char *phy if (handle<0 || handle >= hdrlistlen || hdrlist[handle].hdr==NULL) return(-1); HDRTYPE *hdr = hdrlist[handle].hdr; - typeof(hdr->NS) ns = hdr->NS; + size_t ns = hdr->NS; if (biosig_signal >= ns) return(-1); hdr->CHANNEL[biosig_signal].PhysDimCode = PhysDimCode(phys_dim); @@ -1321,7 +1321,7 @@ HDRTYPE* biosig_unserialize(void *mem, size_t len, size_t start, size_t length, // get data block biosig_set_flag(hdr, flags); if (data != NULL) { - hdr->AS.rawdata = mem+hdr->HeadLen; + hdr->AS.rawdata = (uint8_t*)mem + hdr->HeadLen; size_t L = sread(*data, start, length, hdr); *data = hdr->data.block; hdr->data.block = NULL; @@ -1331,7 +1331,7 @@ HDRTYPE* biosig_unserialize(void *mem, size_t len, size_t start, size_t length, fprintf(stdout,"%s (line %i) %s:\n",__FILE__,__LINE__,__func__); // read eventtable - hdr->AS.rawEventData = (hdr->NRec != -1) ? mem + hdr->HeadLen + hdr->NRec*hdr->AS.bpb : NULL; + hdr->AS.rawEventData = (hdr->NRec != -1) ? (uint8_t*)mem + hdr->HeadLen + hdr->NRec*hdr->AS.bpb : NULL; rawEVT2hdrEVT(hdr, len - hdr->HeadLen - hdr->NRec*hdr->AS.bpb); // in case of success, memory is managed by its own pointer *mem diff --git a/biosig4c++/igor/IgorBin.h b/biosig4c++/igor/IgorBin.h index 35bb94a3..c2fa2a1c 100644 --- a/biosig4c++/igor/IgorBin.h +++ b/biosig4c++/igor/IgorBin.h @@ -42,6 +42,10 @@ extern "C" { */ #define ptr_t uint32_t #define Handle uint32_t +#elif defined(_MSC_VER) + #pragma pack(push,2) + #define ptr_t uint32_t + #define Handle uint32_t #elif GENERATINGPOWERPC #pragma options align=mac68k #endif @@ -218,6 +222,10 @@ typedef WavePtr5 *WaveHandle5; #pragma pack(pop) #undef ptr_t #undef Handle +#elif defined(_MSC_VER) + #pragma pack(pop) + #undef ptr_t + #undef Handle #elif GENERATINGPOWERPC #pragma options align=reset #endif diff --git a/biosig4c++/physicalunits.c b/biosig4c++/physicalunits.c index 76f3c7f0..a4607bee 100644 --- a/biosig4c++/physicalunits.c +++ b/biosig4c++/physicalunits.c @@ -26,6 +26,12 @@ #include #include "physicalunits.h" +#ifndef __GNUC__ + #ifndef __attribute__ + #define __attribute__(x) + #endif +#endif + #ifdef HAVE_PTHREAD // This is optional, because so far there are no multi-threaded applications for libbiosig. #include @@ -71,7 +77,7 @@ const char* PhysDimFactor[] = { "E","Z","Y","#","#","#","#","#", // 8..15 "d","c","m","u","n","p","f","a", // 16..23 "z","y","#","#","#","#","#","#", // 24..31 - "\xB5" //hack for "" = "u" // 32 + "\xB5" //hack for "�" = "u" // 32 }; @@ -87,7 +93,7 @@ double PhysDimScale(uint16_t PhysDimCode) 1e+18,1e+21,1e+24,NAN, NAN, NAN, NAN, NAN, // 8..15 1e-1, 1e-2, 1e-3, 1e-6, 1e-9, 1e-12, 1e-15, 1e-18, // 16..23 1e-21,1e-24,NAN, NAN, NAN, NAN, NAN, NAN, // 24..31 - 1e-6 // hack for "" = "u" // 32 + 1e-6 // hack for "�" = "u" // 32 }; return (scale[PhysDimCode & 0x001f]); diff --git a/biosig4c++/t210/scp-decode.cpp b/biosig4c++/t210/scp-decode.cpp index 89f6a8db..ed433bee 100644 --- a/biosig4c++/t210/scp-decode.cpp +++ b/biosig4c++/t210/scp-decode.cpp @@ -105,6 +105,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include using namespace std; +#ifndef __GNUC__ +#ifndef __attribute__ +#define __attribute__(x) +#endif +#endif + /* error handling should use error variables local to each HDR otherwise, sopen() etc. is not re-entrant. @@ -114,8 +120,14 @@ using namespace std; serror2(hdr), hdr->AS.B4C_ERRNUM, hdr->AS.B4C_ERRMSG for error handling. */ +#ifdef __cplusplus +extern "C" { +#endif __attribute__ ((deprecated)) extern int B4C_ERRNUM; __attribute__ ((deprecated)) extern const char *B4C_ERRMSG; +#ifdef __cplusplus +} +#endif //______________________________________________________________________________ diff --git a/biosig4c++/t210/sopen_abf_read.c b/biosig4c++/t210/sopen_abf_read.c index 9dff7db6..fbe2d8c4 100644 --- a/biosig4c++/t210/sopen_abf_read.c +++ b/biosig4c++/t210/sopen_abf_read.c @@ -47,7 +47,7 @@ EXTERN_C void sopen_atf_read(HDRTYPE* hdr) { size_t ll = 0; char *line = NULL; ssize_t nc; - typeof (hdr->NS) k; + uint16_t k; // first line - skip: contains "ATF\t1.0" or alike nc = getline(&line, &ll, hdr->FILE.FID); diff --git a/biosig4c++/t210/sopen_acqbiopac.c b/biosig4c++/t210/sopen_acqbiopac.c index 04b6769a..e4216cc9 100644 --- a/biosig4c++/t210/sopen_acqbiopac.c +++ b/biosig4c++/t210/sopen_acqbiopac.c @@ -32,7 +32,11 @@ This implementation is based on the following references: #include #include #include +#if defined(__has_include) +#if __has_include() #include +#endif +#endif #include #include diff --git a/biosig4c++/t210/sopen_alpha_read.c b/biosig4c++/t210/sopen_alpha_read.c index 0e9bcf52..394a2f51 100644 --- a/biosig4c++/t210/sopen_alpha_read.c +++ b/biosig4c++/t210/sopen_alpha_read.c @@ -51,7 +51,7 @@ EXTERN_C void sopen_alpha_read(HDRTYPE* hdr) { char* fn = (char*)malloc(strlen(hdr->FileName)+15); strcpy(fn,hdr->FileName); // Flawfinder: ignore - const size_t bufsiz = 4096; + enum { bufsiz = 4096 }; char buf[bufsiz]; // alpha.alp cal_res digin digvidtc eog marker measure mkdef montage rawdata rawhead report.txt r_info sleep @@ -367,8 +367,8 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"<%6.2f> %i- %s | %s\n",hdr->VERSION, STATUS if (n+1 >= N) { const size_t sz = 100; - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP,(N+sz)*sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS,(N+sz)*sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP,(N+sz)*sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS,(N+sz)*sizeof(*hdr->EVENT.POS)); N += sz; } diff --git a/biosig4c++/t210/sopen_axg_read.c b/biosig4c++/t210/sopen_axg_read.c index 34c84a67..3bc2ef20 100644 --- a/biosig4c++/t210/sopen_axg_read.c +++ b/biosig4c++/t210/sopen_axg_read.c @@ -26,7 +26,19 @@ #include #include #include +#if defined(__has_include) +#if __has_include() #include +#define STF_HAVE_ICONV 1 +#endif +#endif + +#ifndef STF_HAVE_ICONV +#define iconv_t void* +#define iconv_open(a,b) ((void*)-1) +#define iconv(cd,inbuf,inbytesleft,outbuf,outbytesleft) ((size_t)-1) +#define iconv_close(cd) ((void)0) +#endif #if !defined(__APPLE__) && defined (_LIBICONV_H) #define iconv libiconv @@ -409,7 +421,7 @@ if (VERBOSE_LEVEL > 7) fprintf(stdout,"%s (line %i) NS=%i nCol=%i\n", __FILE__, *outbuf=0; #else ++inbuf; - int i = min(MAX_LENGTH_LABEL, titleLen/2); + int i = min(MAX_LENGTH_LABEL, (int)(inlen/2)); for (; i>0 ; i-- ) { *outbuf= *inbuf; inbuf += 2; diff --git a/biosig4c++/t210/sopen_cfs_read.c b/biosig4c++/t210/sopen_cfs_read.c index 59d29823..2f074509 100644 --- a/biosig4c++/t210/sopen_cfs_read.c +++ b/biosig4c++/t210/sopen_cfs_read.c @@ -156,9 +156,9 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"%s:%i sopen_cfs_read started [%s]\n",__FILE } if (NumberOfDataSections) { - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.POS)); - hdr->EVENT.TimeStamp = (typeof(hdr->EVENT.TimeStamp)) realloc(hdr->EVENT.TimeStamp, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.TimeStamp)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TimeStamp = realloc(hdr->EVENT.TimeStamp, (hdr->EVENT.N + 2*NumberOfDataSections - 1) * sizeof(*hdr->EVENT.TimeStamp)); } if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i) CFS - %d,%d,%d,0x%x,0x%x,0x%x,%d,0x%x\n",__FILE__,__LINE__,hdr->NS,n,d,FileHeaderSize,DataHeaderSize,LastDataSectionHeaderOffset,NumberOfDataSections,leu32p(hdr->AS.Header+0x86)); @@ -168,7 +168,7 @@ if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i) CFS - %d,%d,%d,0x%x,0x%x,0x%x, #define H2LEN (22+10+10+1+1+2+2) char* H2 = (char*)(hdr->AS.Header + H1LEN); double xPhysDimScale[100]; // CFS is limited to 99 channels - typeof(hdr->NS) NS = hdr->NS; + uint16_t NS = hdr->NS; uint8_t k; uint32_t bpb=0; for (k = 0; k < hdr->NS; k++) { @@ -387,7 +387,7 @@ if (VERBOSE_LEVEL>7) { } } - typeof (hdr->T0) TS = tmp_event_pos ? (hdr->T0 + ldexp(tmp_event_pos/(24.0*3600.0),32)) : 0; + gdf_time TS = tmp_event_pos ? (hdr->T0 + ldexp(tmp_event_pos/(24.0*3600.0),32)) : 0; if (m>0) { hdr->EVENT.TYP[hdr->EVENT.N] = 0x7ffe; hdr->EVENT.POS[hdr->EVENT.N] = SPR; @@ -655,8 +655,8 @@ if (VERBOSE_LEVEL>7) { // matrix data might contain time markers. // memory allocation for additional events - more efficient implementation would be nice - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.POS)); /* char Desc[2]; Desc[0] = srcaddr[hdr->CHANNEL[next].bi + k2*stride]; Desc[1] = 0; @@ -726,8 +726,8 @@ if (VERBOSE_LEVEL>7) { // matrix data might contain time markers. // memory allocation for additional events - more efficient implementation would be nice - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS, (hdr->EVENT.N + NumberOfDataSections) * sizeof(*hdr->EVENT.POS)); /* char Desc[2]; Desc[0] = srcaddr[hdr->CHANNEL[next].bi + k2*stride]; Desc[1] = 0; @@ -1015,7 +1015,7 @@ EXTERN_C void sopen_smr_read(HDRTYPE* hdr) { *********************************************/ hdr->CHANNEL = (CHANNEL_TYPE*)realloc(hdr->CHANNEL, hdr->NS * sizeof(CHANNEL_TYPE)); - typeof(hdr->NS) k; + uint16_t k; size_t bpb = 0; for (k = 0; k < hdr->NS; k++) { uint32_t off = 512 + k*140; diff --git a/biosig4c++/t210/sopen_heka_read.c b/biosig4c++/t210/sopen_heka_read.c index 3d5d2912..73ad7e3a 100644 --- a/biosig4c++/t210/sopen_heka_read.c +++ b/biosig4c++/t210/sopen_heka_read.c @@ -26,6 +26,12 @@ #include #include #ifdef _WIN32 +#include +#define __builtin_bswap16 _byteswap_ushort +#define __builtin_bswap32 _byteswap_ulong +#define __builtin_bswap64 _byteswap_uint64 +#endif +#ifdef _WIN32 // Can't include sys/stat.h or sopen is declared twice. #include struct stat { diff --git a/biosig4c++/t210/sopen_igor.c b/biosig4c++/t210/sopen_igor.c index 787e5819..91da458b 100644 --- a/biosig4c++/t210/sopen_igor.c +++ b/biosig4c++/t210/sopen_igor.c @@ -29,9 +29,16 @@ #include */ #include +#include #include // define macro isnan() #include #include +#ifdef _MSC_VER +#include +#define __builtin_bswap16 _byteswap_ushort +#define __builtin_bswap32 _byteswap_ulong +#define __builtin_bswap64 _byteswap_uint64 +#endif #include "../biosig-dev.h" #include "../igor/IgorBin.h" @@ -393,7 +400,7 @@ void sopen_ibw_read (HDRTYPE* hdr) { case 3: { WaveHeader2* w2; - w2 = (WaveHeader2*)(buffer+binHeaderSize); + w2 = (WaveHeader2*)((uint8_t*)buffer+binHeaderSize); type = w2->type; strncpy(hdr->CHANNEL[0].Label, w2->bname, MAX_LENGTH_LABEL); hdr->CHANNEL[0].PhysDimCode = PhysDimCode(w2->dataUnits); @@ -424,7 +431,7 @@ void sopen_ibw_read (HDRTYPE* hdr) { case 5: { WaveHeader5* w5; - w5 = (WaveHeader5*)(buffer+binHeaderSize); + w5 = (WaveHeader5*)((uint8_t*)buffer+binHeaderSize); type = w5->type; int k; @@ -529,14 +536,14 @@ void sopen_ibw_read (HDRTYPE* hdr) { case NT_FP32: gdftyp = 16; hdr->AS.bpb = 4; // float - digmin = -__FLT_MAX__; - digmax = __FLT_MAX__; + digmin = -FLT_MAX; + digmax = FLT_MAX; break; case NT_FP64: gdftyp = 17; hdr->AS.bpb = 8; // double - digmin = -__DBL_MAX__; - digmax = __DBL_MAX__; + digmin = -DBL_MAX; + digmax = DBL_MAX; break; case 0: // text waves biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, "Igor/IBW: text waves not supported"); @@ -558,7 +565,7 @@ void sopen_ibw_read (HDRTYPE* hdr) { hdr->CHANNEL[1].SPR = hdr->SPR; } - typeof (hdr->NS) k; + uint16_t k; size_t bpb=0; for (k = 0; k < hdr->NS; k++) { CHANNEL_TYPE *hc = hdr->CHANNEL+k; @@ -746,8 +753,8 @@ void sopen_itx_read (HDRTYPE* hdr) { if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i) start reading %s,v%4.2f format (%i)\n",__FILE__,__LINE__,GetFileTypeString(hdr->TYPE),hdr->VERSION,ifeof(hdr)); - typeof(hdr->SPR) SPR = 0, spr = 0; - typeof(hdr->NS) ns = 0; + uint32_t SPR = 0, spr = 0; + uint16_t ns = 0; int chanNo=0, sweepNo=0; hdr->SPR = 0; hdr->NRec= 0; diff --git a/biosig4c++/t210/sopen_msvc_stubs.c b/biosig4c++/t210/sopen_msvc_stubs.c new file mode 100644 index 00000000..e6756708 --- /dev/null +++ b/biosig4c++/t210/sopen_msvc_stubs.c @@ -0,0 +1,46 @@ +#include "../biosig.h" + +static int biosig_unsupported(HDRTYPE *hdr, const char *feature) { + biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, feature); + return -1; +} + +void sopen_acqbiopac_read(HDRTYPE *hdr) { + biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, "SOPEN(ACQ): unsupported in this MSVC build"); +} + +void sopen_biosigdump_read(HDRTYPE *hdr) { + biosigERROR(hdr, B4C_FORMAT_UNSUPPORTED, "SOPEN(BIOSIGDUMP): unsupported in this MSVC build"); +} + +int sopen_fiff_read(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(FIFF): unsupported in this MSVC build"); +} + +int sopen_nicoletE_read(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(NICOLET): unsupported in this MSVC build"); +} + +int sopen_rhd2000_read(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(RHD2000): unsupported in this MSVC build"); +} + +int sopen_rhs2000_read(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(RHS2000): unsupported in this MSVC build"); +} + +int sopen_intan_clp_read(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(INTAN CLP): unsupported in this MSVC build"); +} + +int sopen_hdf5(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(HDF5): unsupported in this MSVC build"); +} + +int sopen_matlab(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(MATLAB): unsupported in this MSVC build"); +} + +int sopen_sqlite(HDRTYPE *hdr) { + return biosig_unsupported(hdr, "SOPEN(SQLITE): unsupported in this MSVC build"); +} diff --git a/biosig4c++/t210/sopen_nicolet.c b/biosig4c++/t210/sopen_nicolet.c index bd12c43a..d15bcef9 100644 --- a/biosig4c++/t210/sopen_nicolet.c +++ b/biosig4c++/t210/sopen_nicolet.c @@ -26,7 +26,11 @@ #include #include #include +#if defined(__has_include) +#if __has_include() #include +#endif +#endif #include #include diff --git a/biosig4c++/t210/sopen_rhd2000_read.c b/biosig4c++/t210/sopen_rhd2000_read.c index 6e52e660..ba0b0d80 100644 --- a/biosig4c++/t210/sopen_rhd2000_read.c +++ b/biosig4c++/t210/sopen_rhd2000_read.c @@ -22,7 +22,11 @@ References: #include #include #include +#if defined(__has_include) +#if __has_include() #include +#endif +#endif #include #include diff --git a/biosig4c++/t210/sopen_scp_read.c b/biosig4c++/t210/sopen_scp_read.c index e377fd68..bd5a29fb 100644 --- a/biosig4c++/t210/sopen_scp_read.c +++ b/biosig4c++/t210/sopen_scp_read.c @@ -29,7 +29,18 @@ #include #include #include +#if defined(__has_include) +#if __has_include() #include +#define STF_HAVE_ICONV 1 +#endif +#endif +#ifndef STF_HAVE_ICONV +#define iconv_t void* +#define iconv_open(a,b) ((void*)-1) +#define iconv(cd,inbuf,inbytesleft,outbuf,outbytesleft) ((size_t)-1) +#define iconv_close(cd) ((void)0) +#endif #include #if !defined(__APPLE__) && defined (_LIBICONV_H) @@ -43,7 +54,7 @@ #define min(a,b) (((a) < (b)) ? (a) : (b)) #include "structures.h" -static const uint8_t _NUM_SECTION = 20; //consider first 19 sections of SCP +enum { _NUM_SECTION = 20 }; //consider first 19 sections of SCP static bool add_filter = true; // additional filtering gives better shape, but use with care #ifdef __cplusplus @@ -149,6 +160,7 @@ typedef struct en1064_t { } Tag14, Tag15; } Section1; struct { + uint8_t reserved; } Section2; struct { uint8_t NS, flags; @@ -364,6 +376,7 @@ int decode_scp_text(HDRTYPE *hdr, size_t inbytesleft, char *input, size_t outbyt output[outbytesleft]=0; return(exitcode); } + uint8_t LanguageSupportCode = (*(struct aecg*)(hdr->aECG)).Section1.Tag14.LANG_SUPP_CODE; #if defined(_ICONV_H) || defined (_LIBICONV_H) || defined(_ICONV_H_) /* @@ -371,7 +384,6 @@ int decode_scp_text(HDRTYPE *hdr, size_t inbytesleft, char *input, size_t outbyt The table of language support code as defined in CEN Standard EN1064:2005+A1:2007, p.30. */ - uint8_t LanguageSupportCode = (*(struct aecg*)(hdr->aECG)).Section1.Tag14.LANG_SUPP_CODE; iconv_t cd; if ((LanguageSupportCode & 0x01) == 0) cd = iconv_open ("UTF-8", "ASCII"); @@ -1074,7 +1086,7 @@ int sopen_SCP_read(HDRTYPE* hdr) { for (k2=0; k2CHANNEL = (CHANNEL_TYPE *) realloc(hdr->CHANNEL,hdr->NS* sizeof(CHANNEL_TYPE)); - en1064.Section3.lead = (typeof(en1064.Section3.lead))malloc(hdr->NS*sizeof(*en1064.Section3.lead)); + en1064.Section3.lead = malloc(hdr->NS*sizeof(*en1064.Section3.lead)); uint32_t startindex0; startindex0 = leu32p(PtrCurSect+curSectPos); @@ -1163,7 +1175,7 @@ int sopen_SCP_read(HDRTYPE* hdr) { en1064.Section4.N = leu16p(PtrCurSect+curSectPos+4); // ### TODO: SCPECGv3 ### en1064.Section4.SPR = hdr->SPR/4; - en1064.Section4.beat = (typeof(en1064.Section4.beat))malloc(en1064.Section4.N*sizeof(*en1064.Section4.beat)); + en1064.Section4.beat = malloc(en1064.Section4.N*sizeof(*en1064.Section4.beat)); curSectPos += 6; for (i=0; i < en1064.Section4.N; i++) { @@ -1191,7 +1203,7 @@ int sopen_SCP_read(HDRTYPE* hdr) { en1064.Section5.dT_us = leu16p(PtrCurSect+curSectPos+2); en1064.Section5.DIFF = *(PtrCurSect+curSectPos+4); en1064.Section5.Length = (1000L * en1064.Section4.len_ms) / en1064.Section5.dT_us; // hdr->SPR; - en1064.Section5.inlen = (typeof(en1064.Section5.inlen))malloc(hdr->NS*2); + en1064.Section5.inlen = malloc(hdr->NS*2); for (i=0; i < hdr->NS; i++) { en1064.Section5.inlen[i] = leu16p(PtrCurSect+curSectPos+6+2*i); // ### TODO: SCPECGv3 ### if (!section[4].length && (en1064.Section5.Length < en1064.Section5.inlen[i])) @@ -1279,7 +1291,7 @@ int sopen_SCP_read(HDRTYPE* hdr) { dT_us = en1064.Section6.dT_us; hdr->SampleRate = 1e6/dT_us; - typeof(hdr->SPR) SPR = ( en1064.FLAG.BIMODAL ? en1064.Section4.SPR : hdr->SPR); + uint32_t SPR = ( en1064.FLAG.BIMODAL ? en1064.Section4.SPR : hdr->SPR); if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i): %i %i %i\n", __func__ ,__LINE__, dT_us, Cal5, Cal6); diff --git a/biosig4c++/t220/sopen_scp_write.c b/biosig4c++/t220/sopen_scp_write.c index 3cd0a989..96292579 100644 --- a/biosig4c++/t220/sopen_scp_write.c +++ b/biosig4c++/t220/sopen_scp_write.c @@ -19,6 +19,9 @@ #include #include #include +#ifdef _WIN32 +#define timezone _timezone +#endif #include "../biosig-dev.h" #define min(a,b) (((a) < (b)) ? (a) : (b)) @@ -119,7 +122,7 @@ int sopen_SCP_write(HDRTYPE* hdr) { disable channels with physical units other than Voltage. The number of channels for conversion is stored in NS. */ - typeof(hdr->NS) NS = 0, k; + uint16_t NS = 0, k; for (k=0; k < hdr->NS; k++) { CHANNEL_TYPE *CH=hdr->CHANNEL+k; @@ -533,7 +536,7 @@ int sopen_SCP_write(HDRTYPE* hdr) { { uint16_t GDFTYP = 3; size_t SZ = GDFTYP_BITS[GDFTYP]>>3; - typeof(hdr->NS) i=0; + uint16_t i=0; for (i = 0; i < hdr->NS; i++) { CHANNEL_TYPE *hc=hdr->CHANNEL+i; if (hc->OnOff != 1) continue; diff --git a/biosig4c++/t230/sopen_hl7aecg.cpp b/biosig4c++/t230/sopen_hl7aecg.cpp index 95122da1..d6764b94 100644 --- a/biosig4c++/t230/sopen_hl7aecg.cpp +++ b/biosig4c++/t230/sopen_hl7aecg.cpp @@ -20,7 +20,12 @@ #include // system includes #include // for strtod(3) +#ifdef _WIN32 +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#else #include +#endif #include "../biosig.h" #if defined(WITH_LIBTINYXML) @@ -771,8 +776,8 @@ EXTERN_C int sopen_HL7aECG_read(HDRTYPE* hdr) { if ((N+3) > N_Event) { N_Event = max(16,2*(N+2)); - hdr->EVENT.TYP = (typeof(hdr->EVENT.TYP)) realloc(hdr->EVENT.TYP,N_Event*sizeof(*hdr->EVENT.TYP)); - hdr->EVENT.POS = (typeof(hdr->EVENT.POS)) realloc(hdr->EVENT.POS,N_Event*sizeof(*hdr->EVENT.POS)); + hdr->EVENT.TYP = realloc(hdr->EVENT.TYP,N_Event*sizeof(*hdr->EVENT.TYP)); + hdr->EVENT.POS = realloc(hdr->EVENT.POS,N_Event*sizeof(*hdr->EVENT.POS)); } TiXmlHandle Boundary = Annotation.FirstChild("support").FirstChild("supportingROI").FirstChild("component").FirstChild("boundary").FirstChild("value"); diff --git a/biosig4c++/win32/getdelim.c b/biosig4c++/win32/getdelim.c index 65323c89..de340e08 100644 --- a/biosig4c++/win32/getdelim.c +++ b/biosig4c++/win32/getdelim.c @@ -30,6 +30,11 @@ #include #include +#if defined(_MSC_VER) +# include +typedef SSIZE_T ssize_t; +#endif + #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif diff --git a/biosig4c++/win32/getline.c b/biosig4c++/win32/getline.c index 35cacb01..25b0cc2b 100644 --- a/biosig4c++/win32/getline.c +++ b/biosig4c++/win32/getline.c @@ -20,6 +20,13 @@ #include +#if defined(_MSC_VER) +# include +typedef SSIZE_T ssize_t; +#endif + +ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp); + ssize_t getline (char **lineptr, size_t *n, FILE *stream) { diff --git a/biosig4c++/win32/getlogin.c b/biosig4c++/win32/getlogin.c index cc8fee40..3a1a8864 100644 --- a/biosig4c++/win32/getlogin.c +++ b/biosig4c++/win32/getlogin.c @@ -20,14 +20,14 @@ // #include /* Specification. */ -#include - #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include /* Don't assume that UNICODE is not defined. */ # undef GetUserName # define GetUserName GetUserNameA +#else +# include #endif char * -- 2.53.0.windows.1 stimfit-0.17.1/cmake/triplets/000077500000000000000000000000001517235503400162125ustar00rootroot00000000000000stimfit-0.17.1/cmake/triplets/x64-windows-ci-release.cmake000066400000000000000000000002031517235503400233270ustar00rootroot00000000000000set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_BUILD_TYPE release) stimfit-0.17.1/dist/000077500000000000000000000000001517235503400142275ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/000077500000000000000000000000001517235503400153135ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/7-zip-cl/000077500000000000000000000000001517235503400166555ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/7-zip-cl/bld.bat000066400000000000000000000000461517235503400201060ustar00rootroot00000000000000copy %SRC_DIR%\7za.exe %LIBRARY_BIN%\ stimfit-0.17.1/dist/conda/7-zip-cl/meta.yaml000066400000000000000000000005301517235503400204650ustar00rootroot00000000000000package: name: 7-zip-cl version: "9.20" source: fn: 7za920.zip url: "http://downloads.sourceforge.net/sevenzip/7za920.zip" build: number: 0 about: home: http://www.7-zip.org license: LGPL + unRAR restriction summary: "7-Zip is a file archiver with a high compression ratio. This is the command line version." stimfit-0.17.1/dist/conda/7-zip/000077500000000000000000000000001517235503400162615ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/7-zip/bld.bat000066400000000000000000000003221517235503400175070ustar00rootroot00000000000000%LIBRARY_BIN%\7za.exe e %SRC_DIR%\7z920.msi _7z.exe -o%LIBRARY_BIN% %LIBRARY_BIN%\7za.exe e %SRC_DIR%\7z920.msi _7zip.dll -o%LIBRARY_BIN% ren %LIBRARY_BIN%\_7z.exe 7z.exe ren %LIBRARY_BIN%\_7zip.dll 7zip.dll stimfit-0.17.1/dist/conda/7-zip/meta.yaml000066400000000000000000000006651517235503400201020ustar00rootroot00000000000000package: name: 7-zip version: "9.20" source: fn: 7z920.msi url: "http://downloads.sourceforge.net/sevenzip/7z920.msi" # [win32] url: "http://downloads.sourceforge.net/sevenzip/7z920-x64.msi" # [win64] requirements: build: - 7-zip-cl build: number: 0 about: home: http://www.7-zip.org license: LGPL + unRAR restriction summary: "7-Zip is a file archiver with a high compression ratio." stimfit-0.17.1/dist/conda/biosig/000077500000000000000000000000001517235503400165675ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/biosig/bld.bat000066400000000000000000000006631517235503400200250ustar00rootroot00000000000000setlocal EnableDelayedExpansion if %ARCH% equ 64 (set SDKPLATFORM=x64) else (set SDKPLATFORM=x86) call "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.Cmd" /Release /%SDKPLATFORM% if %ARCH% equ 64 (set PLATFORM=x64) else (set PLATFORM=win32) cd %SRC_DIR%\lib lib /def:libbiosig2.def copy %SRC_DIR%\lib\libbiosig2.lib %LIBRARY_LIB%\ copy %SRC_DIR%\lib\libbiosig2.dll %LIBRARY_BIN%\ xcopy %SRC_DIR%\include\*.h %LIBRARY_INC%\ stimfit-0.17.1/dist/conda/biosig/meta.yaml000066400000000000000000000005501517235503400204010ustar00rootroot00000000000000package: name: biosig version: "1.6.4" source: fn: biosig-1.6.4-VS2008-x64.zip # [win64] url: "http://www.stimfit.org/libs/biosig-1.6.4-VS2008-x64.zip" # [win64] build: number: 0 about: home: http://biosig.sourceforge.net/ license: GPLv3 summary: "BioSig is an open source software library for biomedical signal processing." stimfit-0.17.1/dist/conda/clapack/000077500000000000000000000000001517235503400167115ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/clapack/bld.bat000066400000000000000000000000441517235503400201400ustar00rootroot00000000000000copy %SRC_DIR%\*.lib %LIBRARY_LIB%\ stimfit-0.17.1/dist/conda/clapack/meta.yaml000066400000000000000000000011001517235503400205130ustar00rootroot00000000000000package: name: clapack version: "3.1.1" source: fn: CLAPACK-VS2008-x64.zip # [win64] url: "http://www.stimfit.org/libs/CLAPACK-VS2008-x64.zip" # [win64] build: number: 0 about: home: http://www.netlib.org/clapack/ license: Modified BSD summary: "The CLAPACK library was built using a Fortran to C conversion utility called f2c. The entire Fortran 77 LAPACK library is run through f2c to obtain C code, and then modified to improve readability. CLAPACK's goal is to provide LAPACK for someone who does not have access to a Fortran compiler." stimfit-0.17.1/dist/conda/fftw/000077500000000000000000000000001517235503400162615ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/fftw/bld.bat000066400000000000000000000001531517235503400175110ustar00rootroot00000000000000copy %SRC_DIR%\*.lib %LIBRARY_LIB%\ copy %SRC_DIR%\*.dll %LIBRARY_BIN%\ xcopy %SRC_DIR%\*.h %LIBRARY_LIB%\ stimfit-0.17.1/dist/conda/fftw/meta.yaml000066400000000000000000000010061517235503400200700ustar00rootroot00000000000000package: name: fftw version: "3.3.4" source: fn: fftw-3.3.4-VS2008-x64.zip # [win64] url: "http://www.stimfit.org/libs/fftw-3.3.4-VS2008-x64.zip" # [win64] build: number: 0 about: home: http://www.fftw.org/ license: GPL summary: "FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST)." stimfit-0.17.1/dist/conda/hdf5-dll/000077500000000000000000000000001517235503400167125ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/hdf5-dll/bld.bat000066400000000000000000000015601517235503400201450ustar00rootroot00000000000000%LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\bin\hdf5.dll -o%LIBRARY_BIN% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\bin\hdf5_hl.dll -o%LIBRARY_BIN% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\bin\zlib.dll -o%LIBRARY_BIN% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\bin\szip.dll -o%LIBRARY_BIN% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\lib\hdf5.lib -o%LIBRARY_LIB% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\lib\hdf5_hl.lib -o%LIBRARY_LIB% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\lib\zlib.lib -o%LIBRARY_LIB% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\lib\szip.lib -o%LIBRARY_LIB% %LIBRARY_BIN%\7z.exe e %SRC_DIR%\HDF5-1.8.13-win%ARCH%.exe $_OUTDIR\include\*.h -o%LIBRARY_INC% stimfit-0.17.1/dist/conda/hdf5-dll/meta.yaml000066400000000000000000000011051517235503400205210ustar00rootroot00000000000000package: name: hdf5-dll version: "1.8.13" source: fn: hdf5-1.8.13-win32-VS2008-shared.zip # [win32] fn: hdf5-1.8.13-win64-VS2008-shared.zip # [win64] url: "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/bin/windows/hdf5-1.8.13-win32-VS2008-shared.zip" # [win32] url: "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/bin/windows/hdf5-1.8.13-win64-VS2008-shared.zip" # [win64] requirements: build: - 7-zip build: number: 0 about: home: http://www.hdfgroup.org license: BSD-style summary: "HDF5 file format libary" stimfit-0.17.1/dist/conda/py-stfio-debug/000077500000000000000000000000001517235503400201515ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/py-stfio-debug/bld.bat000066400000000000000000000054601517235503400214070ustar00rootroot00000000000000:: Need to enabled delayed variable expansion so that variables are evaluated when each line is executed, rather :: than when this file is initially parsed. Otherwise, SDKPLATFORM and PLATFORM will not be defined when evaluated setlocal EnableDelayedExpansion :: Generate the arch-specific arguments for SetEnv.cmd and msbuild if %ARCH% equ 64 (set SDKPLATFORM=x64) else (set SDKPLATFORM=x86) if %ARCH% equ 64 (set PLATFORM=x64) else (set PLATFORM=win32) :: Run the Windows SDK SetEnv.cmd to setup the appropriate paths, etc. to build the VC solution call "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.Cmd" /Debug /%SDKPLATFORM% :: When building in debug mode, pyconfig.h will insist on linking to the debug version of the python library :: (python27_d.lib), which is not included in most distributions. This patch makes it use the release version :: instead. Note that this only affects debugging info for the core python code. You will still be able to step :: through the stfio code line by line :: :: This obviously depends on "patch" being available. I believe it should be since conda needs to be able to apply :: patches. patch %PREFIX%\include\pyconfig.h %RECIPE_DIR%\pyconfig.patch :: Build the Debug configuration of the pystfio project msbuild %SRC_DIR%\dist\windows\VS2008\Stimfit\Stimfit.sln /t:pystfio /p:Configuration=Debug /p:Platform=%PLATFORM% :: Reverse the pyconfig.h patch now that the build is done patch -R %PREFIX%\include\pyconfig.h %RECIPE_DIR%\pyconfig.patch :: Create the stfio site-packages directory and copy over the relevant files. The current conda practice is to put :: the required DLLs in the same location, so these are copied too. mkdir %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\__init__.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio_plot.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio_neo.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio.py %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\_stfio.pyd %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\_stfio.pdb %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\libstfio.dll %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\libstfio.pdb %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\libstfnum.dll %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Debug\libstfnum.pdb %SP_DIR%\stfio :: The hdf5-dll, biosig and fftw conda packages put their DLLs in %LIBRARY_BIN%. Since pystfio depends on these, :: need to copy them too copy %LIBRARY_BIN%\hdf5.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\hdf5_hl.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\zlib.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\szip.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\libbiosig2.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\libfftw3-3.dll %SP_DIR%\stfio stimfit-0.17.1/dist/conda/py-stfio-debug/meta.yaml.in000066400000000000000000000016121517235503400223700ustar00rootroot00000000000000package: name: py-stfio-debug version: "@PACKAGE_VERSION@" source: # Since this recipe is part of the git repo, the source is just a local path path: ../../.. patches: # Need to change the HDF5DIR, BIOSIGDIR, PYTHONDIR, BOOSTDIR, etc. user macros set in the config.vsprops files so that # the Conda package versions are used. Also, since conda builds in it's own build directory, the Boost directory needs # to be changed to an absolute path - vsprops.patch requirements: build: - hdf5-dll - biosig - fftw - clapack - python - numpy run: - python - numpy build: number: 0 about: home: https://github.com/neurodroid/stimfit license: GPL summary: "The stfio Python module allows to read and write data in common electrophysiology formats without running Stimfit." stimfit-0.17.1/dist/conda/py-stfio-debug/pyconfig.patch000066400000000000000000000007241517235503400230130ustar00rootroot00000000000000--- pyconfig.h Sun Jun 29 22:05:46 2014 +++ pyconfig_nodebug.h Sat Nov 22 01:55:51 2014 @@ -323,7 +323,7 @@ their Makefile (other compilers are generally taken care of by distutils.) */ # ifdef _DEBUG -# pragma comment(lib,"python27_d.lib") +# pragma comment(lib,"python27.lib") # else # pragma comment(lib,"python27.lib") # endif /* _DEBUG */ @@ -365,7 +365,7 @@ #endif #ifdef _DEBUG -# define Py_DEBUG +//# define Py_DEBUG #endif stimfit-0.17.1/dist/conda/py-stfio-debug/vsprops.patch000066400000000000000000000044731517235503400227160ustar00rootroot00000000000000diff --git dist/windows/VS2008/libstfio/Config.vsprops dist/windows/VS2008/libstfio/Config.vsprops index 3b0c0ea..98ffe3f 100755 --- dist/windows/VS2008/libstfio/Config.vsprops +++ dist/windows/VS2008/libstfio/Config.vsprops @@ -6,19 +6,19 @@ > diff --git dist/windows/VS2008/pystfio/Config.vsprops dist/windows/VS2008/pystfio/Config.vsprops index be1b192..9ced898 100755 --- dist/windows/VS2008/pystfio/Config.vsprops +++ dist/windows/VS2008/pystfio/Config.vsprops @@ -11,18 +11,18 @@ /> diff --git dist/windows/VS2008/libstfnum/Config.vsprops dist/windows/VS2008/libstfnum/Config.vsprops index be1b192..9ced898 100755 --- dist/windows/VS2008/libstfnum/Config.vsprops +++ dist/windows/VS2008/libstfnum/Config.vsprops @@ -6,23 +6,23 @@ > stimfit-0.17.1/dist/conda/py-stfio/000077500000000000000000000000001517235503400170655ustar00rootroot00000000000000stimfit-0.17.1/dist/conda/py-stfio/bld.bat000066400000000000000000000036051517235503400203220ustar00rootroot00000000000000:: Need to enabled delayed variable expansion so that variables are evaluated when each line is executed, rather :: than when this file is initially parsed. Otherwise, SDKPLATFORM and PLATFORM will not be defined when evaluated setlocal EnableDelayedExpansion :: Generate the arch-specific arguments for SetEnv.cmd and msbuild if %ARCH% equ 64 (set SDKPLATFORM=x64) else (set SDKPLATFORM=x86) if %ARCH% equ 64 (set PLATFORM=x64) else (set PLATFORM=win32) :: Run the Windows SDK SetEnv.cmd to setup the appropriate paths, etc. to build the VC solution call "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.Cmd" /Release /%SDKPLATFORM% :: Build the Release configuration of the pystfio project msbuild %SRC_DIR%\dist\windows\VS2008\Stimfit\Stimfit.sln /t:pystfio /p:Configuration=Release /p:Platform=%PLATFORM% :: Create the stfio site-packages directory and copy over the relevant files. The current conda practice is to put :: the required DLLs in the same location, so these are copied too. mkdir %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\__init__.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio_plot.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio_neo.py %SP_DIR%\stfio copy %SRC_DIR%\src\pystfio\stfio.py %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Release\_stfio.pyd %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Release\libstfio.dll %SP_DIR%\stfio copy %SRC_DIR%\dist\windows\VS2008\Stimfit\%PLATFORM%\Release\libstfnum.dll %SP_DIR%\stfio :: The hdf5-dll, biosig and fftw conda packages put their DLLs in %LIBRARY_BIN%. Since pystfio depends on these, :: need to copy them too copy %LIBRARY_BIN%\hdf5.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\hdf5_hl.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\zlib.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\szip.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\libbiosig2.dll %SP_DIR%\stfio copy %LIBRARY_BIN%\libfftw3-3.dll %SP_DIR%\stfio stimfit-0.17.1/dist/conda/py-stfio/meta.yaml.in000066400000000000000000000016041517235503400213050ustar00rootroot00000000000000package: name: py-stfio version: "@PACKAGE_VERSION@" source: # Since this recipe is part of the git repo, the source is just a local path path: ../../.. patches: # Need to change the HDF5DIR, BIOSIGDIR, PYTHONDIR, BOOSTDIR, etc. user macros set in the config.vsprops files so that # the Conda package versions are used. Also, since conda builds in it's own build directory, the Boost directory needs # to be changed to an absolute path - vsprops.patch requirements: build: - hdf5-dll - biosig - fftw - clapack - python - numpy run: - python - numpy build: number: 0 about: home: https://github.com/neurodroid/stimfit license: GPL summary: "The stfio Python module allows to read and write data in common electrophysiology formats without running Stimfit." stimfit-0.17.1/dist/conda/py-stfio/vsprops.patch000066400000000000000000000044731517235503400216320ustar00rootroot00000000000000diff --git dist/windows/VS2008/libstfio/Config.vsprops dist/windows/VS2008/libstfio/Config.vsprops index 3b0c0ea..98ffe3f 100755 --- dist/windows/VS2008/libstfio/Config.vsprops +++ dist/windows/VS2008/libstfio/Config.vsprops @@ -6,19 +6,19 @@ > diff --git dist/windows/VS2008/pystfio/Config.vsprops dist/windows/VS2008/pystfio/Config.vsprops index be1b192..9ced898 100755 --- dist/windows/VS2008/pystfio/Config.vsprops +++ dist/windows/VS2008/pystfio/Config.vsprops @@ -11,18 +11,18 @@ /> diff --git dist/windows/VS2008/libstfnum/Config.vsprops dist/windows/VS2008/libstfnum/Config.vsprops index be1b192..9ced898 100755 --- dist/windows/VS2008/libstfnum/Config.vsprops +++ dist/windows/VS2008/libstfnum/Config.vsprops @@ -6,23 +6,23 @@ > stimfit-0.17.1/dist/macosx/000077500000000000000000000000001517235503400155215ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/app.r000066400000000000000000005400321517235503400164700ustar00rootroot00000000000000data 'icns' (-16455) { $"6963 6E73 0000 FFFB 6838 6D6B 0000 0908" $"0000 0054 AFAD A69F 9891 8B84 7D76 6F69" $"625B 544D 4740 3932 2B17 0000 0001 0100" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0027 BFF9 F5F7 F7F8 F8F9 F9F9 F9FA FAFA" $"FAFA FBFB FAF9 F8F8 F9F5 98B3 D7F5 F4EE" $"E9E2 DBD4 CDC6 BFB9 B2AB A39C 948D 3400" $"009A FAEF DFE3 E4E4 E4E4 E4E4 E4E4 E3E3" $"E3E3 E2E8 F3F3 FDFE FDFE F6F3 F1EA EAEA" $"EBEB ECEC EDF2 F1F0 EFEF EEEE EEEE 9300" $"008D FAF0 DEE1 E2E2 E2E2 E2E1 E1E1 E0E0" $"DFDF DFE4 F3F4 FEFE FDFE F4EF ECE2 E1E1" $"E1E1 E2E1 E1EC EDED EDED EEEE EEEE 8600" $"007C FAF2 DDE0 E0E0 E0E0 E0E0 E0E0 DFDF" $"DFDF DEE4 F3F3 FEFE FDFE F4EF ECE1 E1E1" $"E1E1 E2E1 E1EC EDED EDED EEEE EEEE 7800" $"006A FAF3 DDDF DFDF DFDF DFDF DFDF DFDF" $"DEDE DEE3 F2F3 FEFE FDFE F4EF ECE1 E1E1" $"E1E1 E1E1 E2ED EDED EDED EEEE EEEE 6A00" $"0059 FBF5 DDDE DEDE DEDE DEDE DEDE DEDE" $"DDDD DDE2 F2F3 FDFD FDFD F4EF ECE0 E0E0" $"E0E0 E1E1 E2EC ECEC ECED EDED EDED 5C00" $"0047 FBF6 DEDD DDDE DEDE DEDD DEDE DEDE" $"DEDE DDE2 F2F3 FEFE FDFE F4EF ECE0 E0E1" $"E1E1 E1E1 E2ED EDED EDED EEEE EEEE 4F00" $"0036 FBF7 DFDC DDDD DDDD DDDD DDDD DDDD" $"DDDD DDE1 F2F2 FEFE FDFE F4EF ECDF E0E1" $"E1E1 E1E1 E3ED EDED EDED EEEE EEEE 4100" $"0024 FBF8 DFDC DCDC DDDD DDDC DDDD DDDD" $"DDDD DCE1 F1F2 FEFE FDFE F4EF ECDF E0E0" $"E1E1 E1E1 E3ED EDED EDED EEEE EEEE 3300" $"0013 FBF9 E1DB DCDC DCDC DCDC DCDD DDDD" $"DDDD DCE0 F1F2 FEFE FDFE F4EF EBDF E0E0" $"E1E1 E1E1 E3ED EDED EDED EEEE EEEE 2500" $"0005 F8F9 E2DB DCDC DCDC DCDB DCDC DCDC" $"DDDD DCE0 F1F2 FDFE FDFE F4EF EBDF E0E0" $"E1E1 E1E1 E4ED EDED EDED EEEE EEEE 1600" $"0000 EBF9 E4DB DBDB DBDB DBDB DBDB DBDC" $"DCDC DCE0 F1F2 FDFD FDFD F3EF EBDF DFE0" $"E0E0 E1E1 E4EC ECEC EDED EDED EDEE 0800" $"0000 DBF9 E6DA DBDB DBDC DCDB DCDC DCDC" $"DCDD DCDF F1F2 FDFE FDFE F3EF EBDE E0E0" $"E1E1 E2E1 E5ED EDED EDED EEEE EEE7 0200" $"0000 C9FA E8DB DBDB DBDB DCDB DCDC DCDC" $"DCDD DCDF F1F2 FDFE FDFE F4EF EBDE E0E1" $"E1E1 E2E1 E5ED EDED EDED EEEE EEDC 0000" $"0000 B8FA EADB DBDB DBDB DCDB DCDC DCDC" $"DCDD DCDF F1F2 FDFE FDFE F4F0 EBDE E0E1" $"E1E1 E2E1 E6ED EDED EEED EEEE EECE 0000" $"0000 A7FA ECDB DBDB DBDB DCDB DCDC DCDC" $"DCDD DCDF F1F2 FDFE FDFE F4F0 EBDF E0E1" $"E1E1 E2E1 E6ED EDED EEED EEEE EEC0 0000" $"0000 95FA EEDB DBDB DBDB DCDB DCDC DCDC" $"DDDD DCDE F1F2 FDFE FDFE F4F0 EBDF E0E1" $"E1E2 E2E2 E7ED EDED EEED EEEE EEB2 0000" $"0000 84FA EFDB DADA DBDB DBDB DBDB DBDC" $"DCDD DDDF F1F2 FCFD FDFD F6F3 F1EA EDEE" $"F0F2 F3F4 F5F2 EFEE EDED EDEE EEA4 0000" $"0000 72FB F1DC DBDC DDDE DFE1 E3E5 E7E9" $"EBED EFF1 F2F1 F4F9 FDFE FCFB FAF7 F8F8" $"F8F8 F8F8 F8F8 F8F7 F4F1 EFEE EE96 0000" $"0000 24F5 F9F0 F1F3 F4F5 F6F6 F6F6 F7F7" $"F7F7 F6F7 F6F5 F2F2 F3F8 F9FC FBFA FAFB" $"FBFC FCFD FDFB FAF9 F9F9 F6E0 C64E 0000" $"0000 0081 FCF7 F7F7 F7F7 F7F7 F7F8 F9F9" $"FAFA FBFB F8F7 F9FB FCFD FAFA FDFD FEFD" $"FDFD FCFB FBFC FCFB BC51 0500 0000 0000" $"0000 055F F8FB FBFB FCFD FDFD FEFE FEFE" $"FEFE FDFE FDFB EFFB F9F8 F7F7 F7F8 F7F7" $"F7F7 F7F7 F7FA FAFA FAFA DE8D 3A02 0000" $"0000 4EF7 F9FD FDFD FDFD FDFC FBFB FAF9" $"F9F8 F7F7 FBFB F9F6 F2F1 F1F3 F5F5 F5F5" $"F5F6 F6F6 F6F8 F8F7 F7F6 F5F4 F3D2 0E00" $"0000 45F8 F5F7 F8F7 F6F5 F5F5 F5F5 F5F5" $"F5F5 F5F5 FAFB FCFD FAF3 F0EF F0F2 F2F0" $"EFED EBEA E8EF EEEE EEEE EEEE EEEF 1A00" $"0000 34FA F5F4 F4F4 F4F4 F4F4 F4F4 F4F3" $"F2F1 EFEE F7F7 FAFE FDFD F1F0 EFE6 E4E3" $"E3E3 E3E3 E4ED EEEE EEEE EFEF EFEF 0B00" $"0000 22FB F6F3 F2F1 EFEE ECE9 E8E6 E4E1" $"E0DF DFE0 F2F3 F8FE FDFE F2F0 EFE4 E1E2" $"E2E3 E3E3 E5EE EEEE EEEE EFEF EFE9 0300" $"0000 10FB F7E5 E2E2 E1E1 E0DF DEDD DDDD" $"DEDE DEE0 F2F3 F8FE FDFE F2F0 F0E4 E1E2" $"E3E3 E3E3 E5EE EEEE EEEE EFEF EFDE 0000" $"0000 05F5 F8E1 DCDD DDDD DDDD DDDE DEDE" $"DEDE DEDF F1F3 F8FE FDFE F2F0 F0E4 E1E2" $"E3E3 E4E3 E6EE EEEE EFEE EFEF EFD0 0000" $"0000 00E9 F9E2 DCDC DCDC DDDD DDDD DDDE" $"DEDE DEDF F1F3 F8FD FDFD F2F0 F0E4 E2E2" $"E2E3 E3E3 E6ED EDEE EEEE EEEF EFC2 0000" $"0000 00D8 F9E4 DDDD DDDD DEDD DEDE DEDE" $"DFDF DFE0 F1F3 F8FE FDFE F3F1 F0E4 E2E3" $"E3E4 E4E4 E7EE EEEE EFEE EFEF F0B3 0000" $"0000 00C6 FAE6 DDDD DEDE DEDD DEDE DEDF" $"DFDF DFE0 F1F3 F8FE FDFE F3F1 F0E4 E2E3" $"E3E4 E4E4 E8EE EEEF EFEE EFEF F0A4 0000" $"0000 00B5 FAE8 DDDE DEDE DEDE DEDF DFDF" $"DFDF DFE0 F1F3 F8FE FDFE F2F1 F0E4 E2E3" $"E4E4 E4E4 E8EE EEEF EFEE EFF0 F096 0000" $"0000 00A4 FAEA DEDE DEDE DEDE DFDF DFDF" $"DFE0 DFE0 F0F3 F8FE FDFE F3F1 F0E4 E3E4" $"E4E4 E5E4 E8EE EFEF EFEF EFF0 F087 0000" $"0000 0092 FAEC DEDE DEDE DFDE DFDF DFDF" $"E0E0 E0E0 F0F3 F7FE FDFE F3F1 F0E4 E3E3" $"E3E4 E6E8 EBEE EFEF EFEF F0F0 F078 0000" $"0000 0081 FBED DEDE DFDF DFDE DFDF E0E0" $"E0E0 E0E1 F0F3 F7FE FDFE F3F1 F1E7 E9EC" $"EEF0 F1F1 F1EE EDEE EFEF F0F0 F06A 0000" $"0000 006F FBEF DFDE DEDE DFDF DFDF DFDF" $"DFE0 E0E1 F0F3 F6FD FDFD F8F7 F7F1 F0F1" $"F1F1 F1F1 F1F1 F0ED EFEF EFEF F05C 0000" $"0000 005D FBF1 DFDF DEDE DFDF DFE0 E3E6" $"E9EB EEEF EEF2 F4F8 FDFE F9F8 F7F1 F1F2" $"F2F2 F2F1 F2F2 F3F2 EFEE EFF0 F04D 0000" $"0000 004C FBF2 DFE0 E2E5 E8EB EDEF EFF0" $"F0F0 EFF0 EFEF F3F4 F9FE F9F8 F7F1 F1F2" $"F2F2 F2F2 F2F3 F3F3 F2F1 EEF0 F13F 0000" $"0000 0021 FCF8 EEEE EFEF EFEF F0F0 F0F0" $"F0F0 EFF0 F0EF EFF3 F5FA F9F8 F7F1 F1F2" $"F2F2 F2F2 F3F3 F3F3 F3F3 F3EF EF2F 0000" $"0000 0000 D4FA F0EF EFEF F0EF F0F0 F0F0" $"F0F0 EFF0 F0F1 EFF0 F4F5 AEF9 F8F1 F2F2" $"F2F2 F3F2 F3F3 F3F3 F3F4 E9B8 7D06 0000" $"0000 0000 8AFA F0F0 F0F0 F0EF F0F0 F0F0" $"F0F0 F0F0 F1F1 F1EF F1F5 17AC F8F2 F2F2" $"F2F3 F3F2 F3F0 C894 602C 0200 0000 0000" $"0000 0000 40FB F1EF EFEF EFEF EFEF EFEF" $"F0F0 F0F0 F0F0 F0F0 EFF3 1207 B8F2 F1F2" $"F2D9 A571 3D0C 0000 0000 0000 0000 0000" $"0000 0000 06ED F1F0 F0F0 F0EF F0F0 F0F0" $"F0F1 F0F1 F1F1 F1F1 F1C8 0500 0C92 824D" $"1A00 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 00AA F2F0 F0F0 F0EF F0F0 F0F1" $"F1F1 F1F1 E3B2 814D 1B00 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0061 F3F0 F0F0 F0F0 F0F1 F1EA" $"BF8C 5A26 0200 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0019 F3F0 F0F0 EFCB 9866 3207" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 87A4 713F 0E00 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"4943 4E23 0000 0108 FFFF FFFF DDDD 5555" $"FFFF AAAB F777 5555 FFFF AAAB DFDF 5555" $"FFFF AAAB F777 5555 FFFF AAAB DDDD 5555" $"FFFF AAAB F777 5555 FFFF AAAB DFDF 5555" $"FFFF AAAB F777 5555 8000 FFFF D555 5555" $"A222 FFFF D555 5555 8808 FFFF D555 5555" $"A222 FFFF D555 5555 8000 FFFF D555 5555" $"A222 FFFF D555 5555 8808 FFFF D555 5555" $"A222 FFFF FFFF FFFF 0000 0000 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 7FFF FFFE 7FFF FFFE 7FFF FFFE" $"7FFF FFFE 0000 0000 6968 3332 0000 1780" $"0900 284B 87E4 F1F1 F0F1 F281 F180 F024" $"EEEE EFED EBED EDDC D78E 383F 4147 534C" $"3946 4733 3A41 352D 3835 212C 3225 011A" $"341F 4FE9 FE82 FF00 FE80 FF81 FE22 FFFE" $"FEFC F9F6 EF60 2B29 6662 6055 5457 524D" $"5256 4A50 564E 4E57 5754 2318 1C03 41E1" $"FE82 FF00 FE83 FF13 FEFE FBF1 DFD8 D2CC" $"3F16 1E8B 7269 615C 5754 524B 844A 0849" $"5229 1F15 0037 DBFE 82FF 00FE 83FF 18FE" $"FDF1 E8D7 D2CE C93F 1822 8C73 6C66 615D" $"5B5A 4D4C 4B4B 4A4A 8049 0751 2F16 1700" $"2DD4 FE82 FF00 FE83 FF23 FEFB E9E2 D3CF" $"CBC7 3F18 2287 6E68 635F 5C5A 594C 4C4B" $"4B4A 4A49 4948 5423 131E 0024 CDFE 82FF" $"00FE 83FF 16FE F8E3 DDCF CBC9 C63E 1822" $"806A 6560 5D5B 5958 4C4B 4B4A 8149 0748" $"5122 0D22 001B C48A FE18 FCF2 DED9 CBC8" $"C6C3 3E18 2277 6662 5E5C 5958 574B 4B4A" $"4A49 4980 4807 531E 022E 0013 BBFE 82FF" $"00FE 80FF 16FE FEFA F6ED D9D5 C8C5 C3C2" $"3E18 226F 635F 5C5A 5857 564B 804A 0149" $"4980 4807 5812 0031 000C B1FE 82FF 19FE" $"FFFE FEFB F7F3 F0E8 D5D2 C4C2 C1C0 3D18" $"2268 605D 5B59 5756 5580 4A01 4949 8048" $"0847 560E 0030 0007 A6FC 82FE 1DFD FCFA" $"F7F4 F1EE EBE4 D1CF C1C0 C0BF 3D18 2363" $"5D5B 5958 5756 544A 4A49 4980 480A 4747" $"6002 0030 0004 9AF3 F780 F81B F7F5 F4F2" $"F0ED EBE9 E7E1 CECD BFBF BEBE 3C17 235E" $"5B59 5857 5655 534A 8049 1C48 4847 4746" $"5C00 002F 0302 8EEA EFEF F0F0 EFEE EDEB" $"EAE8 E6E5 E3DF CCCA 81BD 0A3C 1723 5B59" $"5857 5655 5552 8049 0048 8147 0946 5800" $"0028 0801 82E2 E881 E919 E8E7 E6E5 E4E2" $"E1E0 DCC9 C8BC BBBB BC3A 1723 5858 5756" $"5554 5451 8048 8047 0B46 4645 5600 0022" $"0E01 76DC E282 E309 E2E2 E1E0 DFDE DEDA" $"C8C7 80BA 07BB 3A17 2356 5756 5580 5400" $"5080 4880 470C 4646 4A4B 0000 230E 0169" $"D6DE DE82 DF08 DEDE DDDC DCDB D9C5 C480" $"B90F BA39 1623 5456 5554 5453 534F 4848" $"4747 8046 0A45 4848 0000 220D 005E D1DA" $"85DB 80DA 03D9 D7C4 C380 B807 B939 1623" $"5355 5454 8053 014E 4880 470D 4646 4545" $"4B41 0000 2211 0052 CDD7 80D8 81D9 82D8" $"02D6 C2C2 80B7 0DB8 3816 2351 5454 5353" $"5252 4E47 4780 4680 4508 4C3B 0000 1B13" $"0047 C880 D587 D602 D5C1 C180 B60C B737" $"1523 5153 5352 5251 514C 4780 4680 450C" $"444A 3C00 001A 1900 3DC4 D2D3 D381 D483" $"D502 D3C0 C080 B50D B635 121D 4546 4443" $"4140 3E3E 4143 8045 8044 084D 3400 0017" $"1900 33BF 80D0 14CF CECD CBCA C8C6 C5C3" $"C1BF BEBF BDB8 B4B4 2E09 1537 833B 803A" $"023B 3E41 8043 104C 2F00 000C 2502 24A7" $"B8B7 B6B6 B5B5 B6B6 80B7 80B8 10B9 BABD" $"BEBD B82E 0713 3438 3737 3636 3535 8036" $"0633 2F2E 3538 4C2D 8000 0623 141A 9BB1" $"B2B2 85B3 24B2 B2B3 B6B7 B6B4 B3B1 2602" $"0B2A 2B27 221E 1915 100B 0705 2132 4352" $"5630 0700 0002 3E1C 1693 82AB 80AC 10AB" $"A9A5 9F97 8C7F 726B 554E 4107 0303 0404" $"8003 4704 060A 0D13 191E 2437 4B5B 683E" $"0000 0534 030C 7E99 9187 7A6C 5E4F 4033" $"261B 110A 0600 0004 0C15 232A 1B17 1D23" $"292F 353B 3E40 3E40 4245 484B 4E51 5B69" $"0000 032B 0205 1012 0C08 0681 0520 070C" $"1829 3B4C 596B 7C8D 7C2A 1A2B 3C45 4B4E" $"5257 5C60 615A 5957 5553 5150 4E4D 6380" $"0024 3301 060C 1828 3A4B 5E70 8395 A7B6" $"C1CA D1D8 D6DC DDDD DFCF 1C19 2059 8373" $"6D65 5F5B 594F 4F80 4E04 4D4D 4C4B 5C80" $"001E 3000 35A3 BAC3 CAD2 DAE2 E9F1 F7F9" $"F8F4 F0EB D5D1 C8C0 BFBC 2019 1B44 5B5A" $"5A80 5901 574F 804E 054D 4D4C 4C4F 5380" $"000C 2F00 18C7 F8F6 F3EF EBE7 E3DF DC81" $"DB0B DAC8 C7C2 BDBD BB20 181A 445A 8059" $"0658 5856 4E4E 4D4D 804C 024B 4E4F 8000" $"0329 0608 AA80 D601 D7D7 80D8 81D9 0DDA" $"D9C7 C6C1 BBBC BA1F 181A 4459 5981 5800" $"5580 4D80 4C03 4B4B 5143 8000 0629 0804" $"9FD4 D5D5 80D6 80D7 82D8 09C5 C4BF BABA" $"B91F 1719 4480 5880 5701 544D 804C 054B" $"4B4A 4A50 3E80 0004 250B 0293 D380 D480" $"D580 D680 D70B D6C4 C3BE B9B9 B71E 1719" $"4458 8057 0256 5653 804C 064B 4B4A 4A49" $"4F3E 8000 0720 1001 85D1 D2D3 D381 D483" $"D50B C3C1 BDB8 B8B6 1D16 1944 5757 8156" $"0352 4C4B 4B80 4A03 4949 5134 8000 0821" $"1100 78CF D1D1 D2D2 81D3 82D4 09C2 C0BC" $"B6B6 B41C 1618 4480 5680 550A 514B 4B4A" $"4A49 4948 4851 2F80 0006 200F 006C CDD0" $"D081 D182 D20C D3D2 C1BF BBB5 B5B3 1C15" $"1844 5680 5502 5454 5080 4A06 4949 4848" $"474F 2E80 0007 1E12 005F CACE CFCF 81D0" $"83D1 09C0 BEB9 B4B4 B21B 1517 4480 5506" $"5452 504D 4A49 4980 4803 4747 5225 8000" $"0518 1800 53C7 CD81 CE83 CF1C D0CF BFBC" $"B8B2 B2B0 1B14 1641 4E4C 4947 4746 4649" $"4A48 4847 4746 4653 1E80 0004 151C 0048" $"C480 CC81 CD80 CE0C CFCE CDBE BBB8 B1B1" $"AF16 0F10 3782 4680 4508 4649 4847 4646" $"4551 1D80 0007 0E21 003D C0CA CBCB 80CC" $"12CB C9C6 C4C1 BFBD BEBB B9B5 AFAD 150E" $"1037 4646 8145 8144 0647 4746 4545 5514" $"8000 0A05 2600 33BC C8C6 C3C1 BEBC 84BB" $"09BC BDB9 B8B3 AC14 0D0F 3781 4580 4480" $"4306 4244 4645 445A 0881 0005 2E00 25A9" $"B7B7 80B8 81B9 83BA 07BB B6B6 AE13 0D0F" $"3782 4480 4380 4205 4141 4445 5D04 8100" $"0328 0B1C A380 B680 B786 B809 B9B9 B4B1" $"3A0C 0E37 4444 8043 8142 0641 413E 3E40" $"4866 8200 0421 1314 9DB4 80B5 82B6 84B7" $"06B8 B6AF 7417 0E37 8043 8042 0940 3D42" $"4145 534C 3A2C 1282 0005 0E23 0D97 B3B3" $"81B4 88B5 11B6 B091 3715 3642 423E 4041" $"4550 5640 3321 0587 0002 2F0F 9080 B283" $"B382 B40F B3B3 B1A6 A28C 093D 3741 4854" $"4235 280E 8C00 0328 1488 B081 B183 B20E" $"B1A8 9A92 867E 7A65 3900 1019 1F17 0190" $"0002 1722 7D80 AF81 B00A AA9A 9489 7E7C" $"694C 3316 0198 000F 0246 72AD AEAA 9B93" $"897D 7A6E 5139 1F05 9E00 0942 7088 7D7A" $"7558 3D27 079E 0055 0023 372D 2D34 3727" $"2E36 2A2B 3531 2934 3A28 3442 3334 4B4C" $"3342 5154 6B90 A3A6 A38E 8F8F 7C79 7A70" $"6365 634C 4F50 4002 1929 110C 89E9 E9E6" $"E2DE D5CC C4B9 ACA2 9487 7866 574B 4139" $"322C 5264 69D3 F0EF ECEA E8E5 E3E3 7FE2" $"DFE0 E0DD DBDB D9D3 4317 1400 1276 CDD1" $"D3D2 CFC9 C0B6 AB9E 9285 796D 5D49 4031" $"2B26 2029 3348 D8FA F2EA E4DF DCD9 D1D0" $"CECD CDCC CBCB CAC6 461F 1400 1064 B5B8" $"BAB9 B6B1 ABA3 998F 857A 7067 5842 3A2B" $"2723 1E27 3248 D8F6 EEE7 E2DE DBDA CDCC" $"CBCA CAC9 C8C7 C6C0 4716 1700 0D55 A0A2" $"A3A3 A19D 9790 8980 786F 675F 523D 367F" $"2824 211D 2731 48D8 F0E9 E4E0 DCDA D9CC" $"CBCA CAC9 C8C7 C6C5 C036 131E 000B 4A8D" $"8F90 908E 8B86 817A 736C 655E 584D 3832" $"2522 1F1C 2631 48D7 EBE5 E1DD DAD8 D7CB" $"CACA C9C8 C7C7 C5C4 BD2F 0D22 0008 407D" $"7F80 807E 7B77 736E 6862 5D57 5248 342F" $"221F 1E1B 2630 49D6 E6E1 DEDB D9D7 D5CA" $"C9C9 C8C7 C7C5 C4C3 BC26 022E 0006 3970" $"8072 2C70 6E6B 6763 5F5A 5551 4C44 302C" $"1F1E 1C1A 2530 49D5 E2DE DBD9 D7D5 D4C9" $"C8C8 C7C6 C5C4 C3C3 BB16 0031 0004 3465" $"8066 0C65 6361 5E5A 5753 4F4B 4840 2D2A" $"7F1E 1C1B 1A25 2F49 D3DE DBD8 D7D5 D4D2" $"C8C7 C7C6 C5C4 C3C2 C2B8 0F00 3000 032F" $"5B5C 5D5C 5C5A 5856 5350 4D4A 4744 3E2B" $"281C 1B1A 1925 2F49 D1DA D8D6 D5D4 D3D1" $"C7C6 C5C4 C3C3 C2C1 C1B9 0200 3000 022C" $"5255 5554 5453 514F 4D4B 4846 4341 3C29" $"271A 1A19 1824 2E4A CDD7 D6D4 D3D2 D1CF" $"C5C4 C4C3 C2C2 C1C0 C0AC 0000 2F03 0128" $"4B80 4E2C 4D4C 4B4A 4846 4442 403F 3A27" $"2519 1918 1824 2D4A C9D5 D4D2 D2D1 D0CD" $"C4C3 C3C2 C1C1 C0BF BEA4 0000 2808 0125" $"4680 492C 4848 4745 4443 4140 3E3D 3825" $"2419 1818 1723 2D4A C6D3 D2D1 D0CF CFCC" $"C3C2 C2C1 C0C0 BFBE BB9B 0000 220E 0121" $"4180 452C 4444 4342 4140 3E3D 3C3B 3724" $"2318 1817 1723 2C4A C3D1 D0CF CFCE CECA" $"C1C1 C0C0 BFBF BEBD BB8C 0000 230E 011E" $"3E81 410B 4040 3F3E 3D3C 3B3B 3A36 2422" $"8117 0622 2B4A C1CF CECE 80CD 11C8 C0C0" $"BFBF BEBD BDBC B884 0000 220D 001B 3B80" $"3F16 3E3E 3D3D 3C3B 3B3A 3939 3623 2217" $"1716 1721 2A4A BFCD CD81 CC13 C7BF BFBE" $"BEBD BCBC BBB8 7800 0022 1100 1839 3D3D" $"813C 0A3B 3B3A 3939 3838 3523 2117 8016" $"0421 294A BECC 80CB 13CA CBC5 BEBD BDBC" $"BCBB BAB9 B76A 0000 1B13 0015 3781 3B80" $"3A08 3939 3838 3737 3522 2181 1603 2028" $"4ABC 80CA 16C9 C9C8 C3BD BCBC BBBB BAB9" $"B8B5 6500 001A 1900 1236 3A3A 8239 8038" $"3E37 3736 3422 2117 1515 161D 2444 B0BC" $"BAB8 B7B5 B4B4 B6B9 BABA B9B9 B8B7 B556" $"0000 1719 000F 3438 3736 3634 3331 2E2C" $"2A28 2624 2220 211F 1A16 1517 1B3B A2AF" $"80B0 82AF 02B0 B2B4 80B6 0EB2 4B00 000C" $"2502 0720 2220 1F1E 1D1D 861C 081D 2021" $"1F1A 1519 3A9E 80AB 0DAA AAA9 A8A8 A6A2" $"998E 8383 8096 4080 0003 2314 0318 801C" $"811B 2C1A 1A19 1818 1717 1A1B 1917 1615" $"0607 2787 8B7E 7061 5142 3425 190F 293F" $"4B57 5E3A 0800 0002 3E1C 0614 1616 1515" $"8314 0F13 1311 100E 0F15 0B0C 0A04 0304" $"0906 0481 0301 0401 8002 3B03 0F1B 2C3F" $"2B00 0005 3403 030F 1211 0F0D 0C0B 0908" $"0706 0504 0303 0000 0306 0B0E 0E09 0707" $"0809 090A 0A0B 0A06 0708 090A 0B0D 0E1A" $"3E00 0003 2B02 0580 0483 0516 070C 1829" $"3B4C 596B 7C8D 7A22 0D10 100F 0F11 1316" $"191B 1C80 1482 1301 123C 8000 2233 0106" $"0C18 283A 4B5E 7083 95A7 B6C1 CAD1 D8D6" $"DCDD DDDF CE12 0E0F 2C43 302B 2621 1E1C" $"8113 0012 8013 0111 3B80 001D 3000 35A3" $"BAC3 CAD2 DAE2 E9F1 F7F9 F8F4 F0EB D5D1" $"C8C0 BEBC 170D 0E1C 1F1F 801E 011D 1C81" $"1300 1280 1301 1832 8000 0C2F 0018 C7F8" $"F6F3 EFEB E7E3 DFDC 81DB 11DA C8C7 C2BC" $"BDBB 170D 0E1C 1F1F 1E1E 1D1D 1B81 1300" $"1280 1301 1831 8000 0329 0608 AA80 D601" $"D7D7 80D8 81D9 0CDA D9C7 C6C1 BBBB B917" $"0D0E 1B1F 801E 021D 1D1A 8113 0512 1313" $"121C 2880 0006 2908 049F D4D5 D580 D680" $"D782 D80B C5C4 BFBA BAB8 170D 0E1B 1F1E" $"811D 001A 8512 011C 2780 0004 250B 0293" $"D380 D480 D580 D680 D70C D6C4 C3BE B9B9" $"B716 0D0E 1B1E 1E81 1D00 1981 1305 1213" $"1212 1B2A 8000 0720 1001 85D1 D2D3 D381" $"D483 D50A C3C1 BDB7 B8B6 160D 0E1B 1E80" $"1D02 1C1C 1981 1381 1201 1E23 8000 0821" $"1100 78CF D1D1 D2D2 81D3 82D4 0AC2 C0BC" $"B6B6 B415 0D0E 1B1E 801D 021C 1C18 8113" $"8112 011F 2180 0006 200F 006C CDD0 D081" $"D182 D20B D3D2 C1BF BBB5 B5B3 150D 0D1B" $"801D 801C 0018 8113 8112 011E 2380 0007" $"1E12 005F CACE CFCF 81D0 83D1 09C0 BEB9" $"B3B4 B114 0C0D 1B80 1D03 1C1A 1815 8013" $"0612 1112 1211 221D 8000 0518 1800 53C7" $"CD81 CE83 CF1C D0CF BFBC B8B2 B2B0 150C" $"0C18 1715 1210 100F 1012 1312 1211 1212" $"1124 1980 0004 151C 0048 C480 CC81 CD80" $"CE0E CFCE CDBE BBB8 B1B1 AE0D 0304 0E10" $"1083 0F02 1013 1281 1101 241A 8000 070E" $"2100 3DC0 CACB CB80 CC10 CBC9 C6C4 C1BF" $"BDBE BBB9 B5AF AD0C 0303 0E81 1083 0F01" $"1212 8011 012A 1280 000A 0526 0033 BCC8" $"C6C3 C1BE BC84 BB09 BCBD B9B8 B2AB 0B03" $"030E 8010 020F 0F0E 800F 070E 0E10 1211" $"1032 0881 0005 2E00 25A9 B7B7 80B8 81B9" $"83BA 08BB B6B6 AE0B 0203 0E10 810F 020E" $"0F0F 800E 050D 0E11 1238 0481 0003 280B" $"1CA3 80B6 80B7 86B8 07B9 B9B4 B135 0203" $"0E82 0F82 0E05 0D0D 131A 264C 8200 0421" $"1314 9DB4 80B5 82B6 84B7 06B8 B6AF 720F" $"030E 820F 0A0E 0E0F 1A1E 293F 3D30 2811" $"8200 050E 230D 97B3 B381 B488 B511 B6B0" $"9133 0C0E 0F0E 0E17 1D26 3945 342D 2005" $"8700 022F 0F90 80B2 83B3 82B4 0FB3 B3B1" $"A6A2 8C08 321B 202E 4133 2D26 0E8C 0003" $"2814 88B0 81B1 83B2 0EB1 A89A 9286 7E7A" $"6539 000E 141C 1601 9000 0217 227D 80AF" $"81B0 0AAA 9A94 897E 7C69 4C33 1601 9800" $"0F02 4672 ADAE AA9B 9389 7D7A 6E51 391F" $"059E 0009 4270 887D 7A75 583D 2707 9E00" $"0400 2236 241C 7F23 2616 1D25 1819 2520" $"1724 2A17 2333 2324 3C3E 2535 3E32 3630" $"3341 3927 3637 232C 3528 222E 2B18 252C" $"1F01 1929 1106 7CDE DDDC D8D3 C9C0 B7AB" $"9F94 8577 6653 4539 2F26 1F19 1F1F 1C4D" $"4140 3433 3732 2C33 382A 3139 2F30 3A3B" $"391C 1714 000E 67BC C0C2 C1BD B7AF A59A" $"8E81 7569 5D4D 3930 201A 150F 0D10 1578" $"544B 443E 3A37 3486 2E2A 3922 1F14 000D" $"56A5 A8AA A9A6 A19B 9389 7F75 6B61 5749" $"332B 1B17 130E 0F13 1978 574F 4945 413F" $"3E31 3030 2F81 2E2B 2D38 2A16 1700 0B48" $"9093 9493 918D 8781 7971 6860 574F 432E" $"2718 1412 0D0F 1319 7152 4C47 4340 3E3D" $"3130 2F2F 812E 2B2D 3D20 131E 0009 3D7E" $"8081 807E 7B77 716B 645D 564F 493D 2923" $"1512 100C 0F13 1A67 4E49 4541 3F3D 3C30" $"302F 2F80 2E2D 2D2D 391F 0D22 0007 346E" $"7071 706F 6C68 645F 5953 4D48 4339 2520" $"1311 0E0B 0F13 1A5E 4A46 4340 3E3C 3B30" $"2F2F 2E2E 812D 073D 1C02 2E00 052E 6180" $"631E 615F 5C58 5450 4B46 423E 3521 1D11" $"0F0D 0B0F 131A 5647 4441 3F3D 3C3A 302F" $"2F80 2E80 2D26 4311 0031 0004 2856 5758" $"5756 5452 4F4C 4844 403D 3932 1E1B 0F0D" $"0C0A 0F13 1A50 4442 3F3E 3C3B 3980 2F02" $"2E2D 2E80 2D07 410D 0030 0002 254C 804E" $"1F4D 4B4A 4744 413E 3B38 362F 1C19 0D0C" $"0B09 0E13 1A4A 4240 3E3D 3B3B 392F 2F2E" $"2E81 2D28 2C4D 0200 3000 0222 4446 4746" $"4544 4341 3E3C 3A37 3533 2D1A 180C 0B0A" $"080E 131A 4640 3E3D 3C3B 3A38 2F80 2E81" $"2D08 2C4A 0000 2F03 011F 3E80 401B 3F3E" $"3D3B 3A38 3634 3230 2B18 170B 0A09 080E" $"131A 433F 3D3C 3B3A 3A37 812E 802D 092C" $"2B47 0000 2808 011C 3880 3B17 3A39 3837" $"3634 3331 302E 2A17 160A 0908 070E 121A" $"403D 3C3B 803A 0136 2E81 2D80 2C08 2B47" $"0000 220E 011A 3480 374C 3636 3534 3331" $"302F 2E2D 2916 1509 0807 070E 121A 3E3C" $"3B3B 3A39 3936 2E2E 2D2D 2C2D 2C2C 313C" $"0000 230E 0117 3134 3433 3332 3231 302F" $"2E2D 2C2B 2815 1408 0707 060E 121A 3C3B" $"3B3A 3A39 3935 2E80 2D81 2C08 2F3A 0000" $"220D 0015 2E80 3117 3030 2F2F 2E2D 2D2C" $"2B2A 2815 1407 0706 060E 121B 3B3B 3A3A" $"8039 0034 812D 802C 092B 3336 0000 2211" $"0013 2C80 2F80 2E0A 2D2D 2C2B 2B2A 2A27" $"1413 0780 0602 0E12 1B80 3A04 3939 3838" $"3480 2D81 2C09 2B34 3100 001B 1300 102B" $"822D 2A2C 2C2B 2B2A 2A29 2927 1413 0606" $"0506 0E12 1B39 3A39 3838 3737 322D 2D2C" $"2C2B 2C2B 2B32 3300 001A 1900 0E29 822C" $"802B 082A 2A29 2928 2614 1307 8005 0E0B" $"0E15 2D2D 2B29 2826 2525 272A 2C2C 802B" $"212A 372C 0000 1719 000C 282A 2A29 2827" $"2523 211F 1D1B 1917 1513 1311 0A05 0503" $"030B 2086 2102 2224 2780 2A0C 3529 0000" $"0C25 0204 1415 1412 1181 1084 0F19 1012" $"1311 0B05 0209 1D1E 1E1D 1D1C 1C1B 1D1E" $"1E1C 1A1B 2428 3C29 8000 0323 1401 0D83" $"0F2F 0E0D 0C0B 0A09 0809 0D0E 0C09 0705" $"0201 0515 1614 110F 0D0B 0806 0403 1E31" $"5067 5D2E 0700 0002 3E1C 0407 0808 0706" $"0505 8304 8003 0506 0F0B 202A 0684 0316" $"040A 1522 3241 5160 82A4 B1B6 6400 0005" $"3403 0202 0403 0384 0281 0324 0000 0515" $"274C 623E 3747 5868 7989 98A3 A8A7 ABB1" $"B8BE C5CB D1DA BD00 0003 2B02 0504 0304" $"0482 0520 0607 090C 0F11 0F12 1416 1E27" $"355F 92AE BEC5 CDD5 DDE4 E7E0 DDD9 D4CF" $"CAC5 C1BF AD80 0014 3301 0608 0A0C 1013" $"1619 1C1F 2225 282A 2D2F 2729 2680 2414" $"2B30 42AB EEE8 E3DD D6D1 CDC2 C1C1 C0BF" $"BFBE BDBB 9C80 0014 3000 0E23 2729 2C2F" $"3235 4254 534D 4845 423F 2C2A 2580 1F03" $"292F 3491 80CD 80CC 0ACA C0C0 BFBF BEBD" $"BCBC BA92 8000 042F 0007 3769 806B 056A" $"6659 443E 3E80 3D0C 3C29 2924 1F1E 1E28" $"2E33 91CB CC80 CB0B CAC8 BFBE BEBD BDBC" $"BBBA B788 8000 0329 0603 3382 3E01 3D3E" $"823D 043C 3B2A 2824 801E 0327 2D32 9281" $"CA0C C9C9 C6BE BDBC BCBB BAB9 B9B7 7680" $"0003 2908 0230 853D 823C 033B 2A28 2380" $"1E05 262C 3192 C8C9 80C8 0BC7 C4BC BCBB" $"BABA B9B8 B7B5 6C80 0003 250B 012C 823D" $"003C 803D 803C 043B 3B29 2823 801E 0325" $"2B30 9281 C70C C6C6 C2BB BABA B9B8 B7B6" $"B5B3 6480 0004 2010 0128 3C81 3D84 3C0B" $"3B3B 2928 231E 1D1D 242A 2F92 80C5 80C4" $"0AC0 B9B9 B8B7 B7B6 B5B4 B355 8000 0321" $"1100 2487 3C80 3B03 3A29 2823 801D 0323" $"292E 9381 C30C C2C2 BEB8 B7B6 B6B5 B4B3" $"B2B1 4980 0004 200F 0021 3B81 3C84 3B04" $"3A3A 2A27 2280 1D05 2228 2D93 C2C2 81C1" $"0ABC B6B5 B5B4 B3B2 B1B0 AE43 8000 031E" $"1200 1D87 3B80 3A03 3929 2723 801D 1421" $"262C 93C0 C1C0 C0BE BBB8 B5B4 B3B2 B2B1" $"B0AF AE35 8000 0418 1800 1939 813B 013A" $"3B82 3A0F 3939 2927 231D 1C1C 2025 2A90" $"B9B6 B4B2 80B1 09B3 B4B2 B1B0 AFAE ADAC" $"2980 0004 151C 0016 3988 3A04 3938 2A26" $"2380 1C03 1A1E 2386 81B0 0CAF AFAE AEAF" $"B2B0 AEAD ACAB A823 8000 040E 2100 1338" $"833A 1039 3633 302E 2B2A 2B27 2621 1C1C" $"181C 2286 82AE 0BAD ADAC ACAB AEAE ACAA" $"AAA7 1780 000A 0526 0010 3739 3633 302E" $"2B82 2A00 2980 2A07 2625 201B 161B 2086" $"80AD 0DAC ACAB ABAA AAA9 A8A9 ABA9 A8A6" $"0981 0003 2E00 0928 812A 0029 802A 8429" $"072A 2524 1F15 1A1F 8681 AB0C AAAA A9A9" $"A8A7 A6A5 A5A7 A9A3 0481 0003 280B 0625" $"8829 0028 8229 0625 232B 181E 86AA 80A9" $"0BA8 A8A7 A7A6 A5A4 9E90 8988 9582 0003" $"2113 0424 8129 0028 8329 8228 0829 2722" $"3522 1D85 A8A8 80A7 0AA6 A395 8E85 7A79" $"6A4B 3313 8200 030E 2303 2389 2881 2712" $"2829 253E 4023 85A6 A59A 9088 7F7A 7556" $"3D24 0587 0002 2F08 2181 2800 2783 2802" $"2728 2880 270C 2432 420B 506F 7F78 765C" $"422D 0E8C 0002 2810 1F81 2800 2782 280F" $"2727 2529 2D31 3C49 3F2A 0012 2125 1801" $"9000 0417 1C1D 2728 8227 0A26 262E 313A" $"4B43 352A 1401 9800 0F02 361A 2727 2624" $"2D2E 3446 4537 2E1C 059E 0009 2D2A 2E31" $"434B 3A2F 2307 9E00 696C 3332 0000 0B23" $"0213 3D97 80F5 1DF6 F5F6 F5F5 F4F4 F3F2" $"F3E6 A63A 434E 5045 4E3E 4B3B 4439 3C40" $"1821 0B70 FE80 FF00 FE80 FF0D FEFF FDF2" $"E3DB 7017 666F 6158 534E 834A 0438 2001" $"61FD 80FF 00FE 80FF 18FE FFF3 E1D3 CD6C" $"196A 7066 605B 554C 4B4A 4A49 483B 1907" $"53FA 80FF 00FE 80FF 18FE FEEA DACD C96B" $"1965 6A62 5D59 544B 4B4A 4949 4A34 1808" $"47F5 85FE 17F9 E1D4 C8C5 6A18 5C64 5F5B" $"5853 4B4A 4949 484B 2E16 0A3B F080 FF3C" $"FEFF FEFB F6F0 DBCE C4C2 6918 5560 5C59" $"5751 4A49 4948 484B 2915 0B30 E8FC FDFD" $"FCF9 F6F1 EDE9 D5CA C0BF 6818 505C 5957" $"5650 4949 4848 474B 2311 0F25 DB80 F11C" $"F0EE ECE9 E6E4 D1C7 BDBD 6718 4C59 5756" $"554F 4948 4847 474C 1F0C 131B CF81 E71C" $"E6E4 E3E1 DFCE C4BB BB65 1749 5756 5554" $"4E48 4847 4746 4C1A 051C 13C6 DF80 E01D" $"DFDF DEDD DCCB C1B9 B964 1748 5655 5453" $"4D48 4747 4646 4C14 0020 0BBD D9DA 80DB" $"1CDA DAD9 D9C9 BFB7 B863 1646 5454 5353" $"4C47 4746 4645 4E0E 0020 05B3 D5D6 84D7" $"19C7 BEB6 B662 1646 5353 5251 4A46 4645" $"4544 5207 0021 02A7 D2D3 D380 D410 D3D2" $"D1C4 BDB5 B55E 0F37 4241 3F3D 3D40 4380" $"4418 5500 0020 018E BFBE BDBC BBB9 B9B8" $"B8B9 BCBE B95C 082D 3938 3881 370A 3437" $"3A51 0000 1E11 77B0 B084 B11B B2B2 A89D" $"4402 181D 1814 0F0B 060A 2243 5937 0000" $"2708 609D 9488 7A6B 7F5D 4E3E 2F1F 1611" $"1D20 1213 1A20 262C 3136 3D43 4650 6221" $"0020 030A 0D08 070F 2032 4457 6978 8EA3" $"912A 2947 6261 5F5F 5C56 5452 504E 5220" $"0021 0462 8EA7 BFD1 DBE2 E7EB EEE3 DACC" $"C856 193A 625A 5959 544E 4E4D 4D4C 531A" $"001E 018B EDEA E6E3 DFDB DADA DBCD C7BC" $"BD53 1936 5A59 5958 534E 4D4C 4C4B 5214" $"001A 066E D5D5 D6D7 D780 D81C D9CB C4BB" $"BB51 1836 5958 5857 524D 4C4C 4B4A 540C" $"0017 0960 D3D4 D4D5 D580 D607 D7CA C2B9" $"B950 1736 8057 1156 514C 4B4B 4A49 5705" $"0017 0B53 D0D2 D2D3 D381 D41B C8C1 B7B7" $"4F16 3656 5655 554F 4B4A 4A49 4856 0000" $"140B 46CD D0D0 D1D1 81D2 06C6 BFB5 B54D" $"1635 8155 0E4E 4A49 4948 4753 0000 120E" $"39CA CECE 80CF 80D0 26C5 BDB3 B34C 1534" $"504E 4B48 484A 4848 4746 4C00 000E 122E" $"C6CC CCCD CDCE CECC CAC1 BBB3 B048 0F2A" $"8046 8045 0F48 4746 4549 0000 0319 23C1" $"C8C6 C3C1 BE81 BC05 BBB8 B046 0E2A 8045" $"0744 4443 4345 4644 4280 0003 1F17 ADB7" $"80B8 81B9 06BA BAB8 B549 0D2A 8044 0743" $"4342 4241 4143 4180 0006 2210 A6B5 B5B6" $"B683 B70F B8B5 7F11 2943 4342 4240 4142" $"4944 381F 8000 0418 129F B3B3 80B4 82B5" $"0CB4 B599 272D 4041 454A 3E2E 1F08 8300" $"0409 1F97 B1B1 82B2 0AB1 A59B 907E 5F0A" $"252C 230F 8900 0129 8C80 AF07 A59B 8F85" $"644A 2F13 9000 082E 7D8F 8669 4F33 1B02" $"9100 2312 2E26 7573 6B6C 5F63 5356 4745" $"3D37 4131 4E62 95BA B9AA AB9C 9C90 8C84" $"7C7C 321D 041D C87F D5D6 D1C7 B9A9 9785" $"7459 4737 2C2C 3DAF F9EF E7E1 DCD7 D6D5" $"D3D2 CF71 1F01 1BA4 B3B4 B0A7 9C8E 7F70" $"6346 3527 2223 33AE F3E8 E1DC D6CC CBCA" $"C9C7 C46B 1907 1884 9495 928B 8378 6D62" $"583E 2F23 1F22 32AE EBE3 DDD9 D4CB CAC9" $"C7C6 C260 1808 146C 7C7C 7A75 6F67 5F57" $"4F37 2A20 1D22 31AE E4DE DAD7 D1C9 C8C7" $"C6C4 C154 160A 115A 7F69 6967 645F 5A54" $"4E48 3227 1D1B 2130 ADDE DAD7 D5CF C8C7" $"C5C4 C3BF 4815 0B0E 4E5B 5B59 5753 4F4B" $"4743 2F24 1B1A 202F ABD9 D6D4 D3CD C6C4" $"C3C2 C1BE 3D11 0F0B 4450 504F 4D4B 4845" $"423F 2C22 1919 202E A8D5 D3D2 D1CA C4C3" $"C2C1 C0BC 320C 1308 3E48 4847 4644 4240" $"3E3C 2A20 1818 1F2D A5D2 D1D0 CFC8 C2C1" $"C0BF BEBA 2705 1C06 3980 421C 413F 3E3D" $"3B3A 291F 1717 1E2C A3CF CECE CDC6 C0BF" $"BFBE BCB8 1C00 2004 3580 3E1C 3D3C 3B3A" $"3938 281E 1617 1E2B A1CD CCCC CBC4 BEBE" $"BDBC BBB6 1200 2002 3280 3B1C 3A3A 3938" $"3837 281E 1616 1D2A A0CB CACA C9C1 BDBC" $"BBBA B9B5 0800 2101 2E81 397A 3837 3634" $"3326 1F16 1619 2292 B8B6 B4B3 B3B5 B8B9" $"B8B7 B100 0020 0120 2826 2422 211F 1D1C" $"1C1D 1F20 1B16 1B87 ADAC ACAB AAA9 A49B" $"9592 9500 001E 1012 1B1A 1A19 1918 1717" $"1618 1A15 1309 074E 5D4E 3F30 2113 0F26" $"3D4F 3500 0027 080B 1211 0F0E 0D0B 0A08" $"0703 0605 0B0B 0706 0707 0808 0705 0708" $"0914 2718 0020 0380 0513 070F 2032 4457" $"6978 8EA3 8F1F 1017 2220 1E1D 1914 8113" $"4A1C 1700 2104 628E A7BF D1DB E2E7 EBEE" $"E3DA CBC7 500E 1A26 1F1E 1D19 1313 1213" $"131E 1500 1E01 8BED EAE6 E3DF DBDA DADB" $"CDC7 BCBC 4D0E 171F 1E1D 1D18 1313 1213" $"121F 1000 1A06 6ED5 D5D6 D7D7 80D8 1CD9" $"CBC4 BABA 4C0D 171E 1E1D 1D17 1313 1213" $"1221 0B00 1709 60D3 D4D4 D5D5 80D6 08D7" $"CAC2 B9B9 4B0D 171E 801D 0017 8212 0A28" $"0500 170B 53D0 D2D2 D3D3 81D4 0DC8 C1B7" $"B74A 0D17 1E1D 1C1C 1613 1380 120A 2B00" $"0014 0B46 CDD0 D0D1 D181 D20D C6BF B5B5" $"490D 171D 1D1C 1C16 1313 8012 082C 0000" $"120E 39CA CECE 80CF 80D0 0CC5 BDB3 B348" $"0C15 1916 1411 1113 8012 1811 2900 000E" $"122E C6CC CCCD CDCE CECC CAC1 BBB3 B042" $"030B 1010 810F 0F12 1211 1129 0000 0319" $"23C1 C8C6 C3C1 BE81 BC07 BBB8 B040 030B" $"1010 810F 040E 1012 1127 8000 031F 17AD" $"B780 B881 B906 BABA B8B5 4402 0A80 0F81" $"0E03 0D0E 132A 8000 0622 10A6 B5B5 B6B6" $"83B7 04B8 B57D 080A 800F 070E 0E14 1A2A" $"302C 1A80 0004 1812 9FB3 B380 B482 B50C" $"B4B5 9922 1011 1823 3230 261C 0883 0004" $"091F 97B1 B182 B20A B1A5 9B90 7E5F 0A1C" $"221E 0F89 0001 298C 80AF 07A5 9B8F 8564" $"4A2F 1390 0008 2E7D 8F86 694F 331B 0291" $"003A 122D 1B68 665E 6051 5644 4737 342C" $"2632 2236 3231 373A 2F3A 2A39 2834 292E" $"3312 1D04 16B7 C4C5 C0B6 A898 8775 6348" $"3725 1B0D 0F54 5042 3934 2F2B 2B80 2C1C" $"2D2C 1F01 1594 A3A4 9F97 8C7E 6F61 5336" $"2517 120D 1359 544A 443F 3A30 2F7F 2F2E" $"2E2D 3019 0712 7585 8582 7C73 695E 5349" $"2F20 1310 0D13 514E 4641 3E38 302F 2E2E" $"2D2F 2B18 0810 5E6D 6D6B 6660 5850 4840" $"281B 110E 0D13 4848 433F 3D37 2F2F 2E2D" $"2D32 2516 0A0D 4C5A 5A58 5550 4B45 3F39" $"2418 0E0C 0D13 4144 403D 3B36 2F2E 2E2D" $"2D32 2215 0B0B 404C 4C4B 4845 413D 3834" $"2015 0C0A 0C13 3C41 3E3C 3B35 2F2E 802D" $"4533 1E11 0F09 3742 4140 3F3C 3936 3331" $"1E13 0A09 0C13 383F 3D3B 3A34 2E2E 2D2D" $"2C33 1A0C 1307 313A 3A39 3836 3432 302E" $"1C12 0808 0C13 353D 3B3A 3933 2E2D 2D2C" $"2C34 1705 1C05 2D80 3413 3331 302E 2D2C" $"1B10 0707 0B13 343B 3A39 3933 2D2D 802C" $"4535 1300 2003 2931 3030 2F2E 2D2C 2B2A" $"1A10 0706 0B12 333A 3A39 3932 2D2D 2C2C" $"2B37 0E00 2001 272E 2E2D 2D2C 2B2B 2A29" $"1A0F 0606 0B12 323A 3938 3831 2D2C 2C2B" $"2B3D 0700 2101 2480 2C23 2B2A 2928 2625" $"1810 0605 070A 2329 2725 2424 2729 2B2B" $"2A41 0000 2001 161B 1917 1514 1211 800F" $"3612 120C 0603 191F 1F1E 1D1D 1F1F 1E22" $"2742 0000 1E10 090E 0D0C 0B0A 0A09 0807" $"090D 0805 0302 0D0F 0D0B 0806 0309 2761" $"7D42 0000 2708 0204 8503 5C01 0410 3848" $"282D 3E4F 5F70 7F90 A4B1 B9C4 D532 0020" $"0305 0405 0607 0A0E 1114 1716 191A 222E" $"5BA3 D3DA DDDE DCD4 D0CB C5C1 BD31 0021" $"0217 1F25 2A2F 3C45 403E 3E32 2B21 2126" $"3176 D2CE CDCC C7C0 C0BF BDBC BA26 001E" $"0127 5B5C 5C59 4C3E 803D 062F 281F 1F25" $"2F72 80CB 0CCA C5BE BDBC BBBA B71A 001A" $"0621 843D 1A3C 3C2F 281E 1E23 2E72 C9C9" $"C8C8 C2BC BBBA B9B8 B40F 0017 091D 3D3D" $"843C 162F 271E 1E22 2C72 C7C6 C6C5 BFBA" $"B9B8 B7B5 B205 0017 0B19 833C 803B 072F" $"271E 1E21 2A72 C480 C30D BCB8 B7B6 B4B3" $"AA00 0014 0B15 3B3C 823B 083A 3A2F 271D" $"1D20 2871 80C1 0FC0 BAB5 B4B3 B2B0 9E00" $"0012 0E12 3A3B 3B83 3A17 2E27 1D1D 1F27" $"6FBB B9B6 B3B3 B4B2 B1AF AE91 0000 0E12" $"0E39 833A 0938 352D 261F 1C1A 1F65 B080" $"AF11 AEAE B0AE ACAB 8500 0003 190B 3838" $"3532 302D 812A 0528 251E 181C 6580 AD07" $"ACAB AAA9 ABAB A978 8000 021F 0528 8729" $"0F27 241B 1B64 ABAB AAA9 A9A8 A6A5 A4A1" $"6D80 0005 2204 2629 2928 8029 8128 0F29" $"262E 1D64 A8A8 A7A7 A297 8E84 6B4F 2880" $"0002 180B 2485 2880 270B 2836 2F66 9A91" $"8777 583F 2409 8300 0509 1C22 2828 2780" $"2880 2708 2C32 3C38 0B37 402B 1089 0001" $"241F 8027 0726 2B2F 3E39 2F22 1190 0008" $"2027 2D3B 3932 2317 0291 0069 7333 3200" $"0002 F701 1FBF 80FA 0CF9 F9EE B63F 5C4F" $"4845 4236 10AB 81FF 3DF6 D79B 4069 5C50" $"4A49 4010 9AFF FEFE FBE9 CB96 385F 594E" $"4948 3B10 86F7 F6F2 EBDD C493 3359 564C" $"4847 3610 71E3 E4E2 DFD5 BE90 3056 544B" $"4746 3210 60D8 D97F D9D8 D0BA 8D2E 5452" $"4946 452D 104E C9C8 C7C6 C2BB 8A1F 3D3B" $"3B3C 3E29 113C A499 8A7C 6C60 4710 1C1D" $"1E2B 4D2E 101D 536A 849B ADB6 7631 605C" $"5550 4E38 0E40 E0DD DAD9 D3C1 8727 5958" $"504C 4B32 0B32 D2D3 D4D5 CFBD 8426 5756" $"4E4A 492C 0926 CDD0 D0D1 CBB9 8025 524F" $"4B48 4728 041F C7C8 C6C4 C1B8 7C1C 4645" $"4446 4523 001A B0B7 81B8 158C 1C43 4341" $"4340 1800 14A7 B3B3 B4B0 A58B 2134 281B" $"0A80 0006 1592 9371 4C2B 1085 0053 1860" $"A299 866F 543E 3679 D7C7 BBB2 A97C 1057" $"A49D 8970 4F2B 2270 EADD D0CA C794 103B" $"736F 6456 4023 1F6F DED7 CCC7 C487 102B" $"5553 4D46 371E 1D6C D6D2 C8C3 C17A 1021" $"4544 413D 321C 1B68 D0CE C4C0 BE6D 101B" $"3D3C 7F3B 3930 1A1A 66CB CAC0 BCBA 6110" $"1430 2E2C 2924 1D18 55B2 B0AF ACA5 5111" $"0D16 1412 100E 0E0D 192E 2010 112A 1D10" $"1B50 6A84 9BAD B671 1422 1D16 1313 190E" $"40E0 DDDA D9D3 C184 121E 1D15 1312 170B" $"32D2 D3D4 D5CF BD81 121D 1C15 1212 1609" $"26CD D0D0 D1CB B97E 111A 1713 1211 1504" $"1FC7 C8C6 C4C1 B879 0710 0F0F 1111 1400" $"1AB0 B781 B815 8B08 0F0E 1018 1F11 0014" $"A7B3 B3B4 B0A5 8B16 1A19 1509 8000 0615" $"9293 714C 2B10 8500 2118 5493 8A77 5F43" $"2D20 3241 352F 2D2C 2810 4C94 8D79 6040" $"1C0F 344C 4035 2F2E 2E10 327F 6460 5547" $"3115 0D2C 443D 332E 2D2B 1023 4744 3F38" $"2910 0B26 3F3B 322E 2D27 101A 3736 332F" $"240C 0924 3B39 302D 2C24 1015 2F2E 2D2B" $"220B 0922 3A38 2F2C 2B22 100F 2321 1E1C" $"170E 0812 2321 2224 2820 1109 0907 0606" $"050A 2219 2A38 4661 9752 1008 131A 2629" $"2720 2669 D3D5 CEC6 C073 0E14 4C4C 413D" $"3623 2150 CAC9 C0BC B965 0B13 813C 0B35" $"2320 4EC5 C4BB B7B5 5809 1080 3B1D 3A34" $"221E 4CBE BAB5 B2B0 4B04 1139 3734 312D" $"251B 41AE AEAC ADAB 3F00 1328 8129 0B28" $"2540 A9A8 A297 8025 0012 2680 2807 272B" $"3436 6544 250B 8000 0611 2731 2A22 1A0D" $"8500 6974 3332 0000 8B31 0000 0000 8200" $"0A10 5874 7DA2 BFD3 E0E7 EAEB 84EE 00EF" $"81F0 82EF 05F0 F0EF EFEE ED82 EE05 EDEC" $"EAE9 EAEA 80EB 06E9 E7E5 E3E4 E6E7 80E9" $"21E7 DDAB ADAE AFB2 6906 0000 081C 3329" $"2523 2327 2D33 3739 3B31 0405 0607 0808" $"0909 069F 0010 0745 734D 425F 84B8 E4F1" $"F1F0 EFEE EDEB EB82 EC03 EDEC EBEA 80EB" $"13EC EBEC ECEB EAEA EBEB ECEC EDEC EBEB" $"ECED EDEF F082 F180 F286 F337 F0E4 886A" $"627A 635A 5552 5558 5D63 696B 655E 5556" $"6069 737D 807E 7861 4751 5A65 6F73 726E" $"5C34 3C44 4C55 5859 573D 1F25 2B32 383C" $"3F41 300B 8200 0919 724F 3A2F 3F45 62BD" $"EC97 FD83 FC80 FB06 FAFA F9F8 F7F6 F580" $"F380 F24F F1F1 F0EE EEEF EFF0 EDD0 9853" $"3A36 353C 4458 5457 5D63 6870 7572 504F" $"5257 5C61 676A 6351 4C4D 5154 585B 5B57" $"524D 4D52 565A 5F5E 5952 4C4E 545A 6167" $"6766 645C 653E 0100 000C 6738 2B39 3C17" $"095F A6DF B5FE 0CFC D27D 4E45 3845 322D" $"2E43 4A4A 8049 8048 384A 4C4E 5052 5456" $"5247 4A51 555B 5F65 6966 474B 5156 5C60" $"686C 6249 4B51 585F 656E 726D 5852 545C" $"2300 000C 4E2A 3D1B 090B 0C57 A3D5 FEFF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 05FE FFFF FEFF FF80 FE24 FDFC" $"FBF9 F8F6 F4F3 E9BE 251C 1B1B 1A19 1C31" $"6DC5 7670 6A65 615E 5A58 5553 5150 4E4D" $"4D4C 4B81 4A83 4981 4888 4915 4B54 5457" $"2800 000A 4342 0D0D 0C06 0450 A4D4 FEFF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 2FFE FFFF FEFE FCF8 F4EC E5E0" $"DCD9 D7D5 D3D1 CCB3 1F14 1313 1212 1831" $"61D9 6E69 6662 5F5C 5957 5553 514F 4E4C" $"4B4A 4948 4881 4781 4880 4980 4A83 4B81" $"4C10 4A5A 582A 0000 0C45 280D 0601 0103" $"479F CCA7 FE2C FCF9 F5F2 EBE1 DEDB D9D6" $"D4D2 D0CF CAB2 2016 1718 1819 2141 70DB" $"7975 716E 6B67 6562 605E 5C5A 5957 5654" $"5452 4B86 4A81 4B84 4A81 4908 4858 5B2F" $"0000 0C41 3280 0008 0102 409C C9FE FFFF" $"FE80 FF0C FEFF FFFE FFFF FEFF FFFE FFFF" $"FE80 FF0C FEFF FFFE FFFF FEFF FFFE FFFF" $"FE80 FF2F FEFF FDF9 F5F1 EEE4 DDDA D8D6" $"D3D2 D0CF CDC9 B221 1718 1819 1A22 4373" $"DA79 7572 6F6C 6967 6563 615F 5E5C 5B5A" $"595A 5B54 804E 014D 4D80 4C81 4B81 4A02" $"494A 4A80 490A 4849 4763 5C32 0000 0E43" $"3F80 0008 0102 3899 C5FC FFFF FE80 FF0C" $"FEFF FFFE FFFF FEFF FFFE FFFF FE80 FF0C" $"FEFF FFFE FFFF FEFF FFFE FFFF FE80 FF32" $"FEFE F7F4 F0ED EAE1 DAD8 D6D4 D2D1 CFCE" $"CCC9 B221 1718 1919 1A23 4473 D678 7471" $"6E6B 6967 6563 6160 5E5D 5C5B 5A5B 5B53" $"4E4D 4D80 4C80 4B02 4A4B 4B81 4A01 494A" $"8149 0B48 4946 6D5C 3700 0011 4F1B 0180" $"0004 0131 95C1 FAA4 FE32 FDF4 F0ED EBE8" $"DFD8 D6D4 D2D1 CFCE CDCB C8B1 2117 1819" $"191A 2344 73D0 7672 6F6D 6A68 6664 6260" $"5F5E 5D5C 5B5A 5B5B 534D 4D4C 4C81 4B82" $"4A84 4981 4814 4651 5D3E 0000 0F53 2306" $"0000 0101 2B91 BEF8 FFFF FE80 FF0C FEFF" $"FFFE FFFF FEFF FFFE FFFF FE80 FF0C FEFF" $"FFFE FFFF FEFF FFFE FFFF FE80 FF31 FEFC" $"F1EE EBE8 E6DD D6D4 D3D1 CFCE CDCC CBC7" $"B121 1718 1819 1A23 4473 CC74 706E 6B69" $"6765 6361 605E 5D5C 5B5A 5A5B 5B52 4D4D" $"814C 804B 014A 4B82 4A80 4908 4849 4948" $"4948 5760 3680 000D 3F2F 0C00 0001 0123" $"8DBB F4FF FFFE 80FF 0CFE FFFF FEFF FFFE" $"FFFF FEFF FFFE 80FF 0CFE FFFF FEFF FFFE" $"FFFF FEFF FFFE 80FF 35FE FBEE EBE9 E6E4" $"DBD5 D3D1 D0CE CDCC CBCA C7B1 2017 1818" $"191A 2344 73C8 726F 6C6A 6765 6462 605F" $"5E5D 5C5B 5A59 5B5A 514D 4D4C 4B4C 4C80" $"4B03 4A4B 4A49 804A 8049 0848 4949 4848" $"4A60 690E 8000 024D 2508 8000 0401 1D89" $"B8F0 A4FE 30F9 EBE9 E6E4 E2DA D3D1 D0CE" $"CDCC CBCA C9C6 B021 1718 1819 1A23 4473" $"C370 6D6B 6866 6463 6160 5E5D 5C5B 5A5A" $"595A 5A51 4C4C 814B 834A 8349 8348 034B" $"696E 1080 000D 5F18 0F00 0001 0118 84B6" $"EDFF FFFE 80FF 0CFE FFFF FEFF FFFE FFFF" $"FEFF FFFE 80FF 0CFE FFFF FEFF FFFE FFFF" $"FEFF FFFE 80FF 2FFE F7E9 E6E4 E2E0 D8D1" $"D0CE CDCC CBCA C9C8 C6B0 2017 1818 191A" $"2444 72BE 6E6B 6967 6563 6260 5F5E 5D5C" $"5B5A 5958 5A5A 5080 4C80 4B02 4A4B 4B80" $"4A00 4980 4A80 4908 4849 4948 4846 5574" $"1280 000D 3918 2300 0001 0113 7FB3 E9FF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 0CFE FFFF FEFF FFFE FFFF FEFF" $"FFFE 80FF 2FFE F5E7 E4E2 E0DE D6D0 CECD" $"CCCB CAC9 C8C7 C5B0 2017 1818 191A 2444" $"72B5 6C6A 6866 6462 615F 5E5D 5C5B 5A5A" $"5958 5A59 5080 4C80 4B01 4A4B 814A 0249" $"4A4A 8149 0148 4980 4803 4F50 7510 8000" $"0D40 1B34 0000 0101 0F79 B0E4 FFFF FE80" $"FF0C FEFF FFFE FFFF FEFF FFFE FFFF FE80" $"FF3F FEFF FFFE FFFF FEFF FFFE FFFF FEFF" $"FFFE FCF3 E4E2 E0DE DCD5 CECD CCCB CAC9" $"C8C7 C6C4 B020 1718 1819 1A24 4470 AD6A" $"6866 6463 6160 5F5E 5C5C 5B5A 5959 585A" $"594F 804C 804B 014A 4B81 4A0E 494A 4949" $"4849 4948 4948 4748 5952 6081 0002 4E1F" $"0E80 0004 010B 73AE E0A2 FE30 FCFA F1E2" $"E0DE DCDB D3CD CCCA CAC9 C8C7 C6C5 C3AF" $"2017 1818 191A 2444 6FA5 6967 6563 6260" $"5F5E 5D5C 5B5A 5959 5857 5A58 4F81 4B82" $"4A83 4984 4804 4748 6352 6881 000D 4B20" $"1E00 0001 0109 6CAB DBFF FFFE 80FF 0CFE" $"FFFF FEFF FFFE FFFF FEFF FFFE 80FF 3FFE" $"FFFF FEFF FFFE FFFF FEFF FFFE FDFB FAF8" $"EFE0 DEDC DBD9 D2CB CAC9 C8C8 C7C6 C5C4" $"C3AF 2017 1718 1919 2445 6E9D 6766 6462" $"6160 5E5D 5C5B 5A5A 5959 5857 5A58 4E80" $"4B02 4A4B 4B80 4A02 494A 4A81 4902 4849" $"4980 4804 4748 4E52 7081 000D 2B20 3100" $"0001 0107 65A9 D6FF FFFE 80FF 0CFE FFFF" $"FEFF FFFE FFFF FEFF FFFE 80FF 3FFE FFFF" $"FEFF FFFE FFFF FEFF FEFD FBF9 F7F5 EDDE" $"DCDA D9D8 D1CA C9C8 C7C7 C5C4 C4C3 C2AF" $"2017 1718 191A 2445 6D96 6664 6361 605F" $"5E5D 5C5B 5A59 5958 5857 5958 4E80 4B02" $"4A4B 4B80 4A02 494A 4A81 4902 4849 4980" $"4804 4748 5052 7481 0002 3626 1E80 0004" $"0105 5DA6 D29D FE36 FDFC FAF8 F6F5 F3EB" $"DCDA D9D7 D6D0 C9C8 C7C6 C5C4 C4C3 C3C2" $"AE20 1717 1819 1925 456B 9065 6361 605F" $"5E5D 5C5B 5A5A 5958 5857 5759 574D 4B82" $"4A84 4984 4880 4703 4859 544A 8100 0D41" $"2D19 0000 0101 0554 A3CD FDFF FE80 FF0C" $"FEFF FFFE FFFF FEFF FFFE FFFF FE80 FF37" $"FEFF FFFE FFFF FEFF FEFD FBF9 F7F6 F4F3" $"F1E9 DBD8 D7D6 D5CE C8C7 C6C5 C4C3 C3C2" $"C2C1 AE1F 1717 1819 1925 456A 8A63 6260" $"5F5E 5D5C 5B5A 5A59 8058 0457 5759 574D" $"804B 804A 0249 4A4A 8049 0048 8049 8048" $"0747 4848 4748 6454 5181 000D 1332 2D00" $"0001 0104 4CA0 C9FB FFFE 80FF 0CFE FFFF" $"FEFF FFFE FFFF FEFF FFFE 80FF 38FE FFFF" $"FEFF FFFE FDFB FAF8 F6F5 F4F2 F1EF E8D9" $"D7D6 D5D4 CDC6 C5C4 C4C3 C3C2 C2C1 C1AD" $"1F17 1718 1919 2545 6984 6261 5F5E 5D5C" $"5B5B 5A59 5958 8157 0559 574C 4A4B 4B80" $"4A02 494A 4A80 4900 4880 4980 4807 4748" $"4847 4752 545A 8100 0216 3D3D 8000 0501" $"0345 9EC6 F997 FE18 FDFB FAF8 F7F5 F4F3" $"F1F0 EFEE E6D7 D5D4 D3D2 CCC4 C4C3 C3C2" $"C280 C11E C0AD 1F16 1718 1819 2545 677F" $"6160 5E5D 5C5C 5B5A 5959 5858 5757 5656" $"5956 4C81 4A83 4985 4883 4702 5054 6081" $"0002 1A49 1880 0007 0102 3E9A C3F6 FFFE" $"80FF 0CFE FFFF FEFF FFFE FFFF FEFF FFFE" $"80FF 80FE 18FC FBFA F8F7 F6F4 F3F2 F0EF" $"EEED ECE5 D6D4 D3D2 D1CB C3C3 C2C2 81C1" $"17C0 C0AD 1F16 1718 1819 2645 667A 605F" $"5E5D 5C5B 5A5A 5958 5880 5704 5656 5856" $"4C80 4A02 494A 4A83 4902 4849 4981 4807" $"4748 4847 475A 5631 8100 0D13 4A27 0200" $"0001 0136 97C0 F3FF FE80 FF0B FEFF FFFE" $"FFFF FEFF FFFE FFFF 81FE 17FD FCFB F9F8" $"F7F6 F4F3 F2F1 F0EE EDEC EBEB E3D5 D3D2" $"D1D0 CA80 C201 C1C1 80C0 18BF BFAC 1F16" $"1718 1819 2645 6576 5F5E 5D5C 5B5A 5A59" $"5958 5857 8156 0258 554B 804A 0249 4A4A" $"8049 1148 4949 4849 4848 4748 4847 4847" $"4746 6658 3882 0002 4238 0480 0004 012F" $"93BD EE8E FE1B FDFC FBFA F9F9 F7F6 F5F4" $"F3F2 F1F0 EFED ECEB EAEA E9E2 D4D1 D0D0" $"CFC9 80C1 80C0 81BF 13AC 1F16 1718 1819" $"2645 6473 5E5D 5C5B 5A5A 5959 5880 5707" $"5656 5556 5855 4B4A 8449 8448 8447 0446" $"4556 593F 8200 0F52 2304 0000 0101 2890" $"BAE9 FAFB FBFC FC83 FD80 FC1F FBFB FAFA" $"F9F8 F7F6 F6F5 F4F3 F2F1 F0EF EEED ECEB" $"EAE9 E8E8 E1D2 D0CF CFCE C8C1 80C0 81BF" $"15BE BFAC 1F16 1718 1819 2645 636F 5D5C" $"5B5B 5A59 5958 5880 5780 5608 5558 544A" $"494A 4A49 4A81 4902 4849 4981 4802 4748" $"4880 4704 4645 525A 4582 000E 6318 1200" $"0001 0121 8CB8 E4F7 F7F8 F882 F900 FA81" $"F91F F8F8 F7F7 F6F5 F4F4 F3F2 F1F0 EFEE" $"EDED ECEB EAE9 E8E7 E7E6 E0D1 CFCE CECD" $"C8C0 82BF 81BE 12AB 1E16 1717 1819 2645" $"616C 5C5B 5B5A 5959 5858 8057 8056 0755" $"5558 544A 494A 4A80 4904 4849 4948 4982" $"4801 4748 8147 0446 455D 6015 8200 0236" $"1724 8000 0601 1B87 B5E0 F3F4 80F5 85F6" $"21F5 F5F4 F4F3 F3F2 F1F1 F0EF EFEE EDEC" $"EBEB EAE9 E8E7 E7E6 E5E5 DFD0 CECD CDCC" $"C7BF BF82 BE18 BDBD BEAB 1E16 1717 1819" $"2645 6069 5B5B 5A59 5958 5857 5756 5682" $"5502 5753 4A82 4984 4884 4781 4603 4469" $"6516 8200 0C44 1B30 0000 0101 1682 B3DC" $"F1F1 81F2 83F3 81F2 1CF1 F1F0 F0EF EEEE" $"EDEC ECEB EAE9 E9E8 E7E7 E6E5 E5E4 E4DE" $"CFCD CCCC CBC7 81BE 01BD BE81 BD10 AB1E" $"1617 1718 1927 465F 675B 5A59 5958 5880" $"5780 5681 550B 5753 4A49 4A49 4849 4948" $"4949 8048 0047 8048 8047 0746 4747 4643" $"5C6A 1982 000C 531E 0E00 0001 0111 7DB0" $"D8EE EE81 EF85 F080 EF11 EEEE EDED ECEB" $"EBEA EAE9 E8E8 E7E6 E6E5 E4E4 80E3 07DD" $"CFCC CCCB CBC6 BE84 BD0F BCBD AA1E 1617" $"1718 1927 465E 645A 5959 8058 0157 5780" $"5682 5502 5752 4A80 4904 4849 4948 4981" $"4800 4780 4880 4700 4680 4703 494E 6F1C" $"8200 0B48 1E20 0000 0101 0D77 AED4 EB80" $"EC89 ED12 ECEC EBEB EAEA E9E9 E8E8 E7E7" $"E6E5 E5E4 E4E3 E380 E206 DCCE CBCB CACA" $"C581 BD82 BC0D BDAA 1E16 1617 1818 2746" $"5D62 5959 8058 0057 8056 0355 5655 5480" $"5502 5752 4A80 4902 4849 4980 4805 4748" $"4847 4848 8147 0746 4746 4653 4F61 0282" $"0002 2F1F 3280 0006 010A 71AB D1E8 E981" $"EA85 EB80 EA80 E903 E8E8 E7E7 80E6 06E5" $"E4E4 E3E3 E2E2 81E1 06DB CDCA CAC9 C9C5" $"85BC 11BB BCA9 1D15 1617 1818 2746 5C60" $"5958 5857 5780 5680 5582 5402 5751 4985" $"4885 4784 4602 5F50 6683 000D 3B25 1800" $"0001 0108 6AA9 CDE6 E7E7 81E8 05E9 E8E9" $"E9E8 E981 E881 E705 E6E6 E5E5 E4E4 80E3" $"03E2 E2E1 E181 E001 DBCC 80C9 05C8 C4BC" $"BBBC BC82 BB0D BCA8 1D16 1617 1818 2746" $"5B5F 5858 8057 8156 8055 8154 0757 5149" $"4849 4948 4981 4802 4748 4881 4702 4647" $"4781 4602 544F 6F83 0002 442B 1D80 0005" $"0107 62A6 CAE4 81E5 89E6 81E5 80E4 01E3" $"E380 E201 E1E1 80E0 81DF 01DA CC81 C800" $"C487 BB0D A81C 1516 1717 1827 465A 5D58" $"5757 8056 0555 5655 5455 5581 5405 5650" $"4948 4949 8048 0547 4848 4748 4881 4702" $"4647 4781 4602 494F 7783 0002 182F 2F80" $"0005 0106 59A3 C8E1 80E3 8BE4 81E3 80E2" $"80E1 80E0 80DF 81DE 02DA CBC8 80C7 00C3" $"86BA 0DBB A71C 1516 1717 1827 4659 5C57" $"5780 5680 5581 5480 5303 5456 5049 8148" $"8547 8446 8045 0346 5350 5283 0002 1E39" $"3881 0004 0552 A0C5 DF80 E183 E280 E384" $"E281 E180 E081 DF80 DE81 DD01 D9CB 80C7" $"01C6 C386 BA0C BBA7 1C15 1617 1718 2846" $"585B 5781 5681 5580 5400 5380 5402 564F" $"4980 4805 4748 4847 4848 8047 0046 8047" $"8046 0045 8046 025F 5151 8300 0224 441B" $"8100 0603 4A9D C3DD DFDF 81E0 87E1 82E0" $"82DF 80DE 82DD 04DC DCDD D8CA 80C6 06C5" $"C2B9 B9BA BAB9 80BA 0CB9 BAA7 1C15 1617" $"1718 2846 575A 8056 8055 0254 5555 8054" $"0553 5453 5456 4F81 4804 4748 4847 4881" $"4700 4680 4780 4600 4580 4602 5751 5983" $"0002 1443 2B81 0005 0243 9AC0 DADD 80DE" $"8DDF 82DE 81DD 82DC 09DB DBDC D8C9 C5C5" $"C4C4 C186 B90C BAA6 1C15 1616 1718 2846" $"5759 5681 5581 5482 5304 5254 554E 4886" $"4785 4682 4503 4649 5162 8400 0146 3E81" $"0006 013C 97BE D8DC DC83 DD87 DE84 DD82" $"DC84 DB01 D7C9 81C4 05C1 B8B8 B9B9 B882" $"B90C A61C 1515 1617 1828 4656 5856 5681" $"5580 5401 5354 8153 0954 554D 4847 4848" $"4748 4880 4702 4647 4781 4602 4546 4681" $"4502 5553 3F84 0002 561E 0380 0004 0134" $"94BB D681 DB84 DC01 DDDD 89DC 83DB 83DA" $"01D7 C980 C401 C3C1 83B8 0EB9 B9B8 B9A5" $"1C15 1516 1718 2946 5557 8055 0154 5581" $"5480 5309 5253 5354 554D 4847 4848 8347" $"0246 4747 8146 0245 4646 8145 0261 543A" $"8400 025F 1813 8000 0501 2D90 B9D4 D981" $"DA91 DB84 DA81 D902 DAD6 C881 C300 C082" $"B781 B80C B9A5 1C15 1516 1718 2946 5557" $"5582 5482 5381 5202 5455 4C83 4785 4684" $"4580 4402 5C55 4184 0002 3B1A 2480 0005" $"0126 8CB7 D3D8 82D9 91DA 88D9 06D6 C8C2" $"C3C3 C2C0 80B7 01B8 B780 B80E B7B8 A51B" $"1415 1617 1729 4654 5655 5581 5401 5354" $"8153 0652 5352 5454 4C48 8347 0246 4747" $"8046 0045 8046 8045 0644 4545 434B 5649" $"8400 0249 1D28 8000 0601 2088 B4D1 D7D7" $"82D8 93D9 01D8 D982 D802 D9D5 C881 C202" $"C0B7 B682 B713 B8B7 B8A5 1B14 1516 1617" $"2946 5456 5554 5453 5454 8053 0252 5353" $"8052 0353 544B 4880 4705 4647 4746 4747" $"8046 0045 8046 8045 0644 4545 4259 5928" $"8400 0258 1D10 8000 0601 1A84 B2CF D6D6" $"83D7 94D8 82D7 02D8 D5C7 81C1 00BF 84B6" $"0FB7 B7B8 A41B 1415 1616 1729 4653 5554" $"5482 5384 5205 5153 544B 4747 8546 8545" $"8244 0340 6560 1D84 0002 451C 2180 0006" $"0115 7FB0 CDD5 D582 D69B D701 D5C7 81C1" $"00BF 82B6 80B7 0BB6 B7A4 1B14 1516 1617" $"2946 5381 5480 5302 5253 5380 520C 5152" $"5253 534A 4746 4747 4647 4780 4609 4546" $"4645 4645 4544 4545 8044 033E 6F64 2184" $"0002 341E 3380 0005 0110 79AD CBD4 82D5" $"88D6 86D7 0CD6 D7D7 D6D7 D7D6 D7D7 D6D7" $"D4C7 80C1 03C0 BFB5 B584 B60A B7A3 1A14" $"1515 1617 2946 5280 5481 5302 5253 5380" $"520B 5152 5253 534A 4746 4747 4647 8146" $"0245 4646 8145 0244 4545 8044 0343 4D68" $"2584 0002 4223 1380 0005 010D 73AA C9D3" $"82D4 85D5 94D6 06D4 C7C0 C1C1 C0BE 80B5" $"01B6 B581 B60C B7A2 1A14 1515 1617 2A46" $"5254 5480 5382 5201 5151 8050 074F 5050" $"4847 4647 4780 4605 4546 4645 4646 8145" $"0144 4581 4403 4D4E 6818 8400 0245 281E" $"8100 040B 6DA8 C7D2 81D3 84D4 95D5 02D6" $"D3C6 81C0 02BE B4B4 84B5 1AB6 A21A 1414" $"1516 1629 4550 5251 5050 4F4E 4E4D 4C4B" $"4A49 4746 4544 8042 0144 4582 4683 4584" $"4405 4343 4457 5068 8500 021F 2B30 8000" $"0401 0865 A5C5 80D2 83D3 86D4 02D5 D5D4" $"8DD5 0BD3 C6BF C0C0 BFBE B4B4 B5B5 B481" $"B504 B6A1 1912 1280 130C 243B 4546 4443" $"4241 403F 3E3D 3D83 3C07 3B3C 3C3D 3E41" $"4344 8045 0146 4680 4500 4480 4580 4405" $"4344 4460 5170 8500 0227 3333 8000 0501" $"075D A2C3 D182 D201 D3D2 83D3 02D4 D4D3" $"8CD4 80D3 05D2 D2D0 C3C0 C080 BF00 B885" $"B403 B5A1 110A 800B 030C 1A2F 3881 3C0A" $"3B3C 3C3B 3C3C 3B3C 3C3B 3C85 3B04 3D3F" $"4143 4481 4502 4445 4581 4405 4344 4443" $"4E79 8500 022E 3D1C 8100 0406 56A0 C1D0" $"82D1 8BD2 80D1 0ED0 D0CF CFCE CDCC CCCB" $"C9C8 C7C5 C4C1 83BF 05BE BCB7 B4B3 B380" $"B40A B5A0 0F08 090A 0A0C 1A2E 388C 3B87" $"3A05 3B3C 3D40 4243 8344 8143 0344 4E4D" $"6E85 0002 143B 2C80 0006 0104 4E9D BFCF" $"D084 CF14 CECE CDCD CCCC CBCA C9C8 C7C5" $"C4C3 C1C0 BFBE BDBC BB83 BA04 B9BA BBBD" $"BE81 BF03 BEBF BCB7 80B4 0CB3 B4A0 0E08" $"0809 0A0B 1A2E 373A 803B 0C3A 3B3B 3A3B" $"3B3A 3B3B 3A3B 3B3A 803B 873A 053C 3E40" $"4243 4380 4405 4343 4458 4F50 8600 0249" $"2B0F 8000 1502 4595 B8C8 C8C7 C6C5 C4C3" $"C2C0 BFBE BCBB BABA B9B8 B883 B786 B883" $"B903 BABB BDBE 80BF 80BE 0FBD B8B4 B3B4" $"9F0E 0708 0909 0B1A 2E37 3A80 3B88 3A04" $"3939 3838 3980 3A05 393A 3A39 3A3A 8139" $"033A 3C3F 4081 4203 4359 545B 8600 0262" $"1D1E 8100 0237 85A5 81B5 83B4 83B5 85B6" $"84B7 86B8 06B9 B9BA BDBE BFBF 81BE 0EBD" $"B8B5 9F0C 0707 0809 0A1A 2D36 3A3A 8039" $"0338 3837 3780 3681 3580 3402 3536 3884" $"390F 3838 3736 3534 3332 3130 2F2D 3759" $"5665 8600 0333 2316 1180 0004 2E7D 9FB0" $"B283 B383 B482 B501 B6B5 83B6 84B7 02B8" $"B8B7 83B8 02B9 BABC 83BE 0BBD BDA6 1C02" $"0406 0708 1729 3185 3403 3534 3435 8434" $"0133 3282 3112 2F2D 2A27 2421 1E1B 1C2A" $"3C25 373C 394F 4759 4C86 000A 0941 1C22" $"0400 0027 7A9D AF82 B282 B383 B484 B584" $"B600 B780 B601 B7B6 80B7 86B8 01B7 B680" $"B40A 9E08 0101 0002 0516 2830 3380 3482" $"3323 3231 302F 2E2C 2B28 2624 211E 1B17" $"1310 0D0B 1C4D 3133 4A37 4C4E 332E 3232" $"3641 445B 6E11 8700 092C 2F16 1C00 0022" $"779B AE82 B182 B283 B386 B403 B3B3 B2B2" $"80B1 80B0 02AF B1B5 83B7 02B4 B2B2 82B1" $"02B3 9E09 8002 1901 010F 242D 302F 2E2C" $"2A28 2624 211E 1B18 1411 0E0C 0907 0603" $"0280 0181 000F 0F2A 3637 2B33 3F51 5D77" $"9841 4034 1F0B 8800 0A26 4F26 270A 001D" $"7399 ADB0 83B1 82B2 01B1 B180 B001 AFAF" $"85AE 01AF AE82 AF26 B0AF B0B0 B2B6 B7B6" $"B7B6 B1B1 B0AF ADAB A8A5 A278 0403 0302" $"0302 060F 1818 1512 0F0C 0A08 0605 0482" $"030C 0202 0303 0100 0101 0001 0100 0180" $"000B 0F29 4048 4451 5F70 8474 4310 8800" $"0C30 512C 2118 2400 186F 96AB AEAE 80AD" $"80AC 82AB 82AC 01AD AC80 AD02 AEAE AD81" $"AE00 AF81 AE12 ADAC AAA9 A6A6 A5A1 9B90" $"8A83 7B72 695E 5348 1784 0380 048C 031C" $"0203 0301 0001 0100 0101 0204 050A 0C10" $"1719 2E4F 5F5A 4F56 606E 8174 3B86 000C" $"552C 2829 1729 0011 668E A4A8 A882 A981" $"AA83 AB84 AC1E ABAA A8A6 A4A1 9D99 948E" $"8881 7A71 685F 544A 4551 3028 221E 2026" $"2C2C 1808 0495 030F 0408 0909 0E10 181C" $"2229 2B31 3336 3939 813A 0939 405A 6161" $"5A62 6B7A 6985 0003 5328 2A01 8002 070E" $"628C A3A8 A8A9 A880 A982 AA2C A9A8 A7A6" $"A4A1 9E9A 9691 8B85 7F77 7067 5E54 4940" $"372E 251D 170F 0A06 0402 002F 0F10 1112" $"141B 2630 342B 1708 0588 0410 0505 060A" $"0B11 141A 2124 2D30 363A 383A 3B8F 3C06" $"4462 6C63 6673 0D84 0003 512A 1F02 8003" $"230E 5B89 A1A7 A6A5 A4A3 A09E 9B97 938E" $"8983 7C75 6E65 5C53 4A40 372E 261E 1813" $"0E0A 0807 0581 0400 0385 001C 0811 1213" $"1316 1F2A 3236 2C16 0A06 0607 0B0D 1017" $"1921 262C 3335 3A3C 3E83 4002 4141 3E85" $"3D12 3E3E 3F41 4345 474A 4D50 5255 5758" $"566E 637D 1A84 0003 4D23 2102 8004 2305" $"2F6C 8486 807A 736C 645B 5249 4037 2F27" $"2019 140F 0C09 0707 0504 0505 0405 0504" $"0505 0481 0501 0401 8500 1203 0E13 1314" $"1519 232D 3539 3834 3436 393D 3F40 8241" $"8742 1043 4340 4041 4345 474A 4C4F 5254" $"5658 5859 815A 0859 5958 5758 526B 771B" $"8400 0354 1909 0181 040D 0923 312F 2620" $"1914 100C 0A07 0606 9605 1704 0100 0308" $"0B19 202D 414A 635F 2314 1516 171C 2731" $"383D 418A 430D 4445 4648 4B4E 5055 5855" $"5658 595A 805B 005C 805B 0F5A 5958 5655" $"5452 5150 4F4E 4E4B 7071 1B84 0004 481B" $"1D00 0382 0500 068A 0502 0606 0580 064D" $"0506 0605 0606 0506 0605 070E 111B 2A31" $"4854 6377 8092 9AA3 ADAB AEAF B0B0 A85C" $"1815 1617 1920 2A34 3A3F 4344 4445 4648" $"4A4D 4F52 5659 5C5F 6163 6465 666A 6961" $"5F5F 5E5C 5B59 5756 5453 5150 4F4F 824E" $"814D 034C 5674 1C84 000A 351D 2E00 0205" $"0606 0506 058F 0613 0707 0B15 172B 3243" $"5A64 7E87 96A4 A9B3 B6B8 B8B5 80B4 80B5" $"2BB2 B3B5 B8BD C2C8 B243 1617 1819 1B23" $"2E36 3C45 575E 6063 6466 696C 6F72 7576" $"7674 716E 6B6A 6558 5553 5250 5081 4F84" $"4E80 4D00 4C80 4D03 5655 6D0E 8400 0542" $"2121 0001 048A 0615 0709 0A15 1A25 383F" $"5963 798B 94A5 ABB1 B8B8 B9B9 BABA 80BB" $"31BC BCBD BEBC BEC3 C8CE D4DA DADF E4E6" $"E8E9 EAEB E239 1717 1819 1A1E 2632 4DA5" $"AA96 9794 9089 8179 716A 6460 5D5C 5B5A" $"5C5A 5080 4F85 4E84 4D81 4C03 4D61 576A" $"8500 0651 2619 0000 0306 8007 280A 0C12" $"1E22 3640 5167 7089 929F AAAF B5B7 B8B8" $"B9B9 BABA BBBB BCBC BEC0 C4C8 CED4 DAE1" $"E8EF F3F0 EEF0 81F1 1BE7 E6E4 E3E1 DFDD" $"DBD8 6817 1718 191A 1B1C 274A 809F 7268" $"625E 5C5B 5B81 5A06 595A 5959 5C59 5080" $"4F02 4E4F 4F83 4E01 4D4E 824D 814C 0268" $"5773 8500 4A29 242A 0000 0107 2353 7082" $"9399 A7AD B1B6 B6B7 B7B8 B8B9 B9BA BABB" $"BCBE C1C5 CAD0 D6DD E4EA F0F5 F9FC FDFE" $"FEFF FFFE FEF4 ECEA E8E5 E3E0 D3D0 CCCA" $"C7C5 C3C2 C164 1617 1819 1A1A 1B24 4655" $"805B 025A 5B5B 805A 0259 5A5A 8159 085C" $"594F 4E4F 4F4E 4F4F 804E 024D 4E4E 814D" $"024C 4D4D 814C 024D 577C 8500 2029 2B34" $"0000 011E 6493 AFB6 B6B7 B7B8 B9B9 BABB" $"BEC1 C6CB D1D8 DFE6 ECF2 F6FA FCFD 86FE" $"0DFC FAF8 F5F2 EDDD D3D1 CECD CBCA BF84" $"BE0C BF63 1617 1819 191A 1B24 4655 5B82" $"5A85 5904 5859 5B58 4F84 4E84 4D83 4C05" $"4B4B 4C57 576C 8500 1733 3417 0000 0114" $"5582 A6BB C1C6 CCD2 D9E0 E7ED F2F7 FAFC" $"FD80 FE80 FF12 FEFF FFFE FBF9 F6F3 EFEB" $"E7E4 E2E0 DEDD DDDB CE82 C804 C9BE BDBE" $"BD82 BE0C 6216 1718 1819 1A1B 2446 545B" $"5B81 5A02 595A 5A80 5900 5880 5904 5B58" $"4F4E 4F81 4E02 4D4E 4E80 4D00 4C80 4D80" $"4C00 4B80 4C02 6257 5285 0002 1D39 2880" $"000A 0835 73BD EDF6 F9FA FCFC FD81 FE0F" $"FFFF FEFE FCF9 F6F3 EFEB E7E3 E0DE DDDC" $"84DB 80DC 02DA CEC7 82C8 82BD 0EBE BEBD" $"BE62 1617 1718 191A 1B24 4654 805A 0459" $"5A5A 595A 8159 0658 5959 585B 574F 804E" $"044D 4E4E 4D4E 814D 024C 4D4D 814C 064B" $"4C4B 4C62 575A 8500 0202 433A 8000 0503" $"187B D5F5 FD80 FE0B FDFC F8F6 F1EE EAE6" $"E2DE DCDB 80DA 80D9 88DA 80DB 01DA CE83" $"C700 BD81 BC81 BD0B 6216 1618 1819 1A1A" $"2446 545A 8559 8458 035B 574E 4E85 4D84" $"4C83 4B03 4C4F 5863 8500 1203 531B 0100" $"0001 0B77 C1E2 ECE8 E4E0 DDDB DAD9 83D8" $"01D9 D884 D902 DADA D984 DA80 DB01 D9CE" $"83C7 00BD 81BC 0EBD BDBC BD61 1616 1718" $"191A 1A24 4654 805A 8059 0558 5959 5859" $"5981 5807 5A56 4E4D 4E4E 4D4E 814D 024C" $"4D4D 814C 014B 4C82 4B02 5958 4985 000A" $"035B 1C0B 0000 0106 64AA CC82 D601 D7D6" $"80D7 02D8 D8D7 81D8 02D9 D9D8 84D9 01DA" $"D984 DA07 D9CE C6C7 C7C6 C7C7 86BC 0A61" $"1516 1718 1919 1A25 4654 8359 0258 5959" $"8058 0057 8058 055A 554E 4D4E 4E80 4D04" $"4C4D 4D4C 4D82 4C80 4B00 4A80 4B02 6559" $"3A86 0009 3C24 1500 0001 045C A7C9 81D5" $"83D6 84D7 86D8 86D9 02DA D9CD 83C5 00BC" $"84BB 0BBC 6015 1617 1818 191A 2546 5380" $"5985 5881 5703 585A 554E 814D 854C 834B" $"824A 025F 5A41 8600 0A4B 2817 0000 0103" $"53A4 C7D4 80D5 83D6 02D7 D7D6 81D7 02D8" $"D8D7 83D8 02D9 D9D8 84D9 08D8 CDC4 C5C5" $"C4C5 C5BC 85BB 0A60 1516 1718 1819 1A25" $"4653 8059 0258 5959 8058 0257 5858 8157" $"025A 544E 804D 044C 4D4D 4C4D 814C 064B" $"4C4B 4B4A 4B4B 804A 0349 525B 4986 000A" $"5B1A 0F00 0001 024B A1C5 D483 D502 D6D6" $"D580 D602 D7D7 D682 D704 D8D7 D8D8 D783" $"D881 D901 D8CD 83C4 00BB 80BA 82BB 0D60" $"1516 1717 1819 1A25 4653 5859 5980 5805" $"5758 5857 5858 8157 0159 5481 4D02 4C4D" $"4D80 4C02 4B4C 4C81 4B02 4A4B 4B80 4A03" $"475E 5F25 8600 0A46 191F 0000 0102 429D" $"C3D3 80D4 83D5 83D6 80D7 00D6 83D7 02D8" $"D8D7 84D8 08D7 CDC3 C4C4 C3C4 C4BB 85BA" $"0C5F 1516 1617 1819 1A25 4653 5859 8158" $"0257 5858 8057 0056 8057 0759 534D 4C4D" $"4D4C 4D81 4C02 4B4C 4C81 4B80 4A06 494A" $"4A46 6C63 1D86 0002 381B 3280 0005 013B" $"99C1 D3D3 84D4 84D5 86D6 87D7 02D8 D7CD" $"83C3 00BA 84B9 0DBA 5F15 1516 1718 1919" $"2546 5358 5886 5781 5602 5759 5283 4C84" $"4B83 4A80 4904 4A45 6768 2186 000A 461F" $"1000 0001 0133 96BF D280 D383 D484 D586" $"D605 D7D7 D6D7 D7D6 81D7 01D6 CC80 C303" $"C2C3 C3BA 85B9 0A5E 1415 1617 1818 1925" $"4653 8058 0257 5858 8057 0256 5757 8056" $"0357 5952 4D83 4C01 4B4C 814B 024A 4B4B" $"814A 8049 034C 526D 2586 000A 4823 1D00" $"0001 012C 92BC D181 D301 D4D3 83D4 85D5" $"01D6 D588 D605 D7D7 D6CC C2C3 81C2 00BA" $"80B8 82B9 0D5E 1415 1617 1818 1925 4653" $"5758 5883 5701 5657 8156 0257 5851 814C" $"024B 4C4C 804B 024A 4B4B 814A 0249 4A4A" $"8049 0355 5369 0B86 0002 2625 2F80 0004" $"0124 8EBA D081 D284 D385 D48A D580 D601" $"D5CC 80C2 04C1 C2C2 B9B7 84B8 0A5E 1415" $"1616 1718 1926 4653 8257 8456 8055 0356" $"5851 4C85 4B83 4A82 4905 4848 495F 546C" $"8700 0230 2C30 8000 0401 1E89 B7CF 81D2" $"01D3 D283 D302 D4D4 D381 D405 D5D5 D4D5" $"D5D4 86D5 04D6 D5CC C1C2 81C1 03B9 B7B8" $"B782 B80A 5D14 1515 1617 1819 2646 5380" $"5704 5657 5756 5781 5609 5556 5556 5850" $"4C4B 4C4C 804B 024A 4B4B 804A 0049 804A" $"8049 0548 4949 5353 7487 0002 3A34 1B80" $"0007 0118 85B5 CED1 D2D1 83D2 83D3 80D4" $"00D3 84D4 04D5 D4D5 D5D4 81D5 01D4 CC83" $"C100 B985 B70A 5C14 1415 1617 1818 2646" $"5380 5701 5657 8156 0255 5656 8055 0556" $"5750 4C4B 4C81 4B02 4A4B 4B80 4A02 494A" $"4A81 4905 4848 494D 527C 8700 021C 382A" $"8000 0401 137F B2CC 83D1 86D2 87D3 88D4" $"01CB C182 C000 B884 B60B B75B 1314 1516" $"1718 1826 4652 8356 8555 0354 5657 4F80" $"4B84 4A84 4982 4803 4956 5356 8700 020A" $"433F 8100 060E 79AF CBD1 D1D0 81D1 01D2" $"D183 D288 D304 D4D3 D4D4 D381 D401 D3CB" $"83C0 00B8 85B6 0A5B 1314 1516 1717 1826" $"4652 8356 0255 5656 8055 0554 5555 5656" $"4F81 4B01 4A4B 814A 0249 4A4A 8149 8048" $"0547 4849 6254 5787 0003 0C53 1802 8000" $"030B 73AC CA80 D002 D1D1 D083 D185 D204" $"D3D2 D3D3 D288 D300 CB80 C003 BFC0 BFB8" $"80B5 82B6 0A5B 1314 1516 1617 1826 4652" $"8056 0255 5656 8355 0954 5554 5656 4E4B" $"4A4B 4B80 4A02 494A 4A84 4980 4805 4748" $"4859 5460 8700 030A 5421 0980 0003 086B" $"A9C8 80CF 84D0 87D1 8BD2 02D3 D2CA 83BF" $"01B7 B484 B50A 5A13 1414 1516 1718 2646" $"5285 5584 5402 5555 4D82 4A84 4983 4881" $"4703 484E 556A 8800 023E 2C10 8000 0306" $"64A6 C680 CF02 D0D0 CF83 D002 D1D1 D084" $"D105 D2D2 D1D2 D2D1 85D2 00CA 80BF 06BE" $"BFBE B7B4 B5B4 82B5 0A5A 1313 1415 1617" $"1727 4652 8056 8055 0254 5555 8354 0356" $"564D 4B80 4A02 494A 4A80 4902 4849 4981" $"4801 4748 8047 0348 5955 4588 0002 4D22" $"0A80 0006 045C A3C4 CFCF CE81 CF01 D0CF" $"84D0 02D1 D1D0 89D1 81D2 01D1 CA83 BE00" $"B685 B40A 5A13 1314 1516 1617 2746 528B" $"5504 5455 544D 4B80 4A01 494A 8149 0248" $"4949 8148 8047 0546 4747 6656 4188 0002" $"5E19 1080 0003 0354 A0C2 83CE 86CF 8AD0" $"02D1 D1D0 82D1 01CA BE82 BD00 B684 B30B" $"B459 1213 1415 1616 1727 4651 8155 8056" $"0D55 5554 5453 514F 4D4C 4B4C 4C4B 4A81" $"4983 4883 4781 4602 5557 4988 0002 3619" $"2480 0004 024C 9DC0 CD83 CE01 CFCE 84CF" $"02D0 D0CF 8ED0 00C9 83BD 00B5 85B3 0A59" $"1213 1415 1516 1728 4753 8056 0855 5453" $"5250 4E4C 4A48 8047 0646 4748 4B4C 4C4A" $"8049 0148 4981 4801 4748 8247 0546 4645" $"5257 5188 0002 401C 3480 0003 0244 9ABE" $"80CD 02CE CECD 83CE 02CF CFCE 85CF 07D0" $"CFD0 D0CF D0D0 CF82 D000 C980 BD03 BCBD" $"BCB5 80B2 82B3 1058 1313 1415 1617 1727" $"4650 5250 4E4C 4A49 8047 0F46 4747 4647" $"4746 4746 4649 4B4B 4A49 4980 4802 4748" $"4881 4701 4647 8046 0344 5D5B 2188 0002" $"4E20 0E80 0006 013C 96BC CCCD CC81 CD01" $"CECD 85CE 04CF CECF CFCE 8BCF 00C9 83BC" $"00B5 85B2 0058 8013 8114 0E22 3C45 4847" $"4746 4747 4647 4746 4747 8546 0447 4A4B" $"4B49 8048 0147 4882 4780 4605 4546 426B" $"5E26 8800 0248 2120 8000 0401 3592 BACB" $"83CC 86CD 8CCE 81CF 02D0 C9BC 82BB 00B4" $"85B1 0A57 1010 0F0F 1010 111E 3843 8B46" $"8445 0546 484A 4A49 4881 4782 4680 4504" $"4642 5D62 2C88 0002 2B23 3280 0006 012E" $"8FB8 CACC CB83 CC87 CD02 CECE CD83 CE81" $"CF00 D080 CF01 C7BD 82BB 00B6 85B1 0F54" $"0C0D 0E0E 0F10 101F 3842 4647 4746 4784" $"4605 4546 4645 4646 8245 0447 494A 4A48" $"8047 0C46 4746 4645 4646 4545 4950 6731" $"8800 0235 291D 8000 0401 278B B5C9 80CB" $"01CC CB84 CC01 CDCC 83CD 80CE 81CF 0BCE" $"CECD CCCB C9C7 C5C1 BFBC BB81 BA00 B484" $"B00A 540C 0D0D 0E0F 0F10 1F38 4283 4608" $"4546 4645 4646 4546 4681 450B 4445 4544" $"4545 4849 4A48 4747 8146 8245 0351 5368" $"0488 0002 4131 1E81 0005 2086 B3C8 CACA" $"86CB 80CC 80CD 82CE 12CD CCCB CAC8 C6C4" $"C1C0 BEBE BDBE BFBF BEBB B9BA 80B9 00B3" $"83AF 0B53 0C0D 0D0E 0F0F 101F 3842 468B" $"4588 4405 4648 4949 4746 8245 0544 4445" $"5957 7089 0002 0E32 2F80 0004 011A 81B0" $"C780 CA01 CBCA 80CB 80CC 82CD 08CC CCCA" $"C9C7 C5C3 C0BF 81BD 00BC 80BD 06BC BDBD" $"BEBF BDBA 82B9 00B2 82AF 1253 0C0C 0D0E" $"0E0F 101F 3842 4546 4645 4646 4546 8145" $"0344 4545 4480 4580 440B 4344 4443 4444" $"4749 4847 4646 8145 0444 4549 5178 8900" $"0211 3E30 8000 0401 157C ADC6 80CA 01CB" $"CB82 CC08 CBCA C9C8 C6C4 C2BF BE81 BC00" $"BB89 BC1C BDBE BEBC B9B9 B8B9 B8B8 B1AF" $"AFAE AE52 0B0C 0D0D 0E0F 101F 3842 4546" $"4683 4505 4445 4544 4545 8144 0443 4444" $"4344 8243 0D45 4748 4846 4544 4544 4445" $"4B4E 7C89 0003 154A 1702 8000 0311 78AC" $"C680 CB0B CACA C9C8 C6C5 C3C0 BEBC BBBB" $"83BA 8DBB 03BC BEBD BB81 B802 B7B7 B080" $"AE0A 520B 0C0D 0D0E 0F0F 1F38 4282 4589" $"4485 4382 420C 4346 4747 4645 4444 4345" $"554F 5389 0012 0839 2506 0000 010D 72A8" $"C3C7 C5C3 C1BF BDBB BA81 B901 BAB9 85BA" $"04BB BABB BBBA 88BB 04BC BDBD BAB8 81B7" $"0EB6 AFAD AD51 0A0C 0C0D 0E0E 0F1F 3842" $"8045 0544 4545 4445 4583 4400 4380 4483" $"4301 4243 8242 0A44 4747 4645 4443 4461" $"505B 8A00 0240 2010 8000 0509 669D B6BA" $"B983 B802 B9B9 B884 B989 BA80 BB1C BABB" $"BBBA BBBB BCBD BCB9 B7B7 B6B7 B6B5 AEAD" $"510A 0B0C 0D0E 0E0F 1F38 4280 4502 4445" $"4583 4405 4344 4443 4444 8143 0242 4343" $"8042 0E41 4242 4141 4245 4646 4543 444F" $"5166 8A00 0254 1B1E 8000 0305 5A94 B084" $"B786 B88B B987 BA03 BBBC BBB8 82B6 0CB4" $"AD50 0A0B 0C0D 0D0E 0F1F 3841 8544 8743" $"8542 8641 0743 4546 4545 4D54 6F8A 0002" $"3324 1A80 0005 0453 91AF B7B6 83B7 02B8" $"B8B7 84B8 02B9 B9B8 8DB9 07BA B9B9 BABB" $"BBBA B682 B50B B24F 090B 0C0D 0D0E 0F1F" $"3841 8044 0843 4444 4344 4443 4444 8043" $"0042 8043 0142 4381 4202 4142 4280 410B" $"4041 4140 4041 4445 4763 583B 8A00 092A" $"3528 0300 0002 4B8E AD82 B686 B788 B804" $"B9B8 B9B9 B880 B900 B885 B902 BBBB B981" $"B50C B4B3 8313 0A0C 0C0D 0E0E 2038 4180" $"4405 4344 4443 4444 8343 0042 8043 8042" $"0241 4242 8341 8040 083F 3E3C 3734 5160" $"624A 8A00 0908 4B19 1A00 0002 448B AB80" $"B585 B68A B790 B803 BABA B8B5 80B4 0BB2" $"9260 100B 0C0D 0D0E 2038 4187 4386 4285" $"4181 400B 3D39 3238 3C44 4E51 5456 724E" $"8B00 0850 2328 0000 013D 89A9 82B5 86B6" $"80B7 00B6 87B7 01B8 B780 B806 B7B8 B8B7" $"B8B8 B781 B813 BAB9 B7B4 B3B3 B29B 6F36" $"0D0C 0D0D 0E20 3841 4344 8443 0442 4343" $"4243 8242 0241 4242 8041 1140 3E3B 3532" $"4042 4B50 4C43 444A 5564 6966 068B 0002" $"3A30 2980 0004 3685 A8B4 B483 B502 B6B6" $"B585 B604 B7B6 B7B7 B691 B711 B8B9 B8B5" $"B3B3 B1A1 8934 1B0B 0C0D 0E20 3841 8043" $"0842 4343 4243 4342 4343 8042 0041 8042" $"1541 4140 3D38 2F3B 444A 4B54 4744 494F" $"5F79 644D 391D 048D 0009 1743 1914 0000" $"3082 A5B3 81B4 02B5 B5B4 83B5 80B6 00B5" $"8AB6 07B7 B7B6 B7B7 B6B7 B783 B610 B7B8" $"B7B4 B2B1 A39F 491E 370B 0D0E 2037 4080" $"4304 4243 4342 4381 4217 4142 4241 403E" $"3A34 3142 494E 5744 4447 4E5A 6B6F 5F40" $"2B02 9300 0757 1C19 0000 2A7F A381 B387" $"B48F B582 B685 B510 B6B7 B8B6 B3B0 A2A5" $"7635 2532 0C0D 2037 4086 4280 4112 3F3B" $"3534 3E49 4853 5644 464C 5769 735E 4B35" $"0E98 0008 3C25 2600 0023 7BA1 B281 B302" $"B4B4 B383 B480 B500 B49A B510 B7B7 B5B1" $"A3A7 7268 3321 220C 2037 4043 4381 4213" $"4140 3D37 3238 474E 514D 4846 4B54 636F" $"6D51 3F21 9D00 0926 361D 0D00 1D77 9FB1" $"B284 B304 B4B3 B4B4 B387 B405 B5B5 B4B5" $"B5B4 80B5 07B4 B5B5 B4B5 B5B4 B583 B400" $"B580 B620 A4A7 5915 4621 1F1E 1F37 4042" $"4140 3E3A 3239 3C45 4E4B 4B44 4951 5D70" $"6F5B 4721 0CA1 0008 034A 1A17 0018 739D" $"B085 B289 B392 B483 B31E B4B5 BAA8 A85A" $"000D 2429 393B 2D38 3531 4242 4C4F 4B43" $"444A 5364 6560 513A 0EA7 0008 4A24 2300" $"136E 9AAF B186 B202 B3B3 B288 B304 B4B3" $"B4B4 B380 B402 B3B4 B486 B31D B2AE A699" $"8793 A9A9 6000 000F 693F 3A41 3846 5244" $"4348 4F5E 7960 4837 1B02 AB00 0733 3326" $"030F 6A98 AE81 B102 B2B2 B187 B208 B3B3" $"B2B3 B3B2 B3B3 B286 B311 B2B3 B3B2 B2AF" $"A89C 8977 7677 7A8C 9899 A342 8000 0B30" $"4F41 4043 4756 666A 5C3B 28B1 0007 1A4D" $"221B 0B64 95AD 80B0 89B1 91B2 11AF A99E" $"8C7C 7574 7A86 8E81 7B78 7C85 8A64 0281" $"0006 1015 1516 151C 0BB5 0007 0157 1F1D" $"085F 93AC 81B0 02B1 B1B0 88B1 20B2 B1B2" $"B2B1 B2B2 B1B2 B2B1 B1AF AAA0 917E 7676" $"7B81 8887 7D78 787E 8278 5341 1C05 C300" $"0A3F 2829 0758 90AA AFB0 B0AF 83B0 02B1" $"B1B0 80B1 00B0 85B1 14AF ABA3 957F 7876" $"767E 8A88 7E7A 777C 8A77 613F 260D C800" $"0619 3B2A 1051 8DA9 87AF 87B0 14AF ACA4" $"9885 7378 767D 8986 817A 7779 8382 6E49" $"320C CD00 0A07 502A 2D48 8AA7 AEAF AFAE" $"86AF 17B0 AFAF ACA5 9A89 7474 7376 838D" $"817B 7878 808F 7057 3214 02D2 0005 4935" $"3F41 87A6 84AE 17AF AFAE AEAB A69C 8C7A" $"7171 7681 8D7F 7976 777F 8379 623D 23D8" $"0005 3543 593D 83A4 83AD 14AB A79E 8F7C" $"7373 767B 8686 7A76 767A 827D 5845 2009" $"DC00 1B12 5B55 4D7F A2AC ABA7 9F92 7E74" $"7273 7A85 867C 7775 7985 7A66 442D 13E2" $"0016 5159 6A63 8382 706F 7379 8284 7F78" $"7577 7F83 734E 3910 02E6 0011 4164 6B72" $"737B 877D 7674 757D 9173 5C38 1C05 DD00" $"8200 470E 4B55 3731 3939 353C 464D 5759" $"412C 292C 3135 3A3E 3B31 2926 2A2E 3337" $"3A35 2F29 262C 3238 3E40 3A32 2A29 3139" $"424A 4E48 3F35 3340 4D5A 686E 6C67 582B" $"3943 4D5F 4106 0000 091E 3C80 3A09 3B3C" $"3E40 4142 4237 0808 8109 020A 0A06 9F00" $"0906 3E61 3727 2636 2C1B 1D83 1C51 1F24" $"292E 3438 3F41 2C25 2B31 373D 434B 4E2C" $"292E 353B 434A 5151 292A 2F38 3F48 5058" $"592F 292A 3035 3B41 4340 2D28 282E 353C" $"4661 7E83 85A5 979C ADBF D1DD DFE0 E1E0" $"DEDB D8D8 D9DB DDDF DFDE DBC8 A9AB ADAF" $"80B2 14B0 9F73 7577 797B 7C7C 7B62 3F41" $"4345 4849 4A4B 3910 8200 2616 673F 2A20" $"2928 0C17 3282 817E 7A73 6C65 5E59 5550" $"4D4A 4742 3D38 3330 2C2A 2726 2423 2221" $"2120 811F 831E 811D 2821 2529 2D30 3538" $"3920 252D 333D 434D 546E 7572 727A 8CA9" $"C2D7 DFE2 E3E4 E5E5 E2E1 E2E2 E3E4 E5E5" $"E4E2 84E1 01DF DE83 DC21 DBDA D7D5 D4D5" $"D6D6 D7D6 D5D4 D1D1 7602 0000 0C62 2F20" $"2B2A 0700 0B15 45F1 F8FA FBFC 86FE 3BFC" $"F9F6 F4F1 EFEE ECEA E3DB D4CE C9C4 C0B7" $"ADA5 9F98 8F85 7C71 665D 544C 4640 3B36" $"3330 2E2D 2B2A 2928 2725 435E 707B 7480" $"7573 91D4 EBEB EAEA E9E8 E680 E52C E4E4" $"E3E2 E2E0 DDDC DDDD DEDE DFDF DDD8 D8D9" $"D9DA DADB DBD8 D3D3 D4D5 D6D7 D9D9 D8D5" $"D5D4 CC31 0000 0B46 1F31 0E80 0008 101E" $"33BD D4D6 D8DA DC82 DD49 DCDB DAD9 D7D6" $"D4D1 CFCD CBC8 C5C2 BFBC B9B6 B3B0 ADAA" $"A6A3 9E9A 9690 8B85 7F7A 7570 6B66 615C" $"5752 4D48 433E 3A2D 1E58 5A59 5754 5259" $"9DDD FDFB FBFA FAF8 F7F6 F5F3 F1EF EEED" $"ECEB EAEA 80E9 80E8 80E7 81E6 80E5 20E4" $"E3E2 E1E0 DFDD DCDA D9D4 CFC5 3D00 000A" $"3A3B 0400 0001 0115 293C BAD4 D6D8 D9DB" $"81DC 49DB DAD9 D7D5 D2CF CCC8 C4BF BBB7" $"B2AD A8A2 9D98 928D 8882 7D78 736E 6964" $"5D53 4F4B 4845 423F 3934 312E 2C2A 2826" $"2520 1738 3A38 3635 3546 92CD FEFA F7F4" $"F0ED EAE8 E6E3 E2E0 DEDD DBDA D980 D882" $"D782 D601 D5D5 82D4 80D5 80D6 09D7 D4C6" $"C23D 0000 0B3F 1F80 000B 0102 152C 3CAE" $"CDCF D1D2 D4D4 80D5 4ED4 D3D2 D0CF CCC9" $"C6C2 BFBB B7B3 AEAA A5A1 9C97 928D 8984" $"7F7B 7672 6E6A 6658 4D4A 4743 413A 3230" $"2D2B 2927 2624 231E 162E 3234 3537 384E" $"A0D8 FEFE FDFC F9F7 F4F1 EEEB E9E7 E5E4" $"E2E1 DFDF DCD1 CECE 88CD 13CC CCCB CBCA" $"CAC9 C9C8 C7C7 C9BD C03F 0000 0C3C 2D80" $"0064 0102 132B 3AA1 C3C5 C7C9 CACB CBCC" $"CBCB CAC9 C7C5 C3C0 BDBA B7B4 B0AC A8A4" $"A09B 9792 8E8A 8581 7C78 7470 6C69 6458" $"4B47 4441 3E36 2F2D 2B29 2726 2423 221E" $"162B 2F30 3233 354A 9AD4 FEFD F9F5 F2EF" $"ECE9 E7E5 E3E1 DFDE DDDC DBDB DED8 D2D1" $"D1D0 CFCE CDCD CC80 CB80 CA80 C980 C80B" $"C7C7 C6C5 BFBC 4000 000E 423E 8000 0A01" $"0111 2A38 93BA BCBD BFC0 82C1 53C0 BFBD" $"BBBA B7B5 B2AF ACA8 A4A1 9D99 9591 8D88" $"8480 7C78 7470 6C69 6661 5548 4542 3F3C" $"342D 2B2A 2826 2523 2221 1D16 2B2F 3132" $"3335 4B9B D5FE FBF7 F4F1 EEEB E9E7 E5E3" $"E1E0 DEDD DCDB DCDC D4CE CDCD CCCD CCCB" $"CC80 CB04 CAC9 CAC9 C980 C880 C70B C6C6" $"C3C2 BA42 0000 114E 1B01 8000 0901 0F29" $"3687 B1B3 B5B6 B781 B84C B7B7 B6B4 B3B1" $"AFAC AAA7 A4A1 9D9A 9693 8F8B 8783 7F7B" $"7874 706C 6966 635F 5345 4240 3D3B 322C" $"2A28 2725 2423 2120 1D16 2B2F 3032 3335" $"4B9B D5FE F9F5 F2EF ECEA E7E5 E3E2 E0DF" $"DEDC DBDA DCDC D380 CD01 CCCC 80CB 81CA" $"81C9 01C8 C880 C71A C6C6 C5C1 BAB9 4600" $"000F 5323 0600 0001 010D 2835 7CA9 ABAC" $"ADAE AF80 B04E AFAE ADAC ABA9 A7A5 A2A0" $"9D9A 9793 908D 8985 827E 7B77 7370 6C69" $"6663 605C 5143 403E 3B39 312A 2927 2624" $"2322 2120 1D16 2B2F 3032 3335 4C9B D5FE" $"F6F3 F0ED EBE8 E6E4 E2E1 DFDE DDDC DBDA" $"DBDB D2CD CD80 CC81 CB01 CACA 82C9 80C8" $"80C7 05C5 C5C0 BDB8 3B80 000F 3F2F 0C00" $"0001 010B 2734 72A1 A3A4 A5A6 82A7 4EA6" $"A5A4 A3A1 9F9D 9B98 9693 908D 8A87 8380" $"7D79 7673 6F6C 6966 6360 5D5A 4F41 3E3C" $"3A37 2F29 2826 2523 2221 201F 1C16 2A2F" $"3032 3335 4C9C D5FE F4F1 EEEB E9E7 E5E3" $"E1E0 DFDD DCDB DAD9 DBDA D2CD CCCC 80CB" $"80CA 02C9 CACA 80C9 80C8 09C7 C6C7 C6C4" $"C5BE C1BA 1180 0002 4D25 0880 0008 0109" $"2633 689A 9C9D 9E80 9F00 A080 9F4C 9E9C" $"9B9A 9896 9492 8F8D 8A87 8481 7E7B 7875" $"726F 6B68 6562 605D 5A57 4D3F 3C3A 3836" $"2E28 2625 2422 2120 1F1F 1C16 2A2E 3031" $"3334 4D9C D5FD F2EF ECEA E7E5 E3E2 E0DF" $"DEDC DBDB DAD9 DADA D1CC CC80 CB80 CA81" $"C980 C881 C708 C6C6 C5C4 C5BC C6BC 1280" $"000F 5F18 0F00 0001 0108 2532 6093 9596" $"9797 8298 4D97 9695 9493 918F 8D8B 8987" $"8482 7F7C 7976 7370 6E6B 6865 625F 5D5A" $"5855 4B3D 3A38 3634 2D26 2524 2322 2120" $"1F1E 1B16 2A2E 3031 3334 4D9C D5FC EFED" $"EAE8 E6E4 E2E1 DFDE DDDC DBDA D9D8 DAD9" $"D0CC CC80 CB81 CA80 C981 C880 C708 C6C5" $"C5C4 C5B8 C0BD 1380 000E 3918 2300 0001" $"0106 2431 588D 8E8F 9083 914B 9090 8F8E" $"8C8B 8987 8583 817F 7C7A 7774 726F 6C6A" $"6764 625F 5C5A 5856 5349 3B39 3735 332C" $"2524 2322 2120 1F1E 1E1B 162A 2E30 3132" $"344D 9CD5 FBED EBE9 E6E4 E3E1 E0DE DDDC" $"DBDA D9D9 D8DA D9CF 80CB 80CA 82C9 81C8" $"80C7 09C6 C5C5 C4C4 C5BA BEB9 1180 000F" $"401B 3400 0001 0105 2331 5186 8889 8A8A" $"828B 4B8A 8988 8786 8583 8280 7E7C 7A77" $"7572 706E 6B69 6664 615F 5C5A 5855 5351" $"4839 3735 3332 2A24 2322 2120 1F1E 1E1D" $"1B16 2A2E 2F31 3234 4E9C D5FA EBE9 E7E5" $"E3E1 E0DF DDDC DBDA D9D9 D8D7 D9D8 CE80" $"CB80 CA80 C982 C804 C7C7 C6C6 C580 C404" $"C3C5 BCBE 9D81 0002 4E1F 0E80 0009 0104" $"2130 4B80 8283 8384 8185 4F84 8483 8281" $"807F 7E7C 7A78 7775 7270 6E6C 6967 6563" $"605E 5C59 5755 5351 4F46 3735 3432 302A" $"2322 2120 1F1F 1E1D 1D1B 162A 2D2F 3132" $"344E 9DD5 F9E9 E7E5 E3E2 E0DF DDDC DBDA" $"DAD9 D8D7 D7D9 D7CE CBCA CA81 C981 C881" $"C702 C6C6 C580 C405 C3C3 C5BF BE9F 8100" $"0F4B 201E 0000 0101 031F 2F46 7A7C 7D7E" $"7E82 7F4B 7E7E 7D7C 7B7A 7877 7574 7270" $"6E6C 6A68 6664 615F 5D5B 5957 5553 514F" $"4D44 3634 3231 2F29 2221 201F 1F1E 1D1D" $"1C1A 1629 2D2F 3032 334F 9DD5 F8E7 E5E4" $"E2E0 DFDE DDDB DADA D9D8 D7D7 D6D8 D7CD" $"80CA 80C9 04C8 C9C8 C7C8 81C7 02C6 C5C5" $"80C4 05C3 C3C5 B7BD A281 000D 2B20 3100" $"0001 0103 1D2F 4274 7778 8079 017A 7A80" $"794C 7877 7776 7473 7271 6F6D 6C6A 6866" $"6462 605E 5C5A 5856 5452 514F 4D4C 4334" $"3231 302E 2821 201F 1F1E 1D1D 1C1C 1A16" $"292D 2F30 3234 4F9D D5F7 E6E4 E2E0 DFDE" $"DDDC DBDA D9D8 D7D7 D6D6 D8D6 CCCA CA81" $"C980 C809 C7C8 C7C6 C7C6 C5C4 C5C4 80C3" $"04C2 C5B7 BCA0 8100 0236 261E 8000 0701" $"021B 2E3F 6E72 7385 744C 7372 7271 706F" $"6D6C 6B69 6866 6462 615F 5D5B 5957 5654" $"5250 4F4D 4C4A 4233 3130 2E2D 2720 201F" $"1E1D 1D1C 1C1B 1A16 292D 2F30 3233 4F9D" $"D5F6 E4E2 E1DF DEDD DBDB DAD9 D8D7 D7D6" $"D6D5 D8D6 CCC9 C982 C881 C780 C600 C580" $"C480 C305 C2C2 C5B8 BC70 8100 0D41 2D19" $"0000 0101 0219 2D3C 686E 6E85 6F27 6E6E" $"6D6C 6B6A 6968 6765 6462 615F 5D5C 5A58" $"5755 5352 504E 4D4B 4A49 4132 302E 2D2C" $"261F 1F1E 1D1D 801C 1F1B 1916 292D 2E30" $"3133 509D D5F5 E2E1 DFDE DDDC DBDA D9D8" $"D7D7 D6D6 D5D5 D7D5 CB80 C980 C883 C780" $"C580 C480 C305 C2C2 C5BC BB73 8100 0E13" $"322D 0000 0101 0217 2D3A 6369 6A6A 846B" $"266A 6A69 6867 6665 6463 6260 5F5D 5C5A" $"5957 5654 5251 4F4E 4C4B 4A48 473F 312F" $"2D2C 2B25 1F1E 1D1D 801C 191B 1B19 1629" $"2D2E 3031 3350 9DD4 F3E1 DFDE DDDC DBDA" $"D9D8 D7D7 D680 D503 D4D7 D4CA 82C8 81C7" $"06C6 C6C5 C4C5 C4C4 82C3 05C2 C1C5 B5BA" $"7681 0002 163D 3D80 0008 0102 152C 385E" $"6566 6683 6780 6640 6564 6362 6160 5F5E" $"5D5C 5A59 5756 5553 5250 4F4D 4C4B 4948" $"4746 3E30 2D2C 2B2A 251E 1D1D 1C1C 1B1B" $"1A1A 1916 292C 2E2F 3133 519E D4F1 DFDE" $"DDDB DADA D9D8 D7D7 D680 D506 D4D4 D6D4" $"CAC8 C881 C780 C601 C5C5 81C4 80C3 80C2" $"05C1 C1C4 B4B8 7981 0002 1A49 1880 0007" $"0101 132B 3759 6262 8563 2662 6261 6160" $"5F5E 5D5C 5B5A 5857 5655 5352 514F 4E4D" $"4B4A 4948 4646 453D 2F2C 2B2B 2A24 1D1D" $"1C1C 801B 191A 1A19 1628 2C2E 2F31 3251" $"9ED4 EFDE DCDB DADA D9D8 D7D7 D6D5 D580" $"D405 D3D6 D3C9 C8C8 81C7 01C6 C680 C581" $"C480 C380 C205 C1C1 C3B6 B844 8100 0C13" $"4A27 0200 0001 0110 2A36 545E 805F 8160" $"805F 245E 5E5D 5C5C 5B5A 5958 5756 5553" $"5251 504F 4D4C 4B4A 4947 4645 4444 3C2E" $"2B2B 2A29 241D 1C1C 801B 191A 1A19 1915" $"282C 2E2F 3032 519E D2EE DCDB DAD9 D9D8" $"D7D6 D6D5 D580 D404 D3D3 D6D2 C880 C702" $"C6C7 C680 C580 C403 C3C4 C3C3 80C2 80C1" $"04C0 C1BC B747 8200 0242 3804 8000 0601" $"0E29 3550 5B5B 855C 235B 5B5A 5A59 5958" $"5756 5554 5352 5150 4F4E 4D4B 4A49 4847" $"4645 4443 423C 2D2B 2A29 2823 1C80 1B80" $"1A80 191E 1528 2C2D 2F30 3252 9ED1 EDDB" $"DAD9 D8D8 D7D6 D6D5 D5D4 D4D3 D3D2 D3D5" $"D2C8 C780 C601 C5C5 82C4 81C3 80C2 80C1" $"80C0 02B7 B54B 8200 0C52 2304 0000 0101" $"0D28 344C 5858 8559 2358 5857 5756 5655" $"5453 5252 5150 4F4E 4D4C 4B4A 4948 4646" $"4544 4342 413B 2C2A 2928 2822 1C80 1B81" $"1A14 1919 1528 2B2D 2E30 3252 9ED1 EADA" $"D9D8 D7D7 D6D5 D580 D480 D306 D2D2 D5D1" $"C7C6 C681 C580 C483 C380 C280 C105 C0C0" $"BEB6 B54E 8200 0B63 1812 0000 0101 0B27" $"3349 5586 5680 5521 5454 5352 5251 504F" $"4E4E 4D4C 4B4A 4948 4746 4544 4342 4241" $"413A 2B29 2828 2722 1B1B 821A 1619 1918" $"1527 2B2D 2E30 3253 9ECF E8D9 D8D7 D6D6" $"D5D5 D4D4 80D3 81D2 02D4 D0C7 80C5 01C4" $"C581 C480 C381 C280 C181 C003 BBBB B51A" $"8200 0236 1724 8000 0401 0926 3246 8853" $"8052 1E51 5050 4F4F 4E4D 4C4B 4B4A 4948" $"4746 4545 4443 4241 4140 4039 2B28 2827" $"2622 801A 8219 1318 1815 272B 2D2E 2F31" $"539F CEE5 D7D7 D6D5 D5D4 D480 D301 D2D2" $"81D1 02D4 D0C5 82C4 82C3 81C2 80C1 81C0" $"05BF BFB8 C2B6 1A82 000C 441B 3000 0001" $"0107 2532 4350 5084 5181 501F 4F4F 4E4E" $"4D4D 4C4B 4A4A 4948 4747 4645 4443 4342" $"4140 403F 3F39 2A28 2726 2621 801A 8219" $"1218 1815 272B 2C2E 2F31 539F CDE2 D7D6" $"D5D5 D4D4 80D3 80D2 81D1 02D3 CFC5 80C4" $"01C3 C481 C380 C201 C1C2 81C1 08C0 BFC0" $"BFBF B4BF B71C 8200 0A53 1E0E 0000 0101" $"0624 3141 814E 804F 824E 804D 1E4C 4C4B" $"4A4A 4949 4847 4746 4544 4443 4241 4140" $"3F3F 3E3E 382A 2726 2625 211A 8019 0018" $"8019 1018 1815 272A 2C2D 2F31 549E CCDF" $"D6D5 D4D4 80D3 01D2 D282 D103 D0D0 D3CE" $"81C4 80C3 02C2 C3C3 80C2 81C1 80C0 81BF" $"03B5 BAB8 1D82 000A 481E 2000 0001 0105" $"2230 3E82 4C01 4D4D 824C 804B 1D4A 4A49" $"4948 4847 4646 4544 4443 4242 4140 403F" $"3E3E 3D3D 3829 2626 2525 2081 1900 1880" $"1911 1818 1526 2A2C 2D2F 3154 9FCA DDD5" $"D4D4 D3D3 80D2 80D1 82D0 02D2 CDC4 83C3" $"80C2 01C1 C281 C180 C080 BF05 BEBF B7BA" $"A303 8200 022F 1F32 8000 0401 0421 303C" $"814A 804B 824A 8049 0148 4880 470E 4645" $"4544 4443 4242 4141 403F 3F3E 3E80 3D06" $"3729 2625 2524 2086 180E 1715 272A 2C2D" $"2E30 549F C9DB D4D3 D380 D280 D180 D080" $"CF02 D0D2 CC80 C383 C281 C181 C080 BF80" $"BE03 BFBB B9A3 8300 0C3B 2518 0000 0101" $"031F 2F3B 4848 8349 8248 8047 0146 4680" $"450D 4443 4342 4241 4140 403F 3F3E 3D3D" $"803C 0137 2880 2502 2420 1984 180E 1717" $"1626 2A2B 2D2E 3055 9FC8 D9D3 D380 D280" $"D181 D081 CF04 D2CB C3C2 C381 C282 C182" $"C080 BF80 BE03 BFB6 B9A6 8300 0244 2B1D" $"8000 0501 021D 2E39 4687 4781 4601 4545" $"8044 1843 4342 4241 4140 403F 3F3E 3E3D" $"3D3C 3C3B 3C37 2825 2524 2420 8118 0017" $"8018 0C17 1716 2629 2B2C 2E30 559F C7D7" $"80D2 80D1 80D0 84CF 02D1 CBC3 80C2 01C1" $"C281 C180 C003 BFC0 BFBF 80BE 80BD 03BF" $"B1B8 AA83 0002 182F 2F80 0004 0102 1B2D" $"3880 4581 4683 4580 4480 4380 4209 4141" $"4040 3F3F 3E3E 3D3D 803C 803B 0136 2880" $"2401 2320 8717 0A16 2629 2A2C 2E2F 569F" $"C6D5 80D1 80D0 82CF 82CE 02D0 CAC2 83C1" $"82C0 81BF 80BE 80BD 04BC BFB4 B77E 8300" $"021E 3938 8100 0402 182D 3743 8744 8243" $"8042 0141 4180 4001 3F3F 803E 033D 3D3C" $"3C80 3B03 3A3B 3628 8024 0623 1F18 1718" $"1817 8018 0D17 1716 2629 2B2C 2D2F 569F" $"C5D4 D181 D081 CF84 CE02 D0C9 C283 C180" $"C001 BFC0 80BF 81BE 80BD 04BC BFB8 B778" $"8300 0224 441B 8100 0402 162C 3641 8543" $"8342 8041 8040 803F 803E 013D 3D80 3C80" $"3B80 3A0B 3628 2424 2323 1F18 1718 1817" $"8018 0C17 1715 2529 2A2C 2D2F 569F C4D2" $"80D0 80CF 01CE CF81 CE80 CD02 CED0 C881" $"C183 C080 BF81 BE80 BD80 BC03 BFB4 B67B" $"8300 0214 432B 8100 0501 142B 3540 4182" $"4284 4181 4080 3F80 3E80 3D80 3C80 3B06" $"3A3A 3939 3A35 2780 2301 221F 8717 0A15" $"2528 2A2B 2D2F 579F C3D1 80CF 83CE 81CD" $"04CC CCCE CFC7 83C0 82BF 81BE 81BD 07BC" $"BCBB BBBE AEB5 7F84 0001 463E 8100 0401" $"122A 343F 8A40 823F 803E 803D 813C 803B" $"803A 8039 0135 2780 2306 2220 1716 1717" $"1680 170E 1617 1525 2829 2B2C 2E57 9FC3" $"D0CF CF81 CE83 CD80 CC02 CDCF C681 C001" $"BFC0 81BF 80BE 03BD BEBD BD80 BC80 BB03" $"BEB1 B457 8400 0256 1E03 8000 0401 1029" $"343D 8A3F 823E 813D 813C 803B 803A 8239" $"0135 2780 2306 221F 1716 1717 1680 170C" $"1617 1524 2829 2B2C 2E58 9FC2 CF80 CE83" $"CD83 CC05 CDCE C6C0 BFC0 81BF 83BE 81BD" $"80BC 80BB 03BD B6B3 4D84 0002 5F18 1380" $"0004 010E 2933 3C8B 3E82 3D81 3C80 3B81" $"3A80 3980 3802 3935 2781 2200 1F87 160A" $"1524 2729 2A2C 2E58 9FC1 CE82 CD83 CC81" $"CB02 CCCD C581 BF82 BE81 BD81 BC80 BB80" $"BA03 BBB4 B251 8400 023B 1A24 8000 0401" $"0C28 333B 843E 013D 3E84 3D81 3C82 3B81" $"3A80 3901 3839 8038 0B35 2722 2322 211F" $"1716 1717 1680 170B 1617 1524 2729 2A2C" $"2D58 9FC0 81CD 83CC 83CB 06CC CDC4 BFBE" $"BFBF 82BE 81BD 81BC 80BB 81BA 02AD B155" $"8400 0249 1D28 8000 0401 0A27 323A 873D" $"013C 3D84 3C81 3B80 3A01 393A 8139 8238" $"0135 2780 2206 211F 1616 1717 1680 170C" $"1617 1523 2728 2A2B 2D58 9FC0 CD83 CC83" $"CB80 CA03 CCCC C3BF 83BE 80BD 83BC 01BB" $"BB81 BA04 B9B7 B4B0 3084 0002 581D 1080" $"0004 0108 2531 3A8A 3C83 3B82 3A82 3981" $"3880 3703 3835 2722 8021 001F 8716 0A15" $"2326 2829 2B2D 599F BFCC 85CB 83CA 05C9" $"CBCC C2BE BE82 BD82 BC81 BB80 BA81 B903" $"B3BB B222 8400 0245 1C21 8000 0501 0724" $"3139 3B80 3C04 3B3C 3C3B 3C84 3B01 3A3B" $"823A 8039 0238 3939 8038 0137 3880 3708" $"3427 2122 2221 1F16 1580 1680 170B 1617" $"1523 2628 292B 2D59 9FBE 81CB 02CA CBCB" $"83CA 06C9 CAC9 CBCB C1BE 83BD 80BC 01BB" $"BC80 BB81 BA81 B903 AFC1 B224 8400 0234" $"1E33 8000 0401 0623 3038 873B 023A 3B3B" $"843A 8339 8338 8237 0834 2721 2222 211F" $"1615 8216 0D17 1617 1523 2627 292A 2C5A" $"9FBE CA80 CB83 CA01 C9CA 81C9 02CB CBC1" $"81BD 83BC 80BB 81BA 80B9 80B8 03AE B4B2" $"2784 0002 4223 1380 0005 0105 212F 373A" $"803B 043A 3B3B 3A3B 843A 0239 3A3A 8139" $"0138 3981 3801 3738 8337 0B34 2721 2222" $"211F 1615 1616 1581 160A 1715 2225 2729" $"2A2C 5A9F BE81 CA83 C980 C808 C7C6 C6C7" $"C6BE BDBC BD81 BC82 BB81 BA80 B907 B8B8" $"B7B8 B1B4 AD19 8400 0245 281E 8100 0303" $"202F 3787 3A86 3984 3883 3781 3602 3734" $"2881 2100 1F84 1580 1619 1522 2526 2829" $"2B5A 9EBB C7C7 C6C6 C5C4 C4C3 C2C1 C0BE" $"BDBC BBB9 80B8 04BA BBBB BCBC 81BB 81BA" $"81B9 80B8 05B7 B7B8 B4B5 A785 0002 1F2B" $"3080 0005 0103 1E2E 3639 803A 0539 3A3A" $"393A 3A83 3900 3880 3983 3801 3738 8137" $"0036 8137 0134 2880 2106 201F 1615 1616" $"1582 1612 1520 2224 2526 2755 95B0 BBBA" $"B9B7 B6B5 B4B4 B381 B283 B108 B2B4 B6B8" $"B9BA BBBA BB81 BA80 B980 B880 B703 B8B7" $"B4AA 8500 0227 3333 8000 0401 021C 2D36" $"8A39 0538 3939 3839 3981 3883 3780 3601" $"3535 8034 0831 2522 2121 2021 1A16 8015" $"8016 0C15 1614 191B 1C1D 1E1F 4B88 A3B0" $"86B1 05B0 B1B1 B0B1 B184 B003 B2B4 B6B8" $"82B9 81B8 80B7 05B6 B6B8 AAB3 AE85 0002" $"2E3D 1C81 0003 021A 2D35 8D38 8037 1536" $"3635 3534 3433 3231 312F 2F2D 2C2B 2928" $"2624 2122 2280 2102 201E 1984 150A 1417" $"191A 1C1D 1F4B 88A2 AF8D B086 AF04 B0B2" $"B4B6 B781 B801 B7B7 80B6 04B5 B8AD B19E" $"8500 0214 3B2C 8000 0601 0217 2C34 3838" $"8137 1836 3635 3534 3433 3231 3130 2E2D" $"2C2A 2928 2625 2322 2120 1F1E 821D 031C" $"1D1E 2082 2104 2020 1E19 1680 150B 1614" $"1719 1A1B 1D1E 4B87 A2AE 93AF 84AE 03B0" $"B2B4 B582 B605 B5B5 B8AF AE7A 8600 0249" $"2A0F 8000 1501 1327 2E32 3130 2F2E 2C2B" $"2A28 2725 2423 2220 1F1F 1E82 1D0B 1C1D" $"1D1C 1D1D 1C1D 1D1C 1D1D 821C 011D 1F82" $"211D 201F 1E1A 1615 1514 1618 191B 1C1E" $"4B87 A1AE AFAE AFAE AFAF AEAF AFAE AFAF" $"80AE 80AD 84AE 82AD 05AC ADAD AFB1 B380" $"B404 B3B6 AAAA 7E86 0002 621D 1E81 0006" $"0A19 1E20 1F1E 1E85 1D96 1C81 1B03 1C1D" $"1F20 8021 1320 201F 1F1A 1613 1117 191A" $"1C1D 4C87 A1AD AEAD AD80 AC80 AB01 AAAA" $"80A9 82A8 01AA AB81 AD80 AC0F ABA9 A7A4" $"A19D 9994 8F8A 837C 7F9D A583 8600 0333" $"2316 1180 0009 0614 191C 1C1D 1D1C 1D1D" $"931C 031B 1C1C 1B80 1C03 1B1C 1C1B 811C" $"021D 1F20 8021 0D20 201F 1F1B 1E0B 1118" $"1A1C 4A83 9C8C A880 A71A A6A4 A3A0 9E9B" $"9994 8E87 8077 6E64 5A4F 4951 5D4C 595D" $"6081 8897 5E86 000A 0940 1B22 0400 0005" $"1318 1B86 1C06 1B1C 1C1B 1C1C 1B80 1C0B" $"1B1C 1C1B 1C1C 1B1C 1C1B 1C1C 8D1B 101A" $"1A18 1716 1512 0105 0A09 0F18 4881 9AA6" $"82A7 26A6 A5A4 A2A0 9D99 9590 8A83 7C74" $"6B61 574D 4238 2E26 3060 484B 6158 7075" $"625B 5B58 5860 6276 8013 8700 082C 2F16" $"1C00 0004 1218 951B 081A 1A19 1918 1817" $"1616 8015 0214 1619 831A 0117 1583 1422" $"1512 0302 0205 090B 3577 919B 9894 8F89" $"837C 746B 6258 4F44 3A31 281F 1812 0C08" $"0503 0281 000F 0F2D 3E3F 3036 3F4E 5873" $"9844 4436 200B 8800 0926 4F26 270A 0003" $"1217 1A88 1B08 1A1A 1919 1818 1716 1682" $"1506 1415 1514 1515 1480 1509 1415 1516" $"1A1B 1A1B 1A15 8214 8013 000E 8003 2102" $"0306 1435 514F 453C 3229 211A 140E 0B08" $"0504 0303 0202 0303 0100 0101 0001 0100" $"0180 000B 0F26 352F 1E28 354A 6663 3D10" $"8800 1330 512C 2118 2400 0211 1619 1918" $"1817 1716 1615 1581 1402 1515 1480 150B" $"1415 1514 1515 1415 1514 1515 8414 0F13" $"1316 1817 1611 100F 0E0D 0B0A 0807 0584" $"0304 0709 0704 048A 0307 0203 0301 0001" $"0100 8701 0A0E 2936 2E1F 2734 4660 6033" $"8600 0B55 2C28 2917 2900 000B 1113 1487" $"138D 1480 1318 1212 1110 100F 0E0D 0B0A" $"0807 0A20 0504 0505 070A 0B0B 0805 0496" $"0303 0404 0201 8002 8003 8604 0903 0C2C" $"342F 222A 3348 5885 0003 5328 2A01 8002" $"0300 0B11 1380 1405 1314 1413 1414 8613" $"8012 0F11 1010 0F0E 0C0B 0A08 0705 0404" $"0303 0283 000D 2A08 0809 0A0B 0C0E 0F0F" $"0D09 0505 8D04 0905 0506 0707 0808 0A0A" $"068E 0580 0406 0D2F 3526 2B49 0C84 0003" $"512A 1F02 8003 0201 0910 8413 8012 0F11" $"1110 0F0F 0D0C 0B09 0807 0605 0403 0380" $"0281 0381 0400 0385 000C 0408 090A 0B0C" $"0D0F 1010 0E09 0682 0505 0606 0708 0809" $"810A 840B 090C 0B06 0506 0605 0606 0581" $"060F 0708 090A 0B0C 0D0E 0F10 100E 3729" $"5419 8400 034D 2321 0280 040F 0304 0C10" $"100F 0E0D 0C0B 0908 0705 0504 8403 8104" $"0805 0504 0505 0405 0504 8105 0104 0185" $"0007 0108 0A0B 0C0C 0D0E 8010 030F 0C0A" $"0A80 0B89 0C00 0B82 0C80 070A 0808 090B" $"0C0D 0E0F 1011 1181 1209 1313 1213 1312" $"1238 4F1A 8400 0354 1909 0182 0402 0304" $"0484 0381 0495 0513 0401 0003 080B 1920" $"2D41 4A63 5C1B 0B0C 0C0D 0E0F 8011 0210" $"0E0D 880C 800D 0B0E 0F10 1114 1410 1011" $"1112 1280 1382 1483 1382 1202 4249 1A84" $"0004 481B 1D00 0390 0502 0606 0580 0620" $"0506 0605 0606 0506 0605 070E 111B 2A31" $"4854 6377 8092 9AA3 ADAB AEAF B0B0 A757" $"0F80 0D02 0E0F 1080 1101 100E 800D 190E" $"0F10 1112 1315 1617 191A 1B1C 1D21 2119" $"1818 1717 1615 1514 1484 130A 1213 1312" $"1313 1217 204E 1B84 000A 351D 2E00 0205" $"0606 0506 058F 0613 0707 0B15 172B 3243" $"5A64 7E87 96A4 A9B3 B6B8 B8B5 80B4 80B5" $"1DB2 B3B5 B8BD C2C8 B13C 0D0C 0D0E 0E10" $"1112 1213 1618 191A 1C1D 2023 2629 2C80" $"2D07 2B29 2727 2318 1514 8413 0312 1313" $"1280 130A 1213 1312 1313 1224 214C 0E84" $"0005 4221 2100 0104 8A06 1507 090A 151A" $"2538 3F59 6379 8B94 A5AB B1B8 B8B9 B9BA" $"BA80 BB15 BCBC BDBE BCBE C3C8 CED4 DADA" $"DFE3 E6E8 E9EA EBE1 310C 800D 120E 0F10" $"121A 716C 4C4D 4C48 433C 352E 2824 211F" $"801E 0420 1E14 1313 9212 0233 244C 8500" $"0651 2619 0000 0306 8007 280A 0C12 1E22" $"3640 5167 7089 929F AAAF B5B7 B8B8 B9B9" $"BABA BBBB BCBC BEC0 C4C8 CED4 DAE1 E8EF" $"F3F0 EEF0 81F1 18E7 E5E4 E3E1 DFDD DAD8" $"630C 0D0E 0D0E 0F0F 111D 4E6B 3129 2421" $"811F 801E 001D 801E 0220 1D14 8013 0912" $"1313 1213 1312 1313 1280 1309 1213 1312" $"1313 123C 2457 8500 5D29 242A 0000 0107" $"2353 7082 9399 A7AD B1B6 B6B7 B7B8 B8B9" $"B9BA BABB BCBE C1C5 CAD0 D6DD E4EA F0F5" $"F9FC FDFE FEFF FFFE FEF4 ECEA E8E5 E3E0" $"D3CF CCC9 C7C5 C3C1 C05F 0C0D 0E0D 0E0F" $"0E11 1C21 211F 1F1E 1F1F 1E1F 1E1D 1E1E" $"1D1E 1E1D 201D 1480 1309 1213 1312 1313" $"1213 1312 8013 0912 1313 1213 1312 1A24" $"6385 0020 292B 3400 0001 1E64 93AF B6B6" $"B7B7 B8B9 B9BA BBBE C1C6 CBD1 D8DF E6EC" $"F2F6 FAFC FD86 FE10 FCFA F8F5 F2ED DDD3" $"D1CE CDCB CABF BEBE BD82 BE01 5F0C 800D" $"800E 0411 1C21 211F 841E 841D 0320 1C14" $"1393 1202 2825 5685 0017 3334 1700 0001" $"1455 82A6 BBC1 C6CC D2D9 E0E7 EDF2 F7FA" $"FCFD 80FE 80FF 12FE FFFF FEFB F9F6 F3EF" $"EBE7 E4E2 E0DE DDDD DBCE 82C8 00C9 81BD" $"82BE 015E 0C80 0D80 0E08 111C 2120 1F1F" $"1E1F 1F80 1E16 1D1E 1E1D 1E1D 1D20 1C13" $"1213 1312 1313 1213 1312 1313 1280 1309" $"1213 1312 1313 1236 263F 8500 021D 3928" $"8000 0A08 3573 BDED F6F9 FAFC FCFD 81FE" $"0FFF FFFE FEFC F9F6 F3EF EBE7 E3E0 DEDD" $"DC84 DB80 DC02 DACE C782 C885 BD02 BE5E" $"0C80 0D80 0E08 111C 2120 1F1F 1E1F 1F80" $"1E02 1D1E 1E81 1D0F 201C 1312 1313 1213" $"1312 1313 1213 1312 8013 0912 1313 1213" $"1312 3627 4985 0002 0243 3A80 0005 0318" $"7BD5 F5FD 80FE 0BFD FCF8 F6F1 EEEA E6E2" $"DEDC DB80 DA80 D988 DA80 DB01 DACE 83C7" $"00BD 84BC 03BD 5D0C 0C80 0D05 0E0E 111C" $"2120 831E 841D 041C 1D20 1C13 9412 021E" $"2855 8500 1203 531B 0100 0001 0B77 C1E2" $"ECE8 E4E0 DDDB DAD9 83D8 01D9 D884 D902" $"DADA D984 DA80 DB01 D9CE 83C7 00BD 85BC" $"015D 0C80 0D80 0E05 111C 2120 1F1F 801E" $"051D 1E1E 1D1E 1E81 1D0F 1F1B 1312 1313" $"1213 1312 1313 1213 1312 8013 0912 1313" $"1213 1211 2C29 3D85 000A 035B 1C0B 0000" $"0106 64AA CC82 D601 D7D6 80D7 02D8 D8D7" $"81D8 02D9 D9D8 84D9 01DA D984 DA0B D9CE" $"C6C7 C7C6 C7C7 BCBB BCBB 82BC 015D 0C80" $"0D80 0E05 111C 2020 1F1F 801E 041D 1E1E" $"1D1E 821D 0F1F 1B13 1213 1312 1313 1213" $"1312 1313 1280 1302 1213 1380 1203 113B" $"2A30 8600 093C 2415 0000 0104 5CA7 C981" $"D583 D684 D786 D886 D902 DAD9 CD83 C500" $"BC84 BB03 BC5C 0C0C 800D 050E 0E11 1C20" $"2081 1E84 1D80 1C03 1D1F 1A13 9212 0411" $"1032 2C39 8600 0A4B 2817 0000 0103 53A4" $"C7D4 80D5 83D6 02D7 D7D6 81D7 02D8 D8D7" $"83D8 02D9 D9D8 84D9 07D8 CDC4 C5C5 C4C5" $"C580 BB00 BA82 BB01 5C0C 800D 800E 0211" $"1C20 801F 801E 021D 1E1E 801D 001C 801D" $"0F1F 1A13 1213 1312 1313 1213 1312 1313" $"1280 1302 1213 1380 1203 1023 2F43 8600" $"0A5B 1A0F 0000 0102 4BA1 C5D4 83D5 02D6" $"D6D5 80D6 02D7 D7D6 82D7 04D8 D7D8 D8D7" $"83D8 81D9 01D8 CD83 C400 BB82 BA04 BBBA" $"BB5C 0C80 0D80 0E0B 111C 201F 1F1E 1D1E" $"1E1D 1E1E 801D 001C 801D 0F1F 1913 1213" $"1312 1313 1213 1312 1313 1280 1301 1213" $"8112 030F 3234 2186 000A 4619 1F00 0001" $"0242 9DC3 D380 D483 D583 D680 D700 D683" $"D702 D8D8 D784 D80B D7CD C3C4 C4C3 C4C4" $"BBBA BAB9 82BA 015C 0C80 0D80 0E0B 111C" $"201F 1E1E 1D1E 1E1D 1E1E 801D 001C 801D" $"0F1F 1913 1213 1312 1313 1213 1312 1313" $"1280 1309 1213 1211 1212 0E43 3B1A 8600" $"0238 1B32 8000 0501 3B99 C1D3 D384 D484" $"D586 D687 D702 D8D7 CD83 C300 BA85 B900" $"5B80 0C80 0D05 0E12 1C20 1F1E 841D 831C" $"021D 1F18 9012 8111 030F 3C41 2086 000A" $"461F 1000 0001 0133 96BF D280 D383 D484" $"D586 D605 D7D7 D6D7 D7D6 81D7 01D6 CC80" $"C306 C2C3 C3BA B9B9 B882 B901 5B0C 800D" $"800E 0812 1C20 1F1E 1E1D 1E1E 801D 031C" $"1D1D 1C80 1D0F 1F18 1312 1313 1213 1312" $"1313 1213 1312 8013 8012 0611 1212 1920" $"4925 8600 0A48 231D 0000 0101 2C92 BCD1" $"81D3 01D4 D383 D485 D501 D6D5 88D6 05D7" $"D7D6 CCC2 C381 C200 BA80 B880 B903 B8B9" $"5A0C 800D 800E 0812 1C20 1F1E 1E1D 1E1E" $"801D 161C 1D1D 1C1D 1C1D 1F18 1312 1313" $"1213 1312 1313 1213 1312 8013 8012 0611" $"1212 2522 470B 8600 0226 252F 8000 0401" $"248E BAD0 81D2 84D3 85D4 8AD5 80D6 01D5" $"CC80 C203 C1C2 C2B9 80B7 82B8 005A 800C" $"810D 0312 1C1F 1E84 1D84 1C02 1D1E 178E" $"1283 1102 3323 4D87 0002 302C 3080 0004" $"011E 89B7 CF81 D201 D3D2 83D3 02D4 D4D3" $"81D4 05D5 D5D4 D5D5 D486 D504 D6D5 CCC1" $"C281 C100 B981 B705 B8B8 B7B8 5A0C 810D" $"040E 0D11 1C1F 801E 011D 1E81 1D02 1C1D" $"1D80 1C1C 1D1E 1713 1213 1312 1313 1213" $"1312 1313 1213 1212 1112 1211 1212 2523" $"5887 0002 3A34 1B80 0007 0118 85B5 CED1" $"D2D1 83D2 83D3 80D4 00D3 84D4 04D5 D4D5" $"D5D4 81D5 01D4 CC83 C103 B9B7 B7B6 82B7" $"0A59 0C0D 0D0C 0D0E 0D11 1C1F 801E 801D" $"051C 1D1D 1C1D 1D80 1C0F 1D1E 1613 1213" $"1312 1313 1213 1312 1313 8112 0811 1212" $"1112 121C 2163 8700 021C 382A 8000 0401" $"137F B2CC 83D1 86D2 87D3 88D4 01CB C182" $"C000 B885 B600 5881 0C80 0D03 111C 1F1E" $"811D 851C 041B 1B1D 1E16 8C12 8511 0229" $"2340 8700 020A 433F 8100 060E 79AF CBD1" $"D1D0 81D1 01D2 D183 D288 D304 D4D3 D4D4" $"D381 D401 D3CB 83C0 00B8 85B6 0A58 0B0C" $"0D0C 0D0E 0D12 1C1F 801E 801D 021C 1D1D" $"801C 121B 1C1C 1D1E 1613 1213 1312 1313" $"1213 1312 1313 8112 0811 1212 1112 1138" $"2544 8700 030C 5318 0280 0003 0B73 ACCA" $"80D0 02D1 D1D0 83D1 85D2 04D3 D2D3 D3D2" $"88D3 00CB 80C0 03BF C0BF B780 B580 B615" $"B5B6 570B 0C0D 0C0D 0E0D 121C 1F1E 1E1D" $"1C1D 1D1C 1D1D 801C 111B 1C1C 1D1D 1513" $"1213 1312 1313 1213 1312 1382 1208 1112" $"1211 1211 2E26 4F87 0003 0A54 2109 8000" $"0308 6BA9 C880 CF84 D087 D18B D202 D3D2" $"CA83 BF02 B7B4 B483 B501 570B 800C 800D" $"0512 1C1F 1E1D 1D84 1C82 1B02 1D1D 158A" $"1287 1102 2127 5C88 0002 3E2C 1080 0003" $"0664 A6C6 80CF 02D0 D0CF 83D0 02D1 D1D0" $"84D1 05D2 D2D1 D2D2 D185 D200 CA80 BF03" $"BEBF BEB6 81B4 08B5 B5B4 B456 0B0C 0D0C" $"800D 0212 1C1F 801D 061C 1D1D 1C1D 1C1B" $"821C 0C1E 1D15 1312 1313 1213 1312 1313" $"8012 0011 8012 0811 1212 1112 112F 2839" $"8800 024D 220A 8000 0604 5CA3 C4CF CFCE" $"81CF 01D0 CF84 D002 D1D1 D089 D181 D201" $"D1CA 83BE 00B6 85B4 0156 0B80 0C80 0D02" $"121C 1F80 1D00 1C81 1D01 1C1C 811D 031C" $"1D1C 1581 1305 1213 1312 1313 8012 0011" $"8012 0811 1212 1112 103F 2A37 8800 025E" $"1910 8000 0303 54A0 C283 CE86 CF8A D002" $"D1D1 D082 D101 CABE 82BD 00B6 85B3 0255" $"0B0B 800C 040D 0D12 1C1E 811D 011E 1E80" $"1D05 1C1C 1B19 1716 8214 0013 8512 8811" $"0310 2A2B 4188 0002 3619 2480 0004 024C" $"9DC0 CD83 CE01 CFCE 84CF 02D0 D0CF 8ED0" $"00C9 83BD 00B5 85B3 0155 0B80 0C11 0D0D" $"0E13 1D20 1F1E 1E1D 1C1B 1A18 1614 1311" $"8010 100F 1011 1314 1413 1213 1312 1312" $"1112 1211 8012 0811 1212 1111 0F26 2D4B" $"8800 0240 1C34 8000 0302 449A BE80 CD02" $"CECE CD83 CE02 CFCF CE85 CF07 D0CF D0D0" $"CFD0 D0CF 82D0 00C9 80BD 03BC BDBC B580" $"B281 B304 B255 0B0C 0C80 0D0A 0E13 1C1D" $"1B19 1715 1312 1182 1003 0F10 100F 8010" $"0212 1414 8013 8012 0311 1212 1180 1208" $"1112 1211 110E 3433 1E88 0002 4E20 0E80" $"0006 013C 96BC CCCD CC81 CD01 CECD 85CE" $"04CF CECF CFCE 8BCF 00C9 83BC 03B5 B2B2" $"B182 B200 5580 0C06 0B0B 0A09 0C12 1380" $"1183 1006 0F10 100F 1010 0F81 1004 1113" $"1414 1380 1203 1112 1211 8012 0111 1280" $"1103 0D45 3723 8800 0248 2120 8000 0401" $"3592 BACB 83CC 86CD 8CCE 81CF 02D0 C9BC" $"82BB 00B4 85B1 0353 0706 0580 0403 0308" $"0F11 8210 8D0F 0510 1214 1413 1288 1105" $"1010 0F32 3D2A 8800 022B 2332 8000 0601" $"2E8F B8CA CCCB 83CC 87CD 02CE CECD 83CE" $"81CF 00D0 80CF 01C7 BD82 BB03 B6B1 B1B0" $"82B1 0450 0203 0302 8003 0208 0F11 8010" $"0D0F 1010 0F10 100F 1010 0F10 100F 1083" $"0F03 1113 1413 8112 0011 8012 8011 0510" $"1118 2244 3088 0002 3529 1D80 0004 0127" $"8BB5 C980 CB01 CCCB 84CC 01CD CC83 CD80" $"CE81 CF0B CECE CDCC CBC9 C7C5 C1BF BCBB" $"81BA 00B4 84B0 044F 0203 0302 8003 0208" $"0F11 8010 0B0F 1010 0F10 100F 1010 0F10" $"1081 0F06 0E0F 0F0E 0F10 1280 1302 1212" $"1180 1280 1105 1011 2326 4804 8800 0241" $"311E 8100 0520 86B3 C8CA CA86 CB80 CC80" $"CD82 CE12 CDCC CBCA C8C6 C4C1 C0BE BEBD" $"BEBF BFBE BBB9 BA80 B900 B383 AF00 4F82" $"0205 0303 080F 1010 8D0F 850E 010F 1180" $"1300 1282 1181 1002 2E2B 5289 0002 0E32" $"2F80 0004 011A 81B0 C780 CA01 CBCA 80CB" $"80CC 82CD 08CC CCCA C9C7 C5C3 C0BF 81BD" $"00BC 80BD 06BC BDBD BEBF BDBA 82B9 00B2" $"82AF 044F 0202 0302 8003 0108 0F81 1008" $"0F10 100F 1010 0F10 1080 0F00 0E80 0F17" $"0E0F 0F0E 0F0F 0E0F 1012 1313 1212 1111" $"1011 1110 111B 235D 8900 0211 3E30 8000" $"0401 157C ADC6 80CA 01CB CB82 CC08 CBCA" $"C9C8 C6C4 C2BF BE81 BC00 BB89 BC13 BDBE" $"BEBC B9B9 B8B9 B8B8 B1AF AFAE AE4E 0102" $"0302 8003 0108 0F81 1007 0F10 100F 1010" $"0F10 810F 000E 800F 0A0E 0F0F 0E0F 0F0E" $"0F0E 0E11 8013 0912 1110 1111 1011 1E20" $"6389 0003 154A 1702 8000 0311 78AC C680" $"CB0B CACA C9C8 C6C5 C3C0 BEBC BBBB 83BA" $"8DBB 03BC BEBD BB81 B802 B7B7 B080 AE01" $"4E01 8202 0403 080F 1010 880F 8D0E 080D" $"0E0F 1213 1212 1111 8010 022C 223E 8900" $"1208 3925 0600 0001 0D72 A8C3 C7C5 C3C1" $"BFBD BBBA 81B9 01BA B985 BA04 BBBA BBBB" $"BA88 BB04 BCBD BDBA B881 B708 B6AF ADAD" $"4E01 0203 0280 0301 080F 8110 040F 1010" $"0F10 810F 030E 0F0F 0E80 0F04 0E0F 0F0E" $"0F81 0E00 0D80 0E0A 1012 1312 1211 1010" $"3B23 488A 0002 4020 1080 0005 0966 9DB6" $"BAB9 83B8 02B9 B9B8 84B9 89BA 80BB 13BA" $"BBBB BABB BBBC BDBC B9B7 B7B6 B7B6 B5AE" $"AD4D 0180 0280 0301 080F 8110 020F 1010" $"800F 060E 0F0F 0E0F 0F0E 800F 020E 0F0F" $"800E 110D 0E0E 0D0E 0E0D 0E0F 1112 1312" $"1110 2525 558A 0002 541B 1E80 0003 055A" $"94B0 84B7 86B8 8BB9 87BA 03BB BCBB B882" $"B604 B4AD 4D01 0182 0202 080F 1084 0F8E" $"0E87 0D01 0E10 8012 0311 242A 618A 0002" $"3324 1A80 0005 0453 91AF B7B6 83B7 02B8" $"B8B7 84B8 02B9 B9B8 8DB9 07BA B9B9 BABB" $"BBBA B682 B502 B24D 0180 0204 0303 0208" $"0F81 1080 0F09 0E0F 0F0E 0F0F 0E0F 0F0E" $"800F 800E 090D 0E0E 0D0E 0E0D 0E0E 0D81" $"0E06 0F11 1212 3F31 2E8A 0009 2A35 2803" $"0000 024B 8EAD 82B6 86B7 88B8 04B9 B8B9" $"B9B8 80B9 00B8 85B9 02BB BBB9 81B5 0DB4" $"B382 0E01 0202 0303 0208 0F10 1082 0F09" $"0E0F 0F0E 0F0F 0E0F 0F0E 800F 800E 140D" $"0E0E 0D0E 0E0D 0E0E 0D0E 0E0D 0D0C 0B0F" $"333E 3F40 8A00 0908 4B19 1A00 0002 448B" $"AB80 B585 B68A B790 B803 BABA B8B5 80B4" $"03B2 915D 0A82 0204 080F 100F 0F8F 0E89" $"0D0A 0B0A 1821 2C36 3635 3758 4A8B 0008" $"5023 2800 0001 3D89 A982 B586 B680 B700" $"B687 B701 B8B7 80B8 06B7 B8B8 B7B8 B8B7" $"81B8 0FBA B9B7 B4B3 B3B2 9A6C 3206 0203" $"0302 0882 0F27 0E0F 0F0E 0F0F 0E0F 0F0E" $"0F0F 0E0F 0E0E 0D0E 0E0D 0E0E 0D0D 0C0A" $"0F25 2934 372F 252A 3342 555F 6206 8B00" $"023A 3029 8000 0436 85A8 B4B4 83B5 02B6" $"B6B5 85B6 04B7 B6B7 B7B6 91B7 0AB8 B9B8" $"B5B3 B3B1 A188 2F15 8003 0102 0882 0F0B" $"0E0F 0F0E 0F0F 0E0F 0F0E 0F0F 810E 150D" $"0E0D 0D0B 091F 2A32 3238 2928 313C 506F" $"5E4A 381D 048D 0009 1743 1914 0000 3082" $"A5B3 81B4 02B5 B5B4 83B5 80B6 00B5 8AB6" $"07B7 B7B6 B7B7 B6B7 B783 B60E B7B8 B7B4" $"B2B1 A39E 4517 3203 0202 0882 0F20 0E0F" $"0F0E 0F0F 0E0F 0F0E 0F0E 0E0D 0D0C 0B11" $"2832 363D 2527 2E39 4A5F 685B 3E2B 0293" $"0007 571C 1900 002A 7FA3 81B3 87B4 8FB5" $"82B6 85B5 0EB6 B7B8 B6B3 B0A2 A574 301F" $"2D03 0208 800F 890E 110D 0B11 2331 2F3A" $"3A26 2C36 455C 6A5A 4835 0E98 0008 3C25" $"2600 0023 7BA1 B281 B302 B4B4 B383 B480" $"B500 B49A B50C B7B7 B5B1 A3A7 7265 2E1A" $"1C03 0882 0F16 0E0F 0F0E 0E0D 0C0D 1A2F" $"3739 312B 2B33 4054 6668 4E3E 219D 0009" $"2636 1D0D 001D 779F B1B2 84B3 04B4 B3B4" $"B4B3 87B4 05B5 B5B4 B5B5 B480 B507 B4B5" $"B5B4 B5B5 B4B5 83B4 00B5 80B6 08A4 A759" $"1443 1B17 1608 800F 800E 110C 0A1A 202C" $"362F 2E27 303C 4D65 6857 4621 0CA1 0008" $"034A 1A17 0018 739D B085 B289 B392 B483" $"B31E B4B5 BAA8 A85A 000C 1F21 292C 0B0E" $"0B0E 2828 3435 2E25 2A33 4156 5C5B 4F3A" $"0EA7 0008 4A24 2300 136E 9AAF B186 B202" $"B3B3 B288 B304 B4B3 B4B4 B380 B402 B3B4" $"B486 B31D B2AE A699 8793 A9A9 6000 000E" $"642E 232C 212D 3626 2731 3C50 6F5A 4536" $"1B02 AB00 0733 3326 030F 6A98 AE81 B102" $"B2B2 B187 B208 B3B3 B2B3 B3B2 B3B3 B286" $"B311 B2B3 B3B2 B2AF A89C 8977 7677 7A8C" $"9899 A342 8000 0B2F 4630 2D30 3446 5B63" $"5839 28B1 0007 1A4D 221B 0B64 95AD 80B0" $"89B1 91B2 11AF A99E 8C7C 7574 7A86 8E81" $"7B78 7C85 8A64 0281 0006 1014 1415 141B" $"0BB5 0007 0157 1F1D 085F 93AC 81B0 02B1" $"B1B0 88B1 20B2 B1B2 B2B1 B2B2 B1B2 B2B1" $"B1AF AAA0 917E 7676 7B81 8887 7D78 787E" $"8278 5341 1C05 C300 0A3F 2829 0758 90AA" $"AFB0 B0AF 83B0 02B1 B1B0 80B1 00B0 85B1" $"14AF ABA3 957F 7876 767E 8A88 7E7A 777C" $"8A77 613F 260D C800 0619 3B2A 1051 8DA9" $"87AF 87B0 14AF ACA4 9885 7378 767D 8986" $"817A 7779 8382 6E49 320C CD00 0A07 502A" $"2D48 8AA7 AEAF AFAE 86AF 17B0 AFAF ACA5" $"9A89 7474 7376 838D 817B 7878 808F 7057" $"3214 02D2 0005 4935 3F41 87A6 84AE 17AF" $"AFAE AEAB A69C 8C7A 7171 7681 8D7F 7976" $"777F 8379 623D 23D8 0005 3543 593D 83A4" $"83AD 14AB A79E 8F7C 7373 767B 8686 7A76" $"767A 827D 5845 2009 DC00 1B12 5B55 4D7F" $"A2AC ABA7 9F92 7E74 7273 7A85 867C 7775" $"7985 7A66 442D 13E2 0016 5159 6A63 8382" $"706F 7379 8284 7F78 7577 7F83 734E 3910" $"02E6 0011 4164 6B72 737B 877D 7674 757D" $"9173 5C38 1C05 DD00 8200 5B0E 4A53 3126" $"2C2C 262D 373F 4A4C 321A 171B 2025 2A2E" $"2B20 1814 191D 2227 2A25 1E18 151B 2128" $"2E30 2A22 1918 212A 333C 4039 3026 2332" $"404E 5C64 615C 4C20 2F3A 4458 3D05 0000" $"081C 3125 211E 1E23 2930 3437 3930 0304" $"0506 0708 0909 069F 0008 063D 6036 2520" $"2E1E 0982 0A6B 0909 0D13 181D 2328 2F32" $"1A14 1A21 272E 343C 401B 181D 252C 343B" $"4343 1719 1F27 2F39 424B 4C1E 1819 1F25" $"2B31 3430 1C16 171D 242C 3651 6A64 5B71" $"584C 423B 3A3B 4148 5051 4B42 393A 4651" $"5D68 6C69 624B 323E 4955 6065 6460 4E26" $"3039 434C 5051 4F35 181F 262E 3539 3D3F" $"2E09 8200 2616 673F 2A1F 2826 0307 2075" $"7572 6A63 5B54 4E48 4440 3C39 352F 2A24" $"201D 1917 1513 1110 0F0E 0E0D 820C 860B" $"5B0E 1317 1B20 2428 290E 131C 232E 3334" $"2C31 2E29 282F 3447 3D3B 4148 4E56 5D59" $"3130 3339 3F45 4C4F 4731 2C2D 3236 3A3E" $"3E39 342E 2F34 393E 4442 3D35 2E31 383F" $"474E 4F4E 4C43 4E32 0100 000C 622E 1F2B" $"2907 0002 0735 EDF5 F6F8 F9FB FC83 FE37" $"FDFA F7F4 F1EF EDEB E9E4 DCD3 CEC7 C2BD" $"B5AB A29A 938A 7F74 695D 534A 4139 332D" $"2723 201D 1B1A 1817 1615 1513 2E33 3539" $"2B39 251F 1923 2727 8126 3025 2628 2B2D" $"3032 3538 3426 2A32 373F 434A 504C 282D" $"3339 4146 4F55 482B 2D35 3C46 4D57 5C56" $"3D35 3843 2000 000B 451F 310E 8000 3F0A" $"1325 ACC1 C4C6 C8CA CCCD CDCC CCCB CAC9" $"C8C6 C4C3 C1BE BCBA B7B5 B2AF ACA9 A7A4" $"A09D 9995 928D 8A84 7E78 726D 6863 5E59" $"544F 4A45 403B 3630 2B27 1908 100F 0F80" $"0E16 0F1A 52B2 534D 4843 3F3B 3835 3331" $"2F2D 2C2B 2A29 2928 2883 2783 2681 2781" $"2880 2918 2C39 393F 2400 000A 3A3A 0400" $"0001 0110 1E2F A8C2 C4C6 C8CA CA80 CB32" $"CAC9 C7C5 C2C0 BDBA B6B2 AEA9 A5A0 9B96" $"918C 8681 7C76 716C 6762 5D58 544D 423E" $"3B38 3532 2F29 231F 1C19 1816 1413 0E05" $"0B0C 0B80 0A16 0D1C 48CF 4F4B 4743 403D" $"3A38 3634 3230 2F2D 2C2B 2A29 2981 2801" $"2929 802A 012B 2B81 2C80 2D83 2E08 2D42" $"4126 0000 0B3E 1F80 000B 0101 1021 309E" $"BBBE BFC1 C2C3 80C4 31C3 C2C1 BFBD BBB8" $"B5B2 AEAB A7A3 9E9A 9590 8C87 827D 7974" $"6F6B 6662 5E5A 5648 3D3A 3734 312A 211E" $"1C1A 1816 1513 120E 0610 1181 1216 172C" $"57D0 5A56 534F 4C49 4744 4240 3E3C 3A39" $"3836 3534 2E81 2D8C 2E81 2D09 2E2C 4245" $"2B00 000C 3C2D 8000 0A01 010F 212D 91B3" $"B5B6 B8B9 82BA 2FB9 B8B6 B4B2 B0AD AAA7" $"A3A0 9C98 9490 8B87 827E 7A75 716D 6965" $"605D 5955 493B 3835 322F 261F 1D1B 1917" $"1514 1312 0E06 1181 1318 141A 305C CB5C" $"5956 5250 4D4B 4946 4543 4240 3F3E 3D3E" $"3F37 3281 3181 3084 2F80 2E0D 2D2E 2E2D" $"2E2B 4F47 2F00 000E 423E 8000 0B01 010E" $"212B 84AA ACAD AFB0 B080 B130 B0AF AEAD" $"ABA9 A7A4 A29F 9B98 9491 8D89 8581 7D79" $"7470 6C69 6560 5D59 5652 4638 3532 302D" $"241D 1B1A 1816 1513 1312 0D06 1180 131B" $"1414 1A31 5CC5 5B58 5552 4F4D 4B49 4745" $"4442 4140 3F3E 3F40 3732 3131 8030 012F" $"3081 2F02 2E2F 2F81 2E0E 2D2E 2E2D 2D2A" $"5A47 3500 0011 4E1B 0180 0009 010C 202A" $"78A1 A3A5 A6A7 81A8 4EA7 A7A6 A4A3 A19F" $"9C9A 9794 918D 8A86 837F 7B77 7370 6C68" $"6461 5D5A 5653 4F44 3633 302E 2B23 1C1A" $"1817 1514 1312 110D 0611 1212 1313 141A" $"315C C059 5653 504E 4C4A 4846 4443 4241" $"403F 3E3F 3F37 3131 8030 812F 842E 852D" $"172B 3A4A 3C00 000F 5323 0600 0001 010A" $"1F29 6D99 9B9C 9E9F 9F80 A030 9F9E 9D9C" $"9B99 9795 9290 8D8A 8783 807D 7976 726E" $"6B67 6460 5D5A 5653 514D 4234 312E 2C2A" $"211B 1917 1614 1312 1211 0C06 1180 1318" $"1414 1A31 5CBB 5754 524F 4D4B 4947 4544" $"4341 403F 3F3E 3F3F 3680 3180 3015 2F30" $"2F2E 2F2F 2E2F 2F2E 2D2E 2E2D 2E2E 2D2D" $"2E40 4D35 8000 0F3F 2F0C 0000 0101 091E" $"2863 9293 9596 9682 972F 9695 9493 918F" $"8D8B 8986 8380 7D7A 7774 716D 6A66 6360" $"5D59 5653 504E 4B40 322F 2D2A 2820 1918" $"1615 1313 1211 100C 0611 8013 1814 141A" $"315B B555 5350 4E4B 4948 4645 4342 4140" $"3F3E 3D3F 3F36 8031 8030 802F 122E 2F2F" $"2E2F 2E2E 2D2E 2E2D 2E2E 2D2D 314B 570D" $"8000 024D 2508 8000 0A01 081E 275A 8B8C" $"8D8E 8F8F 8090 4D8F 8F8E 8D8B 8A88 8684" $"8280 7D7A 7875 726F 6C68 6562 5F5C 5956" $"5350 4D4B 483E 302D 2B29 271F 1816 1514" $"1312 1110 0F0C 0611 1212 1313 141A 315B" $"AB54 514F 4C4A 4847 4544 4241 403F 3F3E" $"3D3F 3E35 3180 3081 2F84 2E86 2D03 3354" $"5D0F 8000 105F 180F 0000 0101 061D 2751" $"8485 8687 8888 8089 3088 8887 8685 8382" $"807E 7C7A 7775 726F 6D6A 6764 615E 5B58" $"5653 504D 4B49 463C 2E2B 2927 251E 1715" $"1413 1212 1110 0F0C 0611 8013 1E14 141B" $"315A A152 4F4D 4B49 4746 4443 4241 403F" $"3E3E 3D3F 3E35 3031 302F 3030 802F 022E" $"2F2F 812E 042D 2E2E 2D2E 802D 032E 3E64" $"1280 000F 3918 2300 0001 0105 1C26 4A7D" $"7F80 8181 8182 3081 8180 7F7E 7D7B 7A78" $"7674 726F 6D6A 6865 6260 5D5A 5855 5250" $"4D4B 4947 443A 2C2A 2826 241C 1614 1312" $"1211 100F 0E0B 0611 8113 1714 1B31 5998" $"504E 4C4A 4847 4544 4341 403F 3F3E 3D3C" $"3E3E 3480 3002 2F30 3080 2F02 2E2F 2F81" $"2E04 2D2E 2E2D 2E80 2D03 3839 6610 8000" $"1240 1B34 0000 0101 041B 2543 7779 7A7A" $"7B7B 7C7C 807B 2E7A 7978 7775 7472 706E" $"6C6A 6866 6361 5E5C 5957 5452 4F4D 4B48" $"4644 4238 2A28 2624 231B 1513 1312 1110" $"0F0F 0E0B 0611 8013 1814 141B 3158 904F" $"4C4B 4947 4644 4342 4140 3F3E 3E3D 3C3E" $"3D34 8030 012F 3081 2F02 2E2F 2F81 2E02" $"2D2E 2E80 2D04 2C2D 433B 5381 0002 4E1F" $"0E80 000C 0104 1A25 3E71 7374 7475 7576" $"7680 754C 7473 7271 706E 6D6B 6967 6563" $"615F 5D5A 5856 5351 4F4C 4A48 4644 4240" $"3728 2625 2322 1A14 1312 1110 100F 0E0D" $"0B05 1112 1213 1314 1B31 5788 4D4B 4948" $"4645 4342 4140 3F3F 3E3D 3D3C 3E3D 3330" $"3081 2F84 2E86 2D04 2C2D 4F3B 5C81 000F" $"4B20 1E00 0001 0103 1924 396B 6D6E 6F6F" $"8170 306F 6F6E 6E6D 6C6A 6968 6664 6361" $"5F5D 5B59 5754 5250 4E4C 4A48 4644 4240" $"3E35 2725 2322 2019 1312 1211 100F 0E0E" $"0D0A 0511 8113 1714 1B31 5681 4C4A 4847" $"4544 4342 4140 3F3E 3D3D 3C3C 3E3D 3380" $"3080 2F04 2E2F 2F2E 2F82 2E02 2D2E 2E80" $"2D04 2C2D 373B 6581 000D 2B20 3100 0001" $"0102 1724 3565 6869 806A 016B 6B80 6A2E" $"6968 6867 6564 6361 605E 5D5B 5957 5553" $"514F 4D4B 4947 4543 4240 3E3D 3426 2322" $"211F 1912 1211 100F 0E0E 0D0D 0A05 1181" $"1317 141B 3154 7A4A 4947 4644 4342 4140" $"3F3E 3E3D 3D3C 3C3E 3C32 8030 802F 062E" $"2F2F 2E2F 2E2D 802E 022D 2E2E 802D 042C" $"2D39 3B6A 8100 0236 261E 8000 0701 0216" $"2432 5F63 6485 6544 6463 6362 6160 5E5D" $"5C5A 5957 5553 5250 4E4C 4A48 4745 4341" $"403E 3D3B 3324 2221 201E 1812 1110 0F0F" $"0E0D 0D0C 0A05 1112 1213 1314 1B31 5374" $"4947 4645 4342 4140 403F 3E3D 3D80 3C02" $"3E3C 3282 2F84 2E85 2D80 2C03 2D44 3D42" $"8100 0F41 2D19 0000 0101 0214 232F 5A5F" $"5F60 6080 6181 6026 5F5E 5D5C 5B5A 5958" $"5655 5352 504E 4D4B 4948 4644 4341 3F3E" $"3C3B 3A32 2321 201E 1D17 1110 0F0F 0E80" $"0D03 0C0A 0511 8113 1014 1C31 526E 4846" $"4544 4342 4140 3F3E 3E3D 813C 053E 3C31" $"2F30 3080 2F02 2E2F 2F80 2E00 2D80 2E01" $"2D2E 812D 042C 2D51 3D4A 8100 0D13 322D" $"0000 0101 0212 232D 545B 5B85 5C2E 5B5B" $"5A59 5857 5655 5453 5150 4E4D 4B4A 4847" $"4544 4241 3F3E 3C3B 3A38 3122 201F 1E1D" $"1710 0F0F 0E0E 0D0D 0C0C 0A06 1181 1310" $"141C 3251 6847 4544 4342 4140 3F3F 3E3D" $"3D80 3C05 3B3E 3B31 2F30 812F 022E 2F2F" $"802E 002D 802E 0A2D 2E2D 2C2D 2D2C 2C3C" $"3E53 8100 0216 3D3D 8000 0701 0110 222C" $"4F57 5785 582E 5757 5655 5554 5352 504F" $"4E4D 4B4A 4947 4644 4341 403F 3D3C 3A39" $"3837 3021 1F1E 1D1C 160F 0F0E 0E0D 0D0C" $"0C0B 0905 1180 1212 1314 1C32 4F63 4544" $"4342 4140 403F 3E3D 3D3C 3C80 3B02 3D3B" $"3180 2F83 2E86 2D83 2C02 3A3E 5B81 0002" $"1A49 1880 0006 0101 0F21 2A4B 5380 5481" $"5580 542D 5352 5251 504F 4E4D 4C4B 4A49" $"4746 4543 4241 3F3E 3D3B 3A39 3837 362F" $"201E 1D1C 1B16 0F0E 0E0D 0D0C 0C0B 0B09" $"0511 8113 1114 1C32 4E5F 4443 4241 4140" $"3F3E 3E3D 3D3C 3C80 3B02 3D3B 3180 2F02" $"2E2F 2F80 2E03 2D2E 2E2D 802E 802D 072C" $"2D2D 2C2B 4641 2D81 000D 134A 2702 0000" $"0101 0D20 2946 5050 8451 8050 414F 4E4E" $"4D4C 4B4A 4948 4746 4544 4241 403F 3D3C" $"3B3A 3938 3636 352E 1F1D 1C1B 1A15 0E0E" $"0D0D 0C0C 0B0B 0A08 0511 1313 1213 141C" $"324D 5B44 4342 4140 3F3F 3E3D 3D3C 3C81" $"3B02 3D3A 3080 2F02 2E2F 2F80 2E03 2D2E" $"2E2D 802E 802D 072C 2D2D 2C2B 5443 3482" $"0002 4238 0480 0004 010C 2029 4280 4D82" $"4E80 4D21 4C4C 4B4B 4A49 4847 4645 4443" $"4241 403F 3E3D 3C3B 3938 3736 3534 342D" $"1E1C 1B1A 1A14 800D 080C 0C0B 0B0A 0A08" $"0511 8012 1013 131C 324C 5743 4241 403F" $"3F3E 3D3D 3C3C 803B 053A 3B3D 3A30 2F84" $"2E86 2D83 2C03 2A42 443C 8200 0A52 2304" $"0000 0101 0A1F 283F 804A 824B 804A 3F49" $"4948 4847 4646 4544 4342 4140 3F3E 3D3C" $"3B3A 3938 3736 3534 3333 2C1D 1B1A 1A19" $"140D 0D0C 0C0B 0B0A 0A09 0805 1113 1312" $"1314 1C32 4A54 4241 403F 3F3E 3E3D 3D80" $"3C80 3B08 3A3D 392F 2E2F 2F2E 2F81 2E11" $"2D2E 2E2D 2E2D 2D2C 2D2D 2C2D 2D2C 2B3C" $"4743 8200 0C63 1812 0000 0101 091E 273B" $"4747 8448 8047 2546 4645 4544 4342 4241" $"403F 3E3D 3C3B 3A39 3837 3736 3534 3332" $"322C 1D1A 1A19 1813 0D0C 0C0B 0B80 0A14" $"0908 0511 1213 1213 131D 3249 5141 4040" $"3F3E 3E3D 3D80 3C80 3B1F 3A3A 3D39 2F2E" $"2F2F 2E2F 2E2D 2E2E 2D2E 2E2D 2E2D 2D2C" $"2D2D 2C2D 2D2C 2B48 4D13 8200 0236 1724" $"8000 0501 071E 2738 4486 4580 442B 4343" $"4241 4140 3F3F 3E3D 3C3B 3B3A 3938 3736" $"3534 3433 3231 312B 1C1A 1918 1813 0C0C" $"0B0B 0A0A 0909 0808 0510 8012 0E13 131D" $"3248 4E40 403F 3E3E 3D3D 3C3C 803B 813A" $"023D 382F 822E 862D 862C 032B 5653 1582" $"000A 441B 3000 0001 0106 1D26 3680 4282" $"4381 4225 4141 4040 3F3F 3E3D 3D3C 3B3B" $"3A39 3837 3636 3534 3333 3231 3130 2A1C" $"1918 1817 130C 0B0B 0A0A 8009 1208 0805" $"1012 1312 1313 1D32 474C 403F 3F3E 3D3D" $"803C 803B 813A 053C 382F 2E2F 2F80 2E05" $"2D2E 2E2D 2E2E 812D 0A2C 2D2D 2C2D 2C2C" $"2B47 5919 8200 0A53 1E0E 0000 0101 051C" $"2633 8840 803F 143E 3E3D 3D3C 3C3B 3A3A" $"3938 3737 3635 3434 3332 3231 8030 0A2A" $"1B18 1817 1713 0B0B 0A0A 8109 0F08 0705" $"1012 1312 1313 1D32 464A 3F3F 3E80 3D80" $"3C80 3B81 3A04 3C38 2F2E 2F81 2E05 2D2E" $"2E2D 2E2E 812D 0A2C 2D2D 2C2D 2C2C 3237" $"5F1C 8200 0A48 1E20 0000 0101 041B 2531" $"883E 803D 213C 3C3B 3B3A 3A39 3938 3737" $"3635 3534 3333 3231 3130 302F 2F29 1B18" $"1717 1612 0B0A 0A81 0912 0808 0705 1012" $"1312 1313 1D32 4548 3F3E 3E3D 3D80 3C81" $"3B81 3A0F 3C37 2F2E 2F2E 2D2E 2E2D 2E2E" $"2D2E 2D2C 802D 022C 2D2D 812C 033E 3852" $"0282 0002 2F1F 3280 0004 0103 1A25 2F81" $"3C01 3D3D 833C 803B 213A 3A39 3938 3837" $"3736 3535 3434 3332 3231 3030 2F2F 2E2E" $"291A 1717 1616 120A 0A09 0981 0803 0707" $"0510 8012 0B13 131D 3244 463E 3E3D 3D3C" $"3C80 3B80 3A80 3903 3A3C 372F 802E 862D" $"862C 042B 2C4B 3959 8300 0C3B 2518 0000" $"0101 0218 242E 3A3A 833B 823A 8039 1238" $"3837 3736 3635 3534 3433 3232 3131 3030" $"2F2F 802E 0729 1A17 1716 1612 0A80 0981" $"080F 0707 0510 1213 1213 131D 3243 443E" $"3D3D 803C 803B 803A 0039 803A 023C 362F" $"802E 052D 2E2E 2D2E 2E80 2D00 2C80 2D01" $"2C2D 822C 023F 3963 8300 0244 2B1D 8000" $"0501 0217 242D 3886 3981 3880 3701 3636" $"8035 0C34 3433 3332 3131 3030 2F2F 2E2E" $"802D 0128 1A80 1601 1512 8009 8208 0E07" $"0705 1012 1312 1313 1D32 4243 3D3D 813C" $"803B 803A 0539 3A39 3A3C 3681 2E04 2D2E" $"2E2D 2E81 2D00 2C80 2D03 2C2D 2C2B 802C" $"0232 386C 8300 0218 2F2F 8000 0501 0215" $"232B 3784 3882 3780 3680 3503 3434 3333" $"8032 1231 3130 302F 2F2E 2E2D 2D2C 2D28" $"1A16 1615 1511 8108 8207 0206 0510 8112" $"0713 1E32 4142 3D3C 3C80 3B81 3A82 3903" $"3A3C 352E 862D 862C 812B 032C 3E3A 4883" $"0002 1E39 3881 0004 0213 232A 3587 3681" $"3580 3480 3301 3232 8031 0330 302F 2F80" $"2E01 2D2D 802C 0628 1916 1615 1511 8108" $"1007 0807 0706 0605 1012 1312 1313 1E32" $"4041 803C 803B 053A 3B3A 393A 3A80 3909" $"3A3B 352E 2D2E 2E2D 2E2E 802D 032C 2D2D" $"2C80 2D80 2C00 2B80 2C02 4C3B 4983 0002" $"2444 1B81 0004 0112 222A 3486 3582 3480" $"3380 3280 3101 3030 802F 012E 2E80 2D81" $"2C01 2719 8015 0514 1108 0708 0881 0703" $"0606 0510 8012 0513 131E 3240 4080 3C80" $"3B80 3A02 393A 3A80 3909 3A3B 342E 2D2E" $"2E2D 2E2E 802D 032C 2D2D 2C80 2D80 2C00" $"2B80 2C02 433C 5283 0002 1443 2B81 0004" $"0110 2129 3285 3483 3380 3280 3180 3080" $"2F80 2E01 2D2D 802C 802B 0627 1915 1514" $"1411 8207 8206 0105 1081 1204 131E 323F" $"3F80 3B82 3A81 3980 3802 3A3B 3485 2D86" $"2C84 2B02 333C 5B84 0001 463E 8100 0401" $"0E21 2831 8333 8432 8231 8030 802F 802E" $"802D 012C 2C82 2B01 2719 8015 0114 1181" $"0700 0680 0703 0606 0510 8012 0A13 131E" $"323E 3E3C 3B3B 3A3B 813A 8039 0938 3939" $"3A3B 332E 2D2E 2E80 2D13 2C2D 2D2C 2D2D" $"2C2D 2C2C 2B2C 2C2B 2C2C 2B41 3E3A 8400" $"0256 1E03 8000 0401 0D20 2830 8432 8431" $"8130 812F 802E 812D 802C 822B 0627 1914" $"1514 1411 8107 0006 8007 0306 0605 1080" $"1205 1313 1E32 3E3E 803B 803A 0239 3A3A" $"8039 0938 3939 3A3B 332E 2D2E 2E80 2D05" $"2C2D 2D2C 2D2D 812C 092B 2C2C 2B2C 2C2A" $"4E40 3684 0002 5F18 1380 0004 010B 1F27" $"2F85 3184 3081 2F81 2E80 2D80 2C81 2B81" $"2A01 2719 8014 0113 1187 0602 0510 1180" $"1205 131F 323D 3D3B 813A 8239 8238 023A" $"3A32 822D 872C 852B 032A 4941 3E84 0002" $"3B1A 2480 0004 010A 1F27 2E87 3083 2F81" $"2E82 2D81 2C80 2B82 2A01 2719 8014 0613" $"1107 0607 0706 8007 0306 0605 1080 1207" $"1313 1E32 3D3C 3B3B 813A 8039 0938 3939" $"3839 3839 3A32 2E80 2D07 2C2D 2D2C 2D2D" $"2C2D 822C 022B 2C2C 802B 0329 3642 4684" $"0002 491D 2880 0005 0108 1E27 2D2F 8030" $"862F 832E 812D 802C 012B 2C81 2B82 2A01" $"2719 8014 0813 1106 0607 0706 0707 8006" $"0105 1080 120B 1313 1E32 3C3C 3B3A 3A39" $"3A3A 8039 0238 3939 8038 0339 3A31 2E80" $"2D05 2C2D 2D2C 2D2D 802C 002B 802C 022B" $"2C2C 802B 0328 4546 2684 0002 581D 1080" $"0004 0107 1D26 2C81 2F88 2E82 2D81 2C82" $"2B81 2A80 2903 2A27 1914 8013 0011 8606" $"0305 0510 1181 1205 1E32 3C3B 3A3A 8239" $"8438 0537 393A 312D 2D87 2C86 2B05 2A2A" $"2753 4F1C 8400 0245 1C21 8000 0401 061C" $"252C 872E 012D 2E84 2D81 2C83 2B80 2A01" $"292A 8029 0626 1913 1414 1311 8106 0005" $"8006 0C05 0605 1011 1212 1313 1F32 3B3B" $"803A 0739 3A39 3839 3938 3981 380B 3939" $"302D 2C2D 2D2C 2D2D 2C2D 812C 002B 802C" $"802B 062A 2B2B 265D 5320 8400 0234 1E33" $"8000 0501 051B 252B 2D80 2E02 2D2E 2E83" $"2D02 2C2D 2D81 2C01 2B2C 812B 012A 2B81" $"2A82 290B 2619 1314 1413 1106 0506 0605" $"8006 0B05 0605 1011 1212 1313 1F32 3B81" $"3A80 3902 3839 3980 380C 3738 3839 3930" $"2D2C 2D2D 2C2D 2D80 2C03 2B2C 2C2B 802C" $"802B 062A 2B2B 2C36 5825 8400 0242 2313" $"8000 0401 041A 242B 872D 022C 2D2D 842C" $"802B 022A 2B2B 802A 0229 2A2A 8229 0B26" $"1913 1413 1311 0605 0606 0580 060B 0506" $"0510 1112 1213 131F 323B 803A 8039 8238" $"0737 3736 3635 3636 2E81 2D02 2C2D 2D80" $"2C03 2B2C 2C2B 802C 802B 062A 2B2B 3738" $"5918 8400 0245 281E 8100 0303 1924 2A8B" $"2C84 2B83 2A83 2980 2802 2926 1980 1301" $"1211 8805 0210 1111 8012 171F 3139 3837" $"3736 3535 3433 3231 302F 2E2C 2B2A 2928" $"292A 2B83 2C87 2B81 2A03 2B42 3A5B 8500" $"021F 2B30 8000 0401 0218 232A 872C 042B" $"2C2C 2B2C 822B 022A 2B2B 802A 0229 2A2A" $"8029 0028 8129 0126 1A80 1306 1211 0605" $"0606 0580 0603 0506 050E 820F 0B19 282D" $"2D2B 2A28 2726 2524 2480 2384 2205 2325" $"2729 2A2B 812C 0F2B 2C2C 2B2C 2B2B 2A2B" $"2B2A 2B2B 4D3B 6485 0002 2733 3380 0005" $"0102 1623 292B 802C 052B 2C2C 2B2C 2C83" $"2B00 2A80 2B81 2A83 2901 2828 8027 0A26" $"2623 1714 1313 1213 0B06 8505 0004 8305" $"020F 1B21 8A22 0321 2222 2180 2207 2122" $"2224 2628 292A 802B 002C 812B 082A 2B2B" $"2A2B 2B2D 386E 8500 022E 3D1C 8100 0301" $"1422 298A 2B80 2A80 291C 2828 2727 2626" $"2524 2423 2221 201E 1D1C 1A19 1613 1414" $"1313 1212 0F09 0584 0400 0280 0305 0404" $"0F1B 2122 9621 0522 2426 282A 2A82 2B82" $"2A02 3938 6485 0002 143B 2C80 0005 0101" $"1222 282B 812A 1929 2928 2827 2726 2525" $"2423 2221 201E 1D1B 1A19 1716 1514 1312" $"1182 1003 0F10 1112 8213 0312 1210 0A80" $"0503 0405 0402 8003 0704 040E 1B20 2122" $"228E 2106 2021 2120 2121 2080 2108 2325" $"2729 292A 2A2B 2B80 2A02 453A 4786 0002" $"492A 0F80 0014 010F 1D22 2424 2222 201F" $"1E1C 1B19 1817 1615 1413 1280 1183 1008" $"0F10 100F 1010 0F10 1082 0F01 1012 8313" $"0712 110B 0504 0504 0281 0303 040E 1A20" $"8121 0820 2121 2021 2120 2121 8020 801F" $"0820 2021 2120 2121 2021 8220 0521 2326" $"2729 2980 2A02 4741 5386 0002 621D 1E81" $"0006 0610 1213 1312 1281 1189 108D 0F81" $"0E03 0F0F 1012 8113 8012 0511 0C06 0402" $"0280 0303 040E 1A1F 8120 071F 1F1E 1E1D" $"1D1C 1C81 1B80 1A02 1B1D 1F83 2081 1F02" $"1E1E 1D80 1C80 1D03 284A 455F 8600 0333" $"2316 1180 0002 020A 0E87 1006 0F10 100F" $"1010 0F80 1089 0F00 0E80 0F03 0E0F 0F0E" $"810F 0110 1282 1380 1203 0D13 0001 8002" $"020C 161A 841B 071A 1B1B 1A1B 1B1A 1B83" $"1A17 1919 1A1B 1B1A 1918 1614 1211 1011" $"2136 1C2F 3430 4439 4B48 8600 0A09 401B" $"2204 0000 0109 0D0F 8010 050F 1010 0F10" $"108A 0F08 0E0F 0F0E 0F0F 0E0F 0F8C 0E07" $"0D0C 0B0A 0807 0604 8200 0401 0A14 191A" $"801B 831A 2219 1918 1817 1615 1412 110F" $"0D0B 0908 0605 1749 2B2E 462F 4545 2924" $"2929 2E3A 3E55 6A11 8700 082C 2F16 1C00" $"0001 090D 890F 890E 0E0D 0D0C 0B0A 0908" $"0807 0605 0504 060B 830D 040A 0807 0505" $"8204 8102 1900 0007 1317 1918 1717 1615" $"1412 110F 0D0C 0A08 0705 0403 0301 0184" $"000F 0F29 3537 2E3B 4C62 728A A141 4034" $"1F0B 8800 0926 4F26 270A 0001 080D 0E80" $"0F04 0E0F 0F0E 0F80 0E09 0D0D 0C0B 0A09" $"0808 0706 8105 0604 0505 0405 0504 8005" $"0904 0505 080C 0E0D 0E0D 0780 0801 0605" $"8004 1103 0203 0302 0302 0207 0C0C 0A08" $"0706 0404 0383 020D 0302 0203 0301 0001" $"0100 0101 0001 8000 0B0F 2E55 7888 9DAB" $"B6BB 9450 1288 0013 3051 2C21 1824 0000" $"070B 0D0C 0C0B 0A09 0807 0706 8005 0304" $"0505 0480 050E 0405 0504 0505 0405 0504" $"0505 0405 0583 0405 080C 0C0B 0403 8004" $"0003 8001 9703 1C02 0303 0100 0101 0001" $"0104 090C 1920 2B3E 4668 96AB ACA9 ACB2" $"BABD 9A4B 8600 0B55 2C28 2917 2900 0001" $"0304 059A 0481 0380 0280 010E 0001 041B" $"0508 0B11 2540 5A5E 340D 0495 0310 040D" $"1016 242A 3F4B 5B6D 7584 8B92 9A9B 9C81" $"9D08 A0AE B5C0 C5CD D4D9 8B85 000A 5328" $"2A01 0202 0100 0103 0480 0505 0405 0504" $"0505 8704 8103 8002 8001 8200 8001 8300" $"0D2B 181B 1E20 2539 566F 7D65 310C 0588" $"040F 0506 0914 1627 2F3E 545B 747C 8A96" $"979E 8CA1 0AA2 A3A3 A4AB C2D4 DADA C40E" $"8400 0351 2A1F 0280 0302 0101 0285 0481" $"0381 0280 0182 0080 0180 0280 0381 0400" $"0384 001E 010E 1C1F 2224 2C42 5F76 8166" $"3012 0808 0A14 1A23 353C 525E 7082 8896" $"9CA1 A682 A702 A8A8 A684 A513 A6A6 A7AA" $"ADB2 B7BD C3CA D0D6 DDE2 E4E3 D9D2 CA1C" $"8400 034D 2321 0280 0402 0300 0181 0282" $"0181 0080 0103 0202 0303 8104 0805 0504" $"0505 0405 0504 8105 0104 0185 0014 0417" $"2123 2528 334C 677D 888A 8282 8993 9FA2" $"A7A9 A982 AA84 AB10 ACAD ADAB ACAE B2B7" $"BDC2 C9CF D5DA DFE2 E380 E50A E4E3 E2E0" $"DEDC DDCD CDC4 1D84 0003 5419 0901 8104" $"0303 0100 0080 0103 0202 0303 8104 9505" $"1A04 0100 0001 0204 0606 0A0B 0F19 2225" $"2729 2D3A 556F 8393 A1AA ACAC 81AD 81AE" $"26AF AFB0 B2B6 BABF C5CC D4DA DADE E2E4" $"E6E7 E8E7 E7E6 E5E3 E1DE DBD8 D5D1 CDCA" $"C7C4 C2C1 B7CA BE1D 8400 0448 1B1D 0003" $"8205 0004 8A05 0206 0605 8006 1A05 0606" $"0506 0605 0606 0506 0708 0A0C 0E12 1312" $"1516 191B 1C1E 1B1B 801C 341D 2126 282B" $"2D31 425E 7789 99A7 AEB1 B2B4 B8BD C3C9" $"CFD6 DDE3 E8EC EEF0 F2F3 F7F5 ECEA E8E6" $"E3E0 DCD8 D4D0 CDC9 C6C4 C3C1 C0C0 BFBF" $"81BE 03B4 BCBB 1D84 000A 351D 2E00 0205" $"0606 0506 0591 0611 0709 0A0D 0E11 1517" $"1B1D 1F21 2224 2425 2421 831F 2E1C 1C1D" $"1D1E 1F20 2227 2A2C 2E30 364A 667D 8FA7" $"D3E6 EAEE F1F3 F5F7 F8FA FAFB FCFA F8F4" $"EEEC E4D5 CFCC C8C6 C4C3 C2C2 80C1 81C0" $"80BF 80BE 05BD BEB6 BAAE 0F84 0005 4221" $"2100 0104 8A06 8007 0C0A 0A0C 1011 1517" $"1B1E 1F22 2324 8225 8526 0B22 2122 2325" $"2627 2324 2425 2581 261F 272B 2D2F 3133" $"3C52 70AD F1FD FDFE FEFD FAF6 F1EB E5DF" $"D9D5 D2D0 CED0 CEC3 C2C2 82C1 82C0 80BF" $"80BE 80BD 04BC BEBB BAA5 8500 0651 2619" $"0000 0306 8107 0D08 090B 0C0F 1114 1819" $"1E1F 2123 2480 2586 260C 2727 282A 2B2D" $"3032 3437 3830 2D82 2E00 2682 2518 2424" $"2323 2B2D 2E30 3234 3750 9FD7 EFE5 DFDA" $"D5D1 CFCE CECD CE82 CD02 D0CD C283 C182" $"C080 BF81 BE80 BD04 BCBE BCB9 A885 000F" $"2924 2A00 0001 060D 151A 1D1F 2023 2424" $"8125 8526 1C27 2829 2B2C 2E31 3336 383A" $"3C3D 3F40 4041 4243 4135 2F2F 2E2E 2D2D" $"2222 8021 8120 0B21 2B2C 2E30 3133 3549" $"96B7 CC82 CE83 CD06 CCCD CCCC CFCC C280" $"C183 C080 BF81 BE80 BD80 BC03 BEB0 B8AB" $"8500 0929 2B34 0000 0109 1720 2480 2583" $"2620 2728 2A2B 2D30 3234 3739 3B3D 3E3F" $"4041 4244 494D 4F4E 4D4A 4846 4544 4032" $"2B2A 2A80 2903 1F1F 1E1E 821F 0B21 2A2C" $"2E30 3133 3449 96B7 CC83 CD86 CC02 CECB" $"C182 C081 BF82 BE80 BD80 BC05 BBBB BEB3" $"B796 8500 2A33 3417 0000 0105 141D 2327" $"292A 2C2E 3133 3538 3A3C 3D3F 4040 4144" $"4B5F 7381 8E87 7D74 6A60 564C 4541 403F" $"813E 013B 2F80 2902 2829 2980 1F00 1E82" $"1F10 202A 2C2E 2F31 3234 4996 B7CB CDCD" $"CCCD CD83 CC06 CBCC CBCB CECA C180 C083" $"BF80 BE81 BD80 BC06 BBBB BABD B7B6 7785" $"0002 1D39 2880 001B 020E 1B2D 3A3D 3E3F" $"4041 4349 526F 7C95 A3B2 ABAB A59C 806F" $"5345 413F 853E 823D 073B 2F28 2929 2829" $"2980 1F00 1E82 1F0B 202A 2C2D 2F30 3234" $"4996 B7CB 85CC 84CB 04CD C9C0 BFC0 81BF" $"80BE 01BD BE80 BD80 BC01 BBBB 80BA 03BD" $"B5B6 7B85 0002 0243 3A80 0012 0107 2039" $"4E80 93A4 B0B5 ADB4 9C8E 7064 4941 3F81" $"3E8C 3D04 3C3C 3D3B 3083 2800 1F83 1E0E" $"1F1F 2029 2B2D 2E30 3233 4996 B6CA CC86" $"CB82 CA01 CDC8 80BF 82BE 81BD 81BC 80BB" $"80BA 04B9 BDAD B47E 8500 1003 531B 0100" $"0001 0323 384C 6B60 4C41 3F3F 833E 033D" $"3E3E 3D80 3E07 3D3E 3E3D 3E3E 3D3E 813D" $"003C 813D 073B 3028 2929 2829 2980 1F00" $"1E80 1F0D 1E1F 2029 2B2C 2E30 3133 4A96" $"B7C9 85CB 84CA 02CC C7BF 83BE 80BD 82BC" $"01BB BB80 BA80 B903 BCB0 B35F 8500 0A03" $"5B1C 0B00 0001 031F 333C 803E 0C3D 3E3E" $"3D3E 3E3D 3E3E 3D3E 3E3D 803E 053D 3E3E" $"3D3E 3E80 3D03 3C3D 3D3C 813D 073B 3028" $"2929 2829 2880 1F00 1E80 1F11 1E1F 2028" $"2A2C 2E2F 3133 4A96 B6C9 CBCB CACB 84CA" $"81C9 01CC C681 BE82 BD81 BC80 BB80 BA80" $"B904 B8BB B5B2 4C86 0009 3C24 1500 0001" $"021C 323B 973D 863C 023D 3B30 8328 001F" $"851E 0B1F 282A 2C2D 2F31 324B 96B6 C882" $"CA85 C904 C8C9 CBC6 BE81 BD82 BC80 BB81" $"BA80 B980 B803 BAB3 B150 8600 1B4B 2817" $"0000 0101 1A31 3B3D 3E3E 3D3E 3E3D 3E3E" $"3D3E 3E3D 3E3E 3D3E 3E84 3D06 3C3D 3D3C" $"3D3D 3C81 3D04 3B30 2829 2980 2803 1F1E" $"1F1E 801F 0F1E 1E1F 2729 2B2D 2F30 324B" $"96B6 C8CA CA86 C981 C801 CBC5 81BD 82BC" $"81BB 80BA 80B9 80B8 04B7 B8AE B054 8600" $"155B 1A0F 0000 0101 1830 3A3D 3E3E 3D3E" $"3E3D 3E3E 3D3E 3E84 3D14 3C3D 3D3C 3D3D" $"3C3D 3D3C 3D3D 3C3D 3D3C 3C3B 3028 2981" $"2800 1F80 1E80 1F0D 1E1E 1F27 292B 2C2E" $"3031 4B96 B6C7 82C9 02C8 C9C9 84C8 02CA" $"C4BD 82BC 81BB 80BA 81B9 80B8 80B7 03B5" $"B4B0 2D86 000F 4619 1F00 0001 0115 2F3A" $"3D3E 3E3D 3E3E 863D 003C 803D 0B3C 3D3D" $"3C3D 3D3C 3D3D 3C3D 3D82 3C08 3B31 2829" $"2827 2828 1F81 1E11 1F1F 1E1E 1F27 292A" $"2C2E 2F31 4B96 B6C7 C9C9 83C8 01C7 C882" $"C701 C9C3 81BC 80BB 82BA 80B9 80B8 01B7" $"B780 B603 B1BB B022 8600 0238 1B32 8000" $"0301 122E 3986 3D94 3C80 3B04 3C3B 3128" $"2881 2702 1F1D 1D84 1E0A 2628 2A2C 2D2F" $"314C 96B5 C680 C885 C780 C602 C7C9 C181" $"BB82 BA81 B980 B880 B781 B603 ADBB B124" $"8600 1946 1F10 0000 0101 102D 393C 3D3D" $"3C3D 3D3C 3D3D 3C3D 3D3C 3D3D 3C80 3D05" $"3C3D 3D3C 3D3D 833C 003B 813C 013B 3180" $"2806 2728 281F 1E1E 1D83 1E0B 2628 292B" $"2D2F 304C 96B5 C6C8 84C7 08C6 C7C6 C6C5" $"C5C6 C8C1 80BB 81BA 82B9 80B8 01B7 B780" $"B606 B5B5 B6AE B3B2 2786 0019 4823 1D00" $"0001 010E 2C38 3C3D 3D3C 3D3D 3C3D 3D3C" $"3D3D 3C3D 3D3C 803D 023C 3D3D 833C 033B" $"3C3C 3B81 3C01 3B31 8028 0627 2828 1F1E" $"1E1D 831E 0A26 2729 2B2D 2E30 4C96 B5C5" $"82C7 80C6 80C5 80C4 03C6 C7C0 BB80 BA01" $"B9BA 80B9 81B8 80B7 80B6 07B5 B5B4 B5B1" $"B2A9 0B86 0002 2625 2F80 0003 010C 2B37" $"953C 883B 033C 3B31 2882 2700 1F83 1D80" $"1E0A 2527 292A 2C2E 2F4D 96B5 C580 C681" $"C583 C404 C3C5 C7BF BA82 B981 B880 B780" $"B680 B580 B403 B5B4 B2A7 8700 0230 2C30" $"8000 1201 0A2A 373C 3D3D 3C3D 3D3C 3D3D" $"3C3D 3D3C 3D3D 843C 0F3B 3C3C 3B3C 3C3B" $"3C3C 3B3C 3C3B 3B3A 3280 2806 2728 281F" $"1E1E 1D80 1E12 1D1E 1E25 2728 2A2C 2D2F" $"4D96 B4C4 C5C5 C4C5 C583 C480 C302 C4C6" $"BE81 B982 B880 B780 B680 B507 B4B4 B3B3" $"B5AE B1AA 8700 023A 341B 8000 0C01 0828" $"363C 3D3D 3C3D 3D3C 3D3D 873C 0B3B 3C3C" $"3B3C 3C3B 3C3C 3B3C 3C82 3B01 3A32 8028" $"0627 2828 1F1E 1E1D 801E 0D1D 1E1D 2426" $"282A 2B2D 2F4D 96B4 C382 C402 C3C4 C482" $"C304 C2C4 C5BD B982 B881 B780 B681 B508" $"B4B4 B3B3 B2B5 AAB0 AD87 0002 1C38 2A80" $"0004 0107 2735 3B87 3C93 3B05 3A3A 3B3A" $"3228 8227 001F 861D 0924 2627 292B 2D2F" $"4D96 B486 C383 C204 C3C4 BCB8 B882 B780" $"B681 B580 B480 B305 B2B2 B5AC AF80 8700" $"020A 433F 8100 1205 2534 3B3C 3C3B 3C3C" $"3B3C 3C3B 3C3C 3B3C 3C3B 803C 053B 3C3C" $"3B3C 3C83 3B00 3A81 3B01 3A32 8028 8027" $"031F 1D1E 1D80 1E80 1D0A 2325 2729 2A2C" $"2E4E 96B4 C282 C301 C2C3 81C2 06C1 C2C1" $"C2C3 BBB8 82B7 81B6 80B5 80B4 01B3 B380" $"B204 B1B5 B1AF 7C87 0003 0C53 1802 8000" $"1204 2333 3B3C 3C3B 3C3C 3B3C 3C3B 3C3C" $"3B3C 3C3B 803C 043B 3C3C 3B3C 813B 033A" $"3B3B 3A81 3B01 3A32 8028 8027 001F 801D" $"801E 0F1D 1D1C 2325 2728 2A2C 2E4E 96B4" $"C2C3 C383 C283 C102 C2C2 BA80 B781 B680" $"B580 B481 B380 B205 B1B1 B4AC AE80 8700" $"030A 5421 0980 0003 0321 323A 943B 883A" $"033B 3A32 2880 2703 2626 1F1C 841D 0D1C" $"2224 2628 2A2B 2D4F 96B3 C1C2 C284 C182" $"C002 C1C2 B981 B681 B580 B480 B380 B280" $"B105 B0B0 B4A6 AD86 8800 023E 2C10 8000" $"1102 1F32 3A3C 3C3B 3C3C 3B3C 3C3B 3C3C" $"3B3C 3C84 3B0B 3A3B 3B3A 3B3B 3A3B 3B3A" $"3B3B 803A 0732 2828 2726 2727 1F82 1D0F" $"1E1D 1D1C 2224 2627 292B 2D4F 96B3 C1C2" $"84C1 83C0 05C2 C1B9 B6B5 B680 B581 B480" $"B380 B280 B106 B0B0 AFB3 AAAC 5C88 0002" $"4D22 0A80 000D 011D 313A 3C3C 3B3C 3C3B" $"3C3C 3B3C 853B 0B3A 3B3B 3A3B 3B3A 3B3B" $"3A3B 3B83 3A0A 3228 2727 2627 271F 1D1D" $"1C82 1D10 1C21 2425 2729 2A2C 4F96 B3C0" $"C1C1 C0C1 C181 C000 C182 C002 BFB9 B680" $"B580 B481 B380 B280 B101 B0B0 80AF 03B2" $"B0AB 5488 0002 5E19 1080 0003 011A 3039" $"883B 913A 8039 043A 3A32 2827 8126 001F" $"821C 801D 0B1C 2123 2526 282A 2C4F 96B3" $"C084 C10B C0C0 BFBE BCBA B8B7 B6B7 B7B6" $"80B4 80B3 81B2 80B1 01B0 B080 AF05 AEAE" $"B0A8 AA58 8800 0236 1924 8000 1201 182F" $"393B 3B3A 3B3B 3A3B 3B3A 3B3B 3A3B 3B3A" $"803B 053A 3B3B 3A3B 3B83 3A00 3981 3A01" $"3932 8027 0626 2727 1F1D 1D1C 821D 0A1B" $"2023 2426 2829 2C50 97B4 80C1 08C0 BFBE" $"BDBB B9B7 B5B3 80B2 06B1 B1B3 B5B6 B6B4" $"80B3 80B2 80B1 80B0 80AF 81AE 02A7 A85C" $"8800 0240 1C34 8000 1201 152E 383B 3B3A" $"3B3B 3A3B 3B3A 3B3B 3A3B 3B3A 803B 023A" $"3B3B 833A 0339 3A3A 3981 3A01 3933 8027" $"0626 2727 201D 1D1C 801D 121C 1D1B 2022" $"2526 282A 2C51 96B1 BCBB B9B7 B5B4 80B2" $"85B1 05B0 B1B3 B5B5 B480 B280 B181 B001" $"AFAF 80AE 05AD ADAC ACA8 2988 0002 4E20" $"0E80 0014 0113 2D37 3B3B 3A3B 3B3A 3B3B" $"3A3B 3B3A 3B3B 3A3B 3B84 3A06 393A 3A39" $"3A3A 3980 3A02 3939 3380 2706 2627 271F" $"1D1D 1C80 1D0E 1C1D 1B20 2223 2526 2728" $"4B8C A6B2 B287 B184 B001 AFB1 80B4 00B2" $"80B1 80B0 01AF AF80 AE07 ADAD ACAC A8B4" $"A82B 8800 0248 2120 8000 0301 112C 378F" $"3A8D 3903 3A3A 3327 8226 001F 851C 0A19" $"1D1E 1E1F 2021 2348 88A3 8AB0 83AF 08AE" $"AEAF B1B3 B3B2 B0B0 80AF 80AE 09AD ADAC" $"ACAB ACA5 AFA8 2E88 0002 2B23 3280 000A" $"010E 2B36 3A3B 3A3B 3B3A 3B84 3A00 3980" $"3A06 393A 3A39 3A3A 3988 3A03 3228 2727" $"8026 0022 811C 0E1D 1D1C 1C17 191A 1C1E" $"1F21 2348 89A3 86B0 01AF B083 AF83 AE00" $"AF80 B204 B0AF AFAE AE80 AD08 ACAC ABAB" $"ACA7 A9AA 3288 0002 3529 1D80 0003 010C" $"2A35 883A 0339 3A3A 3980 3A00 3981 3A82" $"3B0B 3A3A 3938 3634 3230 2D2B 2827 8026" $"0325 201C 1B82 1C0F 1718 1A1C 1D1F 2022" $"4888 A3AF B0B0 AFB0 84AF 84AE 81AD 06AC" $"ADAF B1B1 B0AE 80AD 01AC AC80 AB05 AAAB" $"A9AA A704 8800 0241 311E 8100 020A 2835" $"8A39 813A 823B 0A3A 3A39 3836 3532 302E" $"2C2B 802A 052B 2C2B 2726 2680 2500 1F80" $"1B80 1C0B 1718 1A1B 1D1E 2022 4888 A2AE" $"81AF 86AE 82AD 82AC 06AB ABAD B0B0 AFAE" $"80AC 08AB ABAA AAA9 ABAB ACA9 8900 020E" $"322F 8000 0901 0827 3439 3A39 3A3A 3982" $"3A82 3B0A 3A3A 3938 3635 3230 2E2C 2B80" $"2A00 2980 2A05 292A 2A2B 2B2A 8026 0325" $"2625 1F82 1C0A 1617 191B 1D1E 2021 4988" $"A286 AE02 ADAE AE80 AD01 ACAD 82AC 80AB" $"11AA AAAB ADAF AFAE ACAB ABAA AAA9 A9AB" $"A2A9 AD89 0002 113E 3080 0004 0107 2633" $"3981 3A83 3B09 3A39 3836 3532 302E 2C2B" $"802A 0629 2A2A 292A 2A29 802A 0029 802A" $"1D2B 2B29 2626 2526 2625 1E1C 1C1B 1C16" $"1719 1A1C 1E1F 2149 88A2 ADAE AEAD AE84" $"AD84 AC80 AB82 AA07 A9A9 ABAD AEAD ABAA" $"80A9 04A8 ABA1 A7AB 8900 0315 4A17 0280" $"0003 0525 343A 803B 0C3A 3A39 3836 3532" $"302E 2C2B 2A2A 9229 042A 2B2B 2826 8125" $"0F24 1E1B 1B1C 1616 181A 1B1D 1F20 4988" $"A283 AD85 AC82 AB82 AA80 A980 A80C A9AB" $"ADAC ABA9 A8A8 A7AA A5A6 7C89 0018 0839" $"2506 0000 0104 2332 3838 3635 3230 2E2C" $"2B2A 2A29 2A2A 2980 2A0C 292A 2A29 2A2A" $"292A 2A29 2A2A 2980 2A0A 292A 2A29 2A2A" $"2B2B 2826 2680 2511 241D 1B1B 1616 1819" $"1B1D 1E20 4987 A1AC ADAD 86AC 83AB 81AA" $"80A9 80A8 81A7 0AA9 ABAB AAA9 A7A7 AAAA" $"A67F 8A00 0240 2010 8000 1102 1C29 2D2C" $"2B2A 2A29 2A2A 292A 2A29 2A2A 2980 2A0C" $"292A 2A29 2A2A 292A 2A29 2A2A 2980 2A83" $"2917 2A2B 2A27 2525 2425 2524 1D1B 1515" $"1719 1A1C 1E20 4A87 A1AB 82AC 85AB 82AA" $"81A9 81A8 80A7 0CA6 A6A5 A6A9 AAAA A8A6" $"AAA0 A685 8A00 0254 1B1E 8100 0215 2228" $"A029 8128 0529 2A2B 2A26 2581 240C 231C" $"1515 1718 1A1C 1D1F 4A88 A185 AB83 AA82" $"A981 A881 A780 A680 A509 A4A4 A6A8 A9A8" $"AB9E A489 8A00 0233 241A 8100 0F13 2128" $"2A29 2A2A 292A 2A29 2A2A 292A 2A8D 2900" $"2880 290C 2829 2928 2929 2829 2A2A 2926" $"2480 2511 2422 1414 1618 191B 1D1F 4A87" $"A0AA ABAB AAAB 84AA 82A9 82A8 80A7 80A6" $"80A5 01A4 A480 A306 A4A6 A7AD A7A4 538A" $"0003 2A35 2803 8000 0211 2127 8E29 0C28" $"2929 2829 2928 2929 2829 2928 8029 0B28" $"2929 2829 2928 2929 2A2A 2981 250C 2423" $"3F1D 1517 191B 1C1E 4B87 A083 AA01 A9AA" $"81A9 01A8 A982 A880 A781 A680 A501 A4A4" $"80A3 08A2 9F98 8B7C 8CA2 A65C 8A00 0308" $"4B19 1A80 0002 1020 27A7 2804 292A 2A28" $"2580 240B 2334 431A 1719 1A1C 1E4B 87A0" $"85A9 83A8 82A7 82A6 80A5 0FA4 A4A3 A19C" $"917E 746E 727A 848F 92A4 558B 0002 5023" $"2880 0010 0E1F 2729 2829 2928 2929 2829" $"2928 2929 2880 290C 2829 2928 2929 2829" $"2928 2929 2880 291C 2829 2928 2929 2829" $"2828 292A 2A27 2524 2423 352E 3618 181A" $"1B1D 4B87 A083 A983 A882 A781 A680 A512" $"A4A3 9F96 8674 7271 7880 827B 7674 767E" $"7C6F 068B 0002 3A30 2980 0010 0C1F 2629" $"2829 2928 2929 2829 2928 2929 2880 290C" $"2829 2928 2929 2829 2928 2929 2880 2902" $"2829 2983 2813 2728 292A 2A27 2423 2235" $"2F2C 2616 191B 1D4C 879F 86A8 82A7 82A6" $"15A5 A4A1 9A8D 7872 7376 7B88 7F78 7573" $"7A8C 6F52 3B1E 048D 0016 1743 1914 0000" $"0A1E 2628 2829 2928 2929 2829 2928 2929" $"2880 290E 2829 2928 2929 2829 2928 2929" $"2829 2984 2819 2728 2827 2828 292A 2926" $"2422 3430 3428 4017 1A1C 4C87 9FA7 A8A8" $"83A7 01A6 A781 A614 A5A3 9D92 816F 7376" $"7A87 807A 7675 787F 7C66 432C 0293 0007" $"571C 1900 0009 1D25 9E28 8927 1028 292A" $"2925 2234 3053 3D30 3C18 1C4C 879E 80A7" $"84A6 14A5 A49F 9686 7672 7576 828A 7C78" $"7678 8182 674F 360E 9800 153C 2526 0000" $"081C 2528 2829 2928 2929 2829 2928 2929" $"2880 2901 2829 8728 0027 8028 1C27 2828" $"2728 2827 2828 2728 2827 2829 2928 2335" $"324B 6E3D 2C2D 1A4C 869E 83A6 13A4 A199" $"8C7A 7175 797F 8281 7A77 777E 8178 5641" $"229D 0007 2636 1D0D 0006 1B24 9428 0627" $"2828 2728 2827 8028 3227 2828 2728 2827" $"2828 2728 2827 2728 2929 2637 3833 154E" $"2C2E 2E4B 869E A6A5 A29C 917E 756F 737C" $"8083 7A78 777B 857C 624A 220C A100 0703" $"4A1A 1700 051B 24AD 271E 2829 2845 3F37" $"000E 2C37 5657 6F8B 8572 7471 7980 837C" $"7674 747C 7568 553C 0EA7 0014 4A24 2300" $"0319 2327 2728 2827 2828 2728 2827 2828" $"2780 280C 2728 2827 2828 2728 2827 2828" $"2780 2807 2728 2827 2828 2728 8127 1D26" $"2624 211E 4249 4843 0000 1074 5D68 6964" $"7487 7E78 7573 798B 6C4E 391B 02AB 0014" $"3333 2603 0219 2327 2728 2827 2828 2728" $"2827 2828 2780 280C 2728 2827 2828 2728" $"2827 2828 2780 2802 2728 2881 270D 2626" $"2422 1F22 3238 3848 4344 5F39 8000 0B33" $"6061 6366 6A74 7C77 633E 28B1 0006 1A4D" $"211B 0117 22A1 2711 2625 221F 222E 323B" $"4546 3236 3D4B 5E6E 5801 8100 0611 1717" $"1817 1D0B B500 1401 571F 1B00 1622 2727" $"2828 2728 2827 2828 2728 2827 8028 0A27" $"2828 2728 2827 2828 2728 8127 1325 2320" $"1F2D 353E 4040 3B35 3B47 5869 684A 3E1B" $"05C3 0013 3F27 2400 1421 2627 2828 2728" $"2827 2828 2728 2827 8028 0527 2828 2728" $"2881 2713 2624 201C 2C36 363E 463D 343A" $"4354 6E65 573A 250D C800 0619 3A20 0A12" $"2026 9227 1326 2421 1D22 3938 4148 3937" $"3941 4E64 6F62 4331 0CCD 0006 0750 1E23" $"1020 268C 2715 2626 2422 1F1E 3234 3743" $"4636 383F 4B5F 7964 5130 1402 D200 0E49" $"2828 0D1E 2526 2727 2627 2726 2727 8026" $"1225 231F 202A 3139 444A 3134 3A48 5C6B" $"6B5A 3A22 D800 8035 020E 1D25 8426 1325" $"2320 1E29 343B 3C43 3D33 3944 5467 6C4E" $"411F 08DC 001B 124C 251E 1C25 2626 2523" $"201C 2833 363D 4640 3439 4151 6866 5B3E" $"2C12 E200 1645 2938 1C1E 1D1F 2C37 3F44" $"3D38 373E 4C60 6E66 4837 1002 E600 113B" $"3B2C 3343 4345 3333 3B48 5A7A 6555 351B" $"05DD 006C 386D 6B00 0004 0800 1DA0 C8C2" $"BBB4 ADA6 A099 928B 847D 766E 2729 4B4E" $"4841 3A33 2C26 1F18 1108 000C F0EC E8E9" $"E9EA EAEA EAEA EAEA F4F6 FBFC FAF6 F1F0" $"F1F1 F2F3 F5F4 F3F2 F1EB 0D08 FAEA E0E1" $"E1E1 E1E1 E0E0 DFDF F0F7 FDFE F7EF E4E1" $"E1E1 E1E5 EDED EDEE EEED 0800 F1EC DEDF" $"E0E0 DFDF DFDF DEDE EFF7 FDFE F7EF E4E1" $"E1E1 E1E5 EDED EDEE EEE7 0000 DFEE DDDE" $"DEDE DEDE DEDE DDDD EEF6 FDFD F7EF E3E0" $"E0E1 E1E5 ECEC EDED EDDA 0000 CEF0 DCDD" $"DDDD DDDD DDDD DDDD EEF6 FDFE F7EF E3E0" $"E1E1 E1E6 EDED EDEE EECC 0000 BDF2 DCDC" $"DCDC DCDD DDDD DCDC EDF6 FDFE F7EF E2E0" $"E1E1 E1E6 EDED EDEE EEBE 0000 ACF3 DCDC" $"DCDC DCDC DCDC DCDC EDF6 FDFE F7EF E2E0" $"E1E1 E1E7 EDED EDEE EEB0 0000 9AF5 DCDB" $"DBDB DBDB DBDC DCDC EDF5 FDFD F7EF E2E0" $"E0E1 E1E7 ECED EDED EDA2 0000 89F6 DCDB" $"DBDB DBDC DCDC DCDC ECF5 FDFE F7EF E1E0" $"E1E1 E1E8 EDED EDEE EE94 0000 78F8 DDDB" $"DBDB DBDC DCDC DCDC ECF5 FDFE F7EF E1E0" $"E1E1 E1E8 EDED EDEE EE87 0000 66F9 DEDB" $"DBDB DBDC DCDC DCDC ECF5 FDFE F7EF E1E0" $"E1E2 E2E9 EDED EDEE EE79 0000 55FA DFDA" $"DBDB DCDC DCDE DFE0 EDF4 FDFD FAF6 F0F1" $"F2F4 F5F5 F2F0 EEED EE6B 0000 28F8 ECEB" $"EDEF F0F2 F4F5 F6F6 F6F3 F3F7 FAFC F9FA" $"FAFB FBFB FAF9 F8F0 D843 0000 0091 F8F7" $"F8F8 F9FA FAFB FBFC FAF8 FCFD FAFA FCFC" $"FBFB FAFA FBF2 9B36 0000 0000 25E5 FDFE" $"FEFD FDFC FBFB FAF9 FBF6 F8F2 F2F5 F6F6" $"F6F6 F6F7 F9F8 F7F6 D665 0000 2BF7 F6F7" $"F6F5 F5F5 F5F5 F5F5 F9FA FDFA F2EF EFED" $"EBE9 E8E9 EEEE EEEE EEAE 0000 19F9 F4F3" $"F1EF EDEB E9E7 E4E2 EEF3 FDFE F6F0 E8E2" $"E2E3 E3E8 EEEE EEEF EFA0 0000 08FA EAE0" $"E0DF DFDE DDDD DEDE ECF3 FDFE F6F0 E8E2" $"E2E3 E3E8 EEEE EEEF EF92 0000 00F1 E9DD" $"DDDD DDDE DEDE DEDE ECF3 FDFE F6F0 E8E2" $"E3E3 E3E9 EEEE EEEF EF83 0000 00E0 EBDD" $"DDDD DDDD DEDE DEDF ECF3 FDFD F6F0 E8E2" $"E3E3 E4E9 EEEE EEEF EF75 0000 00CF EDDD" $"DEDE DEDE DFDF DFDF EBF3 FDFE F6F1 E8E2" $"E3E4 E4EA EEEF EEEF F066 0000 00BE EFDE" $"DEDE DEDF DFDF DFE0 EBF3 FDFE F6F1 E8E3" $"E4E4 E4EA EEEF EFF0 F058 0000 00AC F1DE" $"DEDF DEDF DFE0 E0E0 EBF3 FDFE F6F1 EAE7" $"EAED EFEF EDEE EFF0 F049 0000 009B F3DF" $"DEDF DFDF DFE0 E2E4 ECF3 FBFD FAF7 F3F1" $"F1F1 F1F1 F1EE EFEF F03A 0000 0089 F5DF" $"E0E3 E6E9 ECEF EFF0 EFF1 F4FC FAF8 F3F1" $"F2F2 F2F2 F3F2 F0EF F02C 0000 005D FAEE" $"EFEF EFF0 F0F0 EFF0 F0EF F2F5 F4F8 F3F1" $"F2F2 F2F3 F3F3 F3F3 EC18 0000 0016 F9F0" $"EFF0 EFF0 F0F0 EFF0 F0F1 F0F3 77D6 F4F2" $"F2F2 F2F3 DEAB 7743 1000 0000 0000 C6F0" $"EFEF EFEF EFF0 F0F0 F0F0 F0F0 5B20 DAEA" $"BC88 541F 0000 0000 0000 0000 0000 7DF1" $"F0F0 EFF0 F0F0 F0F1 EBBF 8C5A 0C00 0C05" $"0000 0000 0000 0000 0000 0000 0000 34F2" $"F0F0 F0EF CB98 6633 0700 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 01B3" $"A471 3F0E 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0073 386D 6B00" $"0001 0823 CFD4 CDC6 C0BB B9A3 979E 9792" $"8B83 403E E5E0 E0E0 DFE7 FAFA E9E1 E1E9" $"EDEE 7735 E6DE DEDD DDE5 FAFA E9E0 E1E9" $"EDEE 692D E7DC DCDC DCE5 FAFA E9E0 E1E9" $"EDEE 5B24 E9DB DBDC DCE4 F9FA E8E0 E1EA" $"EDEE 4D1B EBDB DBDC DCE4 F9FA E8E0 E1EA" $"EDEE 400F EFE3 E6E8 EAEE F6FA F6F6 F8F7" $"F4E9 2B09 DBFA FBFB FBFB F8F7 F8F9 F8F9" $"DF81 1911 F7F4 F2F0 EDEF FAF8 EDE7 E6EB" $"EEEE 5302 EFDE DEDE DEE5 F8FA ECE2 E3EB" $"EEEF 4500 E2DD DDDE DFE5 F8FA ECE3 E4EC" $"EEEF 3600 D3DE DEDF DFE5 F8FA EDE6 E9ED" $"EFF0 2800 C3DF E2E5 E8EC F5FB F5F1 F2F2" $"F0F0 1900 99EF EFF0 F0F0 F0D5 EDF2 F2EE" $"C28C 0600 51F0 EFF0 F0EF CB6C 416A 3708" $"0000 0000 0DCE A472 3F0E 0000 0000 0000" $"0000 0074 386D 6B00 0040 0800 0000 0000" $"0000 0000 0006 3136 2F26 2118 140D 0A08" $"0706 0403 0201 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0003 52D7 FDFD FDFD FDFD FEFE FAF4" $"EEE9 E2DD D6D3 CDC7 BFB8 B2AB A59C 978F" $"8982 7B75 6D66 5F5A 524C 453E 3830 2921" $"1D15 1310 0E0B 0906 0402 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 32BA FCFD FCFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" $"FDFD F9F4 F0EB E7E2 DEDA D5CF C6C0 B472" $"0600 0000 0000 010F 2848 4D48 403A 322B" $"261F 1C18 1411 0E09 0502 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"1996 F6FD FCFC FBFC FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" $"FDFD FCFC FCFC FCFC FCFC FCFC FCFC FCFC" $"FCFC FCFC FCFC FBFB FAF9 F8F8 F7F7 F6F7" $"9529 4970 92B8 D8EF FCFD FDFD FDFD FDFD" $"FDFD FAF6 F3F0 EDEA E6E4 DFDA D1CC C3BE" $"B6AF AAA3 9C94 8F87 8279 726D 6660 5852" $"4A44 3C36 3020 0000 0000 0000 0000 0060" $"EAFC FCFB F5F0 EFF2 F3F4 F4F4 F5F5 F5F6" $"F6F6 F7F7 F7F8 F8F8 F8F8 F9F9 F9F9 F9FA" $"FAFA FAFA FAFB FBFB FBFB FBFB FBFB FBFB" $"FAF9 F9F8 F7F6 F6F5 F5F5 F6F7 F9FA FBFD" $"FCFB FEFE FDFE FDFD FDFC FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FCFC FCFC FCFC FCFC" $"FCFC FCFC FCFD FDFD FDFC FCFC FBFB FAFA" $"F9F8 F8F7 F7F2 A005 0000 0000 0000 2EF8" $"FBFA FAF9 EFE4 E0E6 E7E7 E8E8 E8E8 E8E9" $"E9E9 E9E9 E9E9 EAEA EAEA EAEA EAEA EAEA" $"EAEA EAEA EAEA EBEB EBEB EBEC ECEC EFF5" $"F5F4 F4F4 F3F3 F8FB FCFD FDFE FEFE FDFE" $"FEFB FAFB FAFB FBFA F8F8 FAF9 F9FA FAFA" $"FAFA FBFB FBFB FBFB FBFB FBFB FBFB FBFA" $"FAF9 F9F8 F7F6 F5F4 F4F3 F2F2 F2F1 F1F1" $"F0F0 F0F0 F0F0 F240 0000 0000 0000 57FC" $"FBFA F9F8 EEE0 DBE1 E3E3 E3E3 E3E3 E3E3" $"E3E3 E3E3 E3E3 E3E3 E3E3 E3E3 E3E3 E3E3" $"E3E2 E2E2 E2E2 E2E2 E2E2 E1E2 E2E1 E1EC" $"F3F2 F2F2 F2F7 FDFD FDFD FDFD FDFD FDFD" $"FDF4 F3F2 F2F2 F2F0 E8E6 ECE8 E9E9 E9E9" $"E9E9 EAEA EAEB EBEB ECEC EDED EDF1 F1F1" $"F0F0 F0EF EFEF EFEE EEEE EEEE EEEE EEEE" $"EDED EDED EDED EF4F 0000 0000 0000 46FC" $"FBFA F9F9 EFE1 DBE0 E2E2 E2E3 E3E3 E2E3" $"E3E2 E3E3 E2E3 E3E2 E3E2 E2E2 E2E2 E1E2" $"E1E1 E1E1 E0E1 E0E0 E0E0 DFE0 DFDF DFE8" $"F2F2 F3F3 F2F9 FEFD FEFE FDFE FEFE FDFE" $"FDF2 F0F0 F0EF EFEC E2E0 E7E2 E2E2 E2E2" $"E2E2 E2E2 E2E2 E3E3 E3E3 E3E2 E1E9 EDED" $"EDED EDED EDED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEE F040 0000 0000 0000 36FC" $"FBFA F9F9 F0E1 DBDF E2E2 E2E2 E2E2 E2E2" $"E2E2 E2E2 E2E2 E2E2 E2E2 E1E2 E2E1 E1E1" $"E1E0 E1E1 E0E0 E0DF E0E0 DFDF DFDE DFE8" $"F2F2 F3F3 F2F9 FEFD FEFE FDFE FEFE FDFE" $"FDF2 F0F0 EFEF EFEC E1DF E6E2 E1E1 E1E1" $"E1E1 E1E2 E1E2 E2E1 E2E2 E1E0 DFE7 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE F033 0000 0000 0000 27FB" $"FBFA F9F9 F1E2 DCDE E1E1 E1E1 E1E1 E1E1" $"E1E1 E1E1 E1E1 E1E1 E1E1 E1E1 E1E1 E0E0" $"E0E0 E0E0 DFDF DFDF DFDF DFDE DEDE DFE7" $"F2F2 F2F2 F2F9 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEF EEEC E1DF E5E1 E0E0 E0E0" $"E0E0 E1E1 E1E1 E1E1 E1E1 E1E0 DFE7 ECEC" $"ECEC ECEC ECEC ECEC ECED EDED EDED EDED" $"EDED EDED EDED EF26 0000 0000 0000 1AF6" $"FBFA FAF9 F2E2 DCDE E1E1 E1E1 E1E1 E1E1" $"E1E1 E1E1 E1E1 E1E1 E1E1 E0E1 E1E1 E0E0" $"E0E0 E0E0 DFE0 E0DF DFDF DEDF DFDE DFE7" $"F2F2 F3F3 F2F9 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEC E1DF E5E1 E1E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E1E0 DFE8 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE EB1B 0000 0000 0000 0CF1" $"FBFA FAF9 F3E3 DCDD E0E1 E0E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E1E0 E1E1 E0E1 E0E0 E0E0" $"E0DF E0E0 DFDF DFDE DFDF DEDF DFDE DEE6" $"F2F2 F3F3 F2F9 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEC E1DF E4E1 E1E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E1E0 DFE8 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE E810 0000 0000 0000 02EB" $"FBFA F9F9 F4E3 DCDD DFE0 E0E0 E0E0 E0E0" $"E0E0 E0E0 E0E0 E0E0 E0E0 E0E0 DFDF DFDF" $"DFDF DFDF DFDE DEDE DEDE DEDE DEDE DEE6" $"F2F2 F2F2 F2F9 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEF EEEC E1DF E4E0 E0E0 E0E0" $"E0E0 E0E0 E1E1 E1E1 E1E1 E1E0 E0E8 ECEC" $"ECEC ECEC ECEC ECEC ECED EDED EDED EDED" $"EDED EDED EDEE E506 0000 0000 0000 00DD" $"FCFA FAF9 F5E4 DDDC E0E0 DFE0 E0E0 DFE0" $"E0E0 E0E0 E0E0 E0DF E0E0 DFE0 E0E0 DFDF" $"DFDF DFDF DEDF DFDE DFDF DEDE DEDD DEE6" $"F2F2 F3F3 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEC E1DF E3E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E0E9 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE DD00 0000 0000 0000 00CA" $"FCFA FAF9 F6E5 DDDC DFDF DFDF E0E0 DFE0" $"E0DF E0E0 DFE0 E0DF E0E0 DFDF DFDF DFDF" $"DFDE DFDF DEDF DFDE DEDE DEDE DEDD DEE5" $"F1F2 F3F3 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E1DF E3E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E0E9 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE CF00 0000 0000 0000 00B9" $"FCFA FAF9 F7E6 DDDB DFDF DEDF DFDF DFDF" $"DFDF DFDF DFDF DFDF DFDF DFDF DFDF DEDF" $"DFDE DFDF DEDE DEDE DEDE DDDE DEDD DEE5" $"F1F2 F2F3 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E1DF E3E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E0E9 ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE C200 0000 0000 0000 00A8" $"FCFB FAF9 F7E6 DEDB DEDE DEDE DEDE DEDE" $"DEDE DEDE DEDE DEDE DEDE DEDE DEDE DEDE" $"DEDE DEDE DEDE DDDD DDDD DDDD DDDD DDE5" $"F1F1 F2F2 F2F8 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEE EEEB E0DF E2E0 E0E0 E0E0" $"E0E0 E0E0 E0E0 E1E1 E1E1 E1DF E0EA ECEC" $"ECEC ECEC ECEC ECEC ECED EDED EDED EDED" $"EDED EDED EDEE B400 0000 0000 0000 0096" $"FCFB FAF9 F8E8 DEDB DEDE DEDE DEDF DEDF" $"DFDE DFDF DEDF DFDE DFDF DEDF DFDE DEDE" $"DEDE DEDE DDDE DEDD DEDE DDDE DEDD DDE5" $"F1F1 F2F2 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DF E2E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E0EA ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE A600 0000 0000 0000 0083" $"FCFB FAF9 F8E9 DFDB DDDE DDDE DEDE DEDE" $"DEDE DEDE DEDE DEDE DEDE DEDE DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDD DDE4" $"F1F1 F2F2 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DF E2E1 E1E1 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E0EA ECED" $"EDEC EDED ECED EDEC EDED EDEE EEEE EDEE" $"EEED EEEE EDEE 9700 0000 0000 0000 0074" $"FCFB FAF9 F8EA DFDB DDDD DDDD DDDD DDDD" $"DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD" $"DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDE4" $"F1F1 F1F2 F2F8 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEE EEEB E0DE E1E0 E0E0 E0E0" $"E0E0 E0E0 E0E0 E1E1 E1E1 E1DF E0EA ECEC" $"ECEC ECEC ECEC ECEC ECED EDED EDED EDED" $"EDED EDED EDEE 8A00 0000 0000 0000 0063" $"FCFB FAF9 F8EB DFDB DDDD DDDE DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDD DDE4" $"F1F1 F2F2 F2F8 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E1E0 E1E1 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E1EB ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEE 7C00 0000 0000 0000 0050" $"FCFB FAF9 F8ED E0DB DCDD DDDD DDDD DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDE DDDE" $"DEDD DEDE DDDD DDDD DDDD DDDD DDDD DDE3" $"F1F1 F2F2 F2F7 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E1E0 E1E1 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E1EB ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEF 6D00 0000 0000 0000 003E" $"FCFB FAF9 F8EE E0DB DCDC DCDC DCDC DCDD" $"DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDD" $"DDDD DDDD DCDC DCDC DCDC DCDC DCDC DCE3" $"F0F1 F1F1 F1F7 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEE EEEB E0DE E0DF E0E0 E0E0" $"E0E0 E0E0 E0E0 E1E1 E1E1 E1DF E1EB ECEC" $"ECEC ECEC ECEC ECEC EDED EDED EDED EDED" $"EDED EDED EDEF 5F00 0000 0000 0000 002E" $"FCFB FAFA F9EF E1DB DCDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCE3" $"F1F1 F2F2 F1F7 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E0E0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E1EB ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEF 5200 0000 0000 0000 001E" $"FAFB FAFA F9F0 E1DB DCDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCE2" $"F0F1 F2F2 F1F7 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E0E0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E1EC ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDF0 4300 0000 0000 0000 000E" $"F8FB FAF9 F9F1 E2DC DBDC DCDC DCDC DCDC" $"DCDC DCDC DCDC DCDC DCDC DCDC DCDC DCDC" $"DCDC DCDC DCDC DCDC DCDC DCDC DCDC DCE2" $"F0F1 F1F1 F1F7 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEE EEEB E0DE E0DF DFE0 E0E0" $"E0E0 E0E0 E0E0 E1E1 E1E1 E1DE E2EC ECEC" $"ECEC ECEC ECEC ECEC EDED EDED EDED EDED" $"EDED EDED EDF0 3500 0000 0000 0000 0002" $"F5FB FAFA F9F3 E2DC DBDC DBDC DCDC DCDC" $"DCDC DDDD DCDD DDDC DDDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCE2" $"F0F1 F2F2 F1F7 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E0E0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DE E2EC ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEF 2700 0000 0000 0000 0000" $"E4FC FAFA F9F4 E3DC DBDC DBDC DCDC DBDC" $"DCDC DCDC DCDC DDDC DDDD DCDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCE2" $"F0F1 F2F2 F1F6 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEB E0DE E0E0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E2EC ECED" $"EDEC EDED ECED EDEC EDEE EDEE EEEE EDEE" $"EEED EEEE EDEE 1B00 0000 0000 0000 0000" $"D2FC FAFA F9F5 E4DC DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDB DCDC DCDC DCDC DCDC DCDC" $"DCDC DCDC DCDC DCDC DCDC DCDC DCDC DCE1" $"F0F1 F1F1 F1F6 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEE EEEA E0DE DFDF DFDF E0E0" $"E0E0 E0E0 E0E0 E1E1 E1E1 E1DF E3EC ECEC" $"ECEC ECEC ECEC ECEC EDED EDED EDED EDED" $"EDED EDED EDEE 0D00 0000 0000 0000 0000" $"C2FC FBFA F9F6 E4DD DBDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDB DCDC DBDC DCDC DCDC" $"DDDC DDDD DCDD DDDC DDDD DCDD DDDD DCE1" $"EFF1 F2F2 F1F6 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E3EC ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EDEA 0200 0000 0000 0000 0000" $"B0FC FBFA F9F6 E5DD DBDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDC DDDD DCDD DDDC DDDD DCDD DDDD DCE1" $"EFF1 F2F2 F1F6 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E3EC ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EDDF 0000 0000 0000 0000 0000" $"9EFC FBFA F9F7 E6DD DBDB DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDD DDDC DDDD DCDD DDDD DCE1" $"EFF1 F2F2 F1F6 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E1E1 E2E2 E1DF E4EC ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EDD2 0000 0000 0000 0000 0000" $"8CFC FBFA F9F8 E7DE DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDC DCDC DCDC DCDC DCDC DCDC DCE1" $"EFF1 F1F1 F1F6 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEF EEEA E0DE DFDF DFDF E0E0" $"E0E0 E0E0 E0E1 E1E1 E1E1 E1DF E4EC ECEC" $"ECEC ECEC ECEC ECED EDED EDED EDED EDED" $"EDED EDED EEC3 0000 0000 0000 0000 0000" $"7DFC FBFA F9F8 E8DE DBDB DADB DBDB DBDC" $"DCDB DCDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDC DDDC DDDD DCDD DDDD DCE1" $"EFF1 F2F2 F1F5 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E5EC ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EEB5 0000 0000 0000 0000 0000" $"6AFC FBFA F9F8 E9DF DBDB DADB DBDB DBDB" $"DCDB DCDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DDDC DDDD DCDD DDDD DCE0" $"EFF1 F2F2 F1F5 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E5EC ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EEA8 0000 0000 0000 0000 0000" $"57FC FBFA F9F8 EADF DBDA DADA DADA DADB" $"DBDB DBDB DBDB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDC DCDC DCDC DCDC DCDC DCE0" $"EEF1 F1F1 F1F5 FDFD FDFD FDFD FDFD FDFD" $"FDF1 EFEF EFEF EEEA E0DE DFDF DFE0 E0E0" $"E0E0 E0E0 E0E1 E1E1 E1E1 E1DF E5EC ECEC" $"ECEC ECEC ECEC EDED EDED EDED EDED EDED" $"EDED EDED EE99 0000 0000 0000 0000 0000" $"47FD FBFA F9F9 EBE0 DBDB DADB DBDB DADB" $"DBDB DCDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDC DDDD DCDD DDDD DCE0" $"EEF1 F2F2 F1F5 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFEA E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E6ED ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EF8A 0000 0000 0000 0000 0000" $"35FD FBFA F9F9 EDE0 DBDB DADB DBDB DADB" $"DBDA DBDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDC DDDD DCDD DDDD DCE0" $"EEF1 F2F2 F1F5 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFE9 E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E0E1 E2E1 E2E2 E1DF E6ED ECED" $"EDEC EDED ECED EDED EEEE EDEE EEEE EDEE" $"EEED EEEE EF7D 0000 0000 0000 0000 0000" $"24FD FBFA F9F9 EEE0 DBDA DADA DADA DADA" $"DADA DADB DBDB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDB DCDC DCDC DCDC DCDC DCE0" $"EEF1 F1F1 F1F5 FDFD FDFD FDFD FDFD FDFD" $"FDF1 F0EF EFEF EEE9 E0DE DFDF DFE0 E0E0" $"E0E0 E0E0 E0E1 E1E1 E1E1 E0DF E6EC ECEC" $"ECEC ECEC ECED EDED EDED EDED EDED EDED" $"EDED EDEE EF6F 0000 0000 0000 0000 0000" $"12FD FCFA F9F9 EFE1 DCDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDC DDDD DCDD DDDD DCE0" $"EEF1 F2F2 F1F5 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFE9 E0DE DFE0 E0E0 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E0DF E7ED ECED" $"EDEC EDED ECED EEED EEEE EDEE EEEE EDEE" $"EEED EEEE EF61 0000 0000 0000 0000 0000" $"05F9 FCFB FAF9 F1E1 DCDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DCDC DDDD DCDD DDDD DCE0" $"EDF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFE9 E0DE DFE0 E0E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E0DF E7ED ECED" $"EDEC EDED ECED EEED EEEE EDEE EEEE EDEE" $"EEED EEEE F051 0000 0000 0000 0000 0000" $"03E9 FCFA FAF9 F2E2 DCDA DADA DADA DADA" $"DADA DADA DADB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDB DCDC DCDC DCDC DCDC DCDF" $"EDF1 F1F1 F1F4 FDFD FDFD FDFD FDFD FDFD" $"FDF1 F0EF EFEF EEE9 E0DE DFDF E0E0 E0E0" $"E0E0 E0E0 E1E1 E1E1 E1E1 E0DF E7EC ECEC" $"ECEC ECEC ECED EDED EDED EDED EDED EDED" $"EDED EEEE F043 0000 0000 0000 0000 0000" $"01D9 FCFB FAF9 F3E3 DCDB DADB DBDB DADB" $"DBDA DBDB DADB DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DDDC DDDD DCDD DDDD DCDF" $"EDF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFE9 E0DE DFE0 E0E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E0E0 E8ED ECED" $"EDEC EDED ECED EEED EEEE EDEE EEEE EDEE" $"EEED EEEF F036 0000 0000 0000 0000 0000" $"00C9 FCFB FAF9 F4E3 DDDB DADB DBDB DADB" $"DBDA DBDB DADB DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DBDC DDDC DDDD DCDD DDDD DCDF" $"EDF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFEF EFE9 E0DE DFE0 E0E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E0E0 E8ED ECED" $"EDEC EDED EDEE EEED EEEE EDEE EEEE EDEE" $"EEED EEEF F127 0000 0000 0000 0000 0000" $"00B8 FCFB FAF9 F5E4 DDDA DADA DADA DADA" $"DADA DADA DADB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDB DBDC DCDC DCDC DCDC DCDC DCDF" $"EDF1 F1F1 F1F4 FDFD FDFD FDFD FDFD FDFD" $"FDF1 F0EF EFEF EFE9 E0DE DFE0 E0E0 E0E0" $"E0E0 E0E1 E1E1 E1E1 E1E1 E0E0 E9EC ECEC" $"ECEC ECEC EDED EDED EDED EDED EDED EDED" $"EDEE EEEE F219 0000 0000 0000 0000 0000" $"00A7 FCFB FAF9 F6E5 DDDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDC DDDC DDDD DCDD DDDD DCDF" $"ECF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFF0 EFE9 E0DE DFE0 E1E1 E0E1" $"E1E0 E1E1 E1E2 E2E1 E2E2 E0E0 E9ED ECED" $"EDEC EDED EDEE EEED EEEE EDEE EEEE EDEE" $"EEEE EFEF F20A 0000 0000 0000 0000 0000" $"0095 FCFB FAF9 F6E5 DEDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDD DDDC DDDD DCDD DDDD DCDF" $"ECF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFF0 EFE9 E0DE DFE0 E1E1 E0E1" $"E1E0 E1E2 E1E2 E2E1 E2E2 E0E0 E9ED ECED" $"EDEC EDED EDEE EEED EEEE EDEE EEEE EDEE" $"EEEE EFEF EB03 0000 0000 0000 0000 0000" $"0085 FCFB FAF9 F7E6 DEDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDD DDDC DDDD DCDD DDDD DCDF" $"ECF1 F2F2 F1F4 FEFD FEFE FDFE FEFE FDFE" $"FDF1 F0F0 EFF0 EFE9 E0DE DFE0 E0E1 E0E1" $"E1E1 E1E2 E2E2 E3E3 E4E4 E3E4 EBED ECED" $"EDEC EDED EDEE EEED EEEE EDEE EEEE EDEE" $"EEEE EFEF DE02 0000 0000 0000 0000 0000" $"0072 FCFB FAF9 F8E7 DEDB DADA DADA DADA" $"DADA DADB DBDB DBDB DBDB DBDB DBDB DBDB" $"DBDB DBDC DCDC DCDC DCDC DCDC DCDC DCDF" $"EBF1 F1F1 F1F4 FDFD FDFD FDFD FDFD FDFD" $"FDF1 F0F0 F0F0 EFE9 E1DF E1E2 E3E3 E4E5" $"E5E6 E7E8 E9EA ECED EEEF F0F1 F1EF EEED" $"EDEC ECED EDED EDED EDED EDED EDED EDED" $"EEEE EEEE D101 0000 0000 0000 0000 0000" $"0060 FDFB FAFA F8E8 DFDB DADB DBDB DADB" $"DBDA DBDB DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDB DCDC DCDD DDDC DDDD DCDD DDDD DCDF" $"EBF1 F2F2 F1F3 FDFD FEFE FDFE FEFE FDFE" $"FDF3 F2F2 F2F3 F3EF EAEB EDEE F0F1 F2F3" $"F4F5 F6F6 F7F7 F7F7 F7F7 F7F8 F7F6 F4F2" $"F0EF EEED EDED EDED EEEE EDEE EEEE EDEE" $"EEEE EFEF C400 0000 0000 0000 0000 0000" $"004F FDFB FAFA F9EA DFDB DADB DBDB DADB" $"DBDA DBDC DBDC DCDB DCDC DBDC DCDC DBDC" $"DCDC DCDC DCDC DDDD DDDD DEDE DFDF DFE2" $"EEF1 F1F2 F1F2 F9FD FEFE FDFE FEFE FDFE" $"FDF9 F9FA FAFA FAF9 F7F7 F7F8 F8F8 F7F8" $"F8F7 F8F8 F7F8 F8F7 F8F8 F7F8 F8F8 F7F8" $"F7F5 F3F1 EFEE EEED EDEE EDEE EEEE EDEE" $"EFEE EFEF B700 0000 0000 0000 0000 0000" $"003E FDFB FAFA F9EB E0DB DADA DADA DADA" $"DADB DBDB DBDB DCDC DCDC DCDD DDDD DEDE" $"DFDF E0E0 E1E2 E2E3 E4E5 E7E8 E9EB ECEF" $"F2F1 F1F1 F1F2 F3F5 FAFD FDFD FDFD FDFD" $"FDFB FBFB FAFA FAF9 F7F7 F7F7 F7F7 F7F7" $"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F8" $"F8F8 F8F8 F7F5 F2F0 EFEE EEEE EDED EDEE" $"EEEE EEEF A800 0000 0000 0000 0000 0000" $"002C FDFC FAFA F9EC E0DC DBDB DCDC DCDD" $"DDDD DEDF DFE0 E0E1 E2E3 E4E5 E6E7 E9EA" $"EBED EEEF F1F2 F3F4 F4F5 F5F6 F6F6 F6F6" $"F5F3 F2F1 F1F1 F2F2 F3F5 FAFD FEFE FDFE" $"FDFC FCFB FBFB FBF9 F8F8 F7F8 F8F8 F7F8" $"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8" $"F9F8 F9F9 F8F9 F8F8 F6F4 F2F0 EFEE EEEE" $"EEEE EEEF 9B00 0000 0000 0000 0000 0000" $"000C E7FC FBFA F9F0 E5E1 E1E2 E3E4 E5E7" $"E8E9 EBEC EEEF F0F1 F2F3 F4F5 F5F6 F6F6" $"F6F6 F6F6 F6F6 F7F6 F7F7 F6F7 F7F7 F6F7" $"F7F6 F5F3 F2F1 F1F1 F2F3 F2F4 F9FD FDFE" $"FDFC FCFC FBFC FBFA F8F8 F8F8 F8F8 F8F8" $"F8F8 F9F9 F8F9 F9F9 F9F9 FAFA FAF9 F8F9" $"F9F8 F9F9 F8F9 F9F8 F9F9 F8F7 F5F3 F1F0" $"EFEE EEEF 8400 0000 0000 0000 0000 0000" $"0000 68FD FCFC FCF7 F2F1 F2F3 F4F5 F5F5" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F5F3 F2F1 F1F2 F2F2 F2F3 F8FD" $"FDFC FBFB FBFB FBFA F8F8 F8F8 F9F9 F9FA" $"FAFB FBFC FCFC FDFD FDFD FDFD FDFD FCFA" $"F9F8 F8F8 F8F8 F8F8 F9F9 F9F9 F9F9 F8F7" $"F5F4 F3E6 3100 0000 0000 0000 0000 0000" $"0000 05C6 FDFD FDFB F8F6 F6F7 F7F7 F6F7" $"F7F6 F7F7 F6F7 F7F6 F7F7 F6F7 F7F7 F6F7" $"F7F6 F7F7 F6F7 F7F6 F7F7 F6F7 F7F7 F6F7" $"F7F6 F7F7 F6F6 F5F3 F2F2 F1F2 F2F3 F3F3" $"F6EA FCFC FCFC FDFC FCFC FDFD FDFD FDFE" $"FEFD FEFE FDFE FEFD FEFE FDFE FEFE FDFE" $"FDFC FAFA F9FA FAFA FAFA FAF9 F5E0 CBB1" $"9A84 681F 0000 0000 0000 0000 0000 0000" $"0000 0037 F8FE FDFB F8F7 F6F7 F7F7 F6F7" $"F7F6 F7F7 F6F7 F7F6 F7F7 F6F7 F7F7 F6F7" $"F7F6 F7F7 F6F7 F7F6 F7F7 F7F7 F7F7 F8F7" $"F7F7 F7F7 F7F8 F8F7 F7F7 F8F9 FAFB FCFD" $"FDFA FBFD FDFE FEFD FEFE FDFE FEFE FDFE" $"FEFD FEFE FDFE FEFD FEFE FDFE FEFE FDFE" $"FEFD FDFD FCE9 9771 5A43 2C15 0300 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 97FD FDFB F8F7 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F7 F7F7" $"F7F7 F8F8 F9FA FAFB FBFC FCFD FDFD FDFD" $"F9F7 F7F7 F7F7 F7FC FDFD FDFD FDFD FDFD" $"FDF8 F8F8 F9FC FDFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFC FBFB FAFB FBFB" $"FBFB FAFA FBFB ECA8 520F 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 15E7 FDFC F8F7 F6F7 F7F7 F6F7" $"F7F6 F7F7 F7F7 F8F8 F9F9 FAFB FBFC FCFD" $"FDFD FEFE FDFE FEFD FEFE FDFE FEFE FDFE" $"FEFC F8F8 F7F8 F8FD FEFE FDFE FEFE FDFE" $"FCF8 F8F8 F7F8 F9FB FDFE FDFD FDFD FCFC" $"FBFA FAF9 F9F8 F8F8 F8F8 F7F7 F7F9 FAFA" $"FAFA FAFA FAFA FAFA FBEC A853 1000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0063 FDFC F9F8 F8F8 F9F9 FAFB" $"FBFC FCFD FDFD FEFD FEFE FDFE FEFE FDFE" $"FEFD FEFE FDFE FEFD FEFE FDFE FEFE FDFE" $"FEFD FDFB F8F8 F9FD FEFE FDFE FEFE FDFD" $"F8F7 F7F7 F7F7 F7F7 F7F8 F8F7 F7F7 F7F7" $"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F9 F9FA" $"FAF9 FAFA F9FA FAF9 FAFA FAFB ECA8 540E" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0567 A1B8 FDFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" $"FDFD FDFD FDFA E3FB FBFA F8F7 F5F4 F4F4" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F8 F9F9" $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA FAEE" $"A856 0D00 0000 0000 0000 0000 0000 0000" $"0000 90F9 F8F8 F9FD FEFE FDFE FEFE FDFE" $"FEFD FEFE FDFE FEFD FEFE FDFE FEFE FDFE" $"FEFD FEFE FDFE FEFD FEFD FDFD FCFC FBFB" $"FCFC FCFC FCFC B6F3 F4F4 F3F2 F2F1 F0F1" $"F2F4 F5F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F8 F9F9" $"F9F9 F9FA F9FA FAF9 FAFA F9FA FAFA F9FA" $"FAFA F1AA 5402 0000 0000 0000 0000 0000" $"0004 DDF8 F7F7 F7FB FEFE FDFE FEFE FDFE" $"FEFD FEFE FDFE FEFD FEFE FDFE FEFE FDFD" $"FDFC FCFB FAFA F9F8 F8F7 F7F6 F6F6 F6F7" $"FAFB FCFC FBFC FCFD F8F4 F3F3 F3F2 F1F0" $"F0F0 F1F4 F5F6 F6F5 F6F6 F5F6 F6F6 F5F6" $"F6F5 F6F6 F5F6 F6F5 F6F6 F5F5 F5F8 F8F9" $"F9F8 F9F9 F8F9 F9F9 F9F8 F8F7 F7F6 F5F4" $"F3F2 F2F2 F494 0000 0000 0000 0000 0000" $"0002 D6F8 F6F6 F7F7 FDFE FDFE FEFE FDFE" $"FEFD FEFE FDFD FCFC FBFA F9F9 F8F7 F7F6" $"F6F5 F6F6 F5F6 F6F5 F6F6 F5F6 F6F6 F5F6" $"FAFB FBFB FBFB FCFD FEFC F6F3 F3F2 F1F1" $"F0EF EFF0 F1F3 F5F5 F5F5 F5F5 F5F5 F5F5" $"F5F5 F5F5 F5F5 F5F5 F6F6 F5F5 F5F8 F8F8" $"F8F7 F6F6 F5F4 F3F3 F2F1 F1F0 F0F0 EFEF" $"EFEF EFEF EFEC 0800 0000 0000 0000 0000" $"0000 C9F9 F6F6 F6F6 F7FB FDFC FCFB FAFA" $"F9F8 F7F7 F6F6 F6F5 F5F5 F5F5 F5F5 F5F5" $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F6" $"F9FA FAFA FAFA FBFD FDFD FDFA F4F2 F1F1" $"F1F0 EFEF EFEF F1F3 F4F4 F4F4 F4F4 F4F4" $"F4F4 F4F4 F4F4 F4F3 F2F1 F0ED EDF2 F2F1" $"F1F0 F0EF EFEF EEEE EEEE EEEE EEEE EEEE" $"EEEE EEEE EEED 0500 0000 0000 0000 0000" $"0000 B5FB F7F6 F5F5 F6F6 F6F6 F6F6 F5F6" $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" $"F9FA FBFB FAFB FBFD FEFE FDFE FDF7 F2F2" $"F1F0 F0F0 EFEE EEEF F1F3 F4F4 F4F3 F2F1" $"F0EF EEEC EBEA E9E8 E7E7 E6E3 E4ED EEEE" $"EDED EDEE EDEE EEED EEEE EEEE EEEF EEEF" $"EFEE EFEF EEE4 0000 0000 0000 0000 0000" $"0000 A4FC F8F6 F5F5 F5F5 F5F5 F5F5 F5F5" $"F5F4 F5F5 F4F5 F5F4 F5F5 F4F5 F5F5 F4F5" $"F5F4 F5F5 F4F5 F5F4 F5F5 F4F5 F5F5 F4F5" $"F9FA FBFB FAFB FBFD FEFE FDFE FEFE FBF4" $"F1F0 F1F1 F0EF EEEE EEEE EAEA E9E8 E7E6" $"E5E5 E5E4 E4E4 E4E4 E3E3 E3E0 E2EC EDED" $"EDED EEEE EDEE EEED EEEE EEEF EFEF EEEF" $"EFEE EFEF EED6 0000 0000 0000 0000 0000" $"0000 94FC F9F6 F5F4 F4F4 F4F4 F4F4 F4F4" $"F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4" $"F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F3F4" $"F8FA FAF9 F9F8 F8FD FDFD FDFD FDFD FDFD" $"F4F1 F0F0 F0EF EFEE EDE6 E5E7 E4E4 E4E4" $"E3E3 E3E2 E2E2 E2E2 E2E3 E3E0 E3EC EDED" $"EDED EDED EDED EDED EDEE EEEE EEEE EEEE" $"EEEE EEEE EEC7 0000 0000 0000 0000 0000" $"0000 81FC FAF7 F5F4 F4F4 F4F4 F4F4 F4F4" $"F4F4 F4F4 F3F4 F4F3 F4F4 F3F4 F4F4 F3F4" $"F4F3 F4F4 F3F3 F3F2 F2F1 F0EE EDEB E9E9" $"F1F5 F5F4 F4F4 F4FD FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 E1E5 E2E2 E1E2" $"E2E2 E2E3 E2E3 E3E2 E3E4 E3E0 E3ED EDEE" $"EEED EEEE EDEE EEED EEEF EEEF EFEF EEEF" $"EFEE EFEF EFB9 0000 0000 0000 0000 0000" $"0000 70FC FBF9 F5F4 F4F4 F3F4 F4F4 F3F4" $"F4F3 F4F4 F3F4 F4F3 F4F4 F3F3 F3F3 F2F1" $"F0EF EDEC EAE8 E7E6 E4E4 E3E2 E1E1 E0E2" $"EDF3 F3F3 F3F3 F3FD FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 DFE1 E2E2 E1E2" $"E2E2 E3E3 E2E3 E3E2 E3E4 E3E0 E3ED EDEE" $"EEED EEEE EDEE EEED EEEF EEEF EFEF EEEF" $"EFEE EFEF EFAA 0000 0000 0000 0000 0000" $"0000 5DFC FBFA F6F4 F3F3 F3F3 F3F3 F3F3" $"F3F3 F3F3 F2F1 F0EF EEEC EBE9 E7E6 E4E4" $"E3E2 E1E1 E0E0 E0DF DFDF DEDE DEDE DDDF" $"ECF2 F2F2 F2F2 F3FD FDFD FDFD FDFD FDFD" $"F8F1 F0F0 F0EF EFEF EDE3 DFE0 E1E1 E1E2" $"E2E2 E2E2 E2E2 E2E3 E3E3 E3E0 E4ED EDED" $"EDED EDED EDED EDEE EEEE EEEE EEEE EEEE" $"EEEE EEEE EF9C 0000 0000 0000 0000 0000" $"0000 4CFC FBFA F8F5 F3F3 F2F1 F1EF EEED" $"EBE9 E8E6 E5E4 E3E2 E1E0 E0E0 E0E1 E2E2" $"E1E0 E0DF DEDE DDDD DDDD DDDE DEDE DEE0" $"ECF2 F3F3 F2F3 F3FD FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 E0E1 E2E2 E1E2" $"E3E2 E3E3 E2E3 E3E3 E4E4 E3E1 E4ED EDEE" $"EEED EEEE EDEE EEEE EFEF EEEF EFEF EEEF" $"EFEE EFEF EF8D 0000 0000 0000 0000 0000" $"0000 3AFC FBFA F9F6 F3EC E6E4 E3E2 E1E0" $"E0DF E0E1 E3E5 E6E6 E5E5 E4E2 E1DF DDDD" $"DDDD DDDD DDDE DEDD DEDE DEDE DFDF DEE0" $"ECF2 F3F3 F2F3 F3FD FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 E0E1 E2E2 E2E2" $"E3E2 E3E3 E2E3 E3E3 E4E4 E3E1 E4ED EDEE" $"EEED EEEE EDEE EEEE EFEF EEEF EFEF EEEF" $"EFEE EFEF F07F 0000 0000 0000 0000 0000" $"0000 28FC FBFA F9F7 EEE1 DFE2 E4E6 E6E6" $"E6E6 E5E3 E0DE DCDC DCDC DCDC DCDD DDDD" $"DDDD DDDD DDDD DDDD DDDD DEDE DEDE DEE0" $"EBF2 F2F2 F2F2 F3FD FDFD FDFD FDFD FDFD" $"F8F1 F0F0 F0F0 EFEF EDE3 E0E1 E1E1 E2E2" $"E2E2 E2E2 E2E2 E3E3 E3E3 E3E1 E5ED EDED" $"EDED EDED EDED EEEE EEEE EEEE EEEE EEEE" $"EEEE EEEF F070 0000 0000 0000 0000 0000" $"0000 1AFB FBFA F9F8 EADF DDDF DEDC DCDC" $"DCDC DCDD DCDD DDDC DDDD DCDD DDDD DDDE" $"DEDD DEDE DDDE DEDD DEDE DEDF DFDF DEE0" $"EBF2 F3F3 F2F3 F4FD FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 E0E1 E2E2 E2E3" $"E3E2 E3E3 E2E3 E4E3 E4E4 E3E1 E5ED EDEE" $"EEED EEEE EDEE EFEE EFEF EEEF EFEF EEEF" $"EFEE EFEF F061 0000 0000 0000 0000 0000" $"0000 11F1 FBFA F9F8 EBE1 DDDC DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DCDD DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDF DEDF DFDF DEE0" $"EBF2 F3F3 F2F3 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF EDE3 E0E1 E2E2 E2E3" $"E3E2 E3E3 E2E3 E4E3 E4E4 E3E1 E6ED EDEE" $"EEED EEEE EDEE EFEE EFEF EEEF EFEF EEEF" $"EFEE EFF0 F052 0000 0000 0000 0000 0000" $"0000 09E7 FBFA F9F8 ECE1 DDDC DCDC DCDC" $"DCDC DCDC DCDC DCDC DCDD DDDD DDDD DDDD" $"DDDD DDDD DDDD DDDE DEDE DEDE DEDE DEE0" $"EBF2 F2F2 F2F3 F3FC FDFD FDFD FDFD FDFD" $"F8F1 F1F0 F0F0 EFEF EDE3 E0E1 E2E2 E2E2" $"E2E2 E2E2 E3E3 E3E3 E3E3 E3E1 E6ED EDED" $"EDED EDED EDEE EEEE EEEE EEEE EEEE EEEE" $"EEEF EFEF F143 0000 0000 0000 0000 0000" $"0000 02DE FBFA FAF8 EDE2 DDDD DDDD DCDD" $"DDDC DDDD DCDD DDDC DDDD DDDE DEDE DDDE" $"DEDD DEDE DDDE DEDE DFDF DEDF DFDF DEE0" $"EBF2 F3F3 F2F3 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF ECE3 E0E1 E2E3 E2E3" $"E3E2 E3E3 E3E4 E4E3 E4E4 E3E1 E6ED EDEE" $"EEED EEEE EEEF EFEE EFEF EEEF EFEF EEEF" $"EFEF F0F0 F134 0000 0000 0000 0000 0000" $"0000 00CD FCFB FAF9 EEE2 DDDD DDDD DCDD" $"DDDC DDDD DCDD DDDD DDDE DDDE DEDE DDDE" $"DEDD DEDE DDDE DFDE DFDF DEDF DFDF DEE0" $"EAF2 F3F3 F2F3 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F0 F0EF ECE3 E0E1 E3E3 E2E3" $"E3E2 E3E3 E3E4 E4E3 E4E4 E3E1 E7EE EDEE" $"EEED EEEE EEEF EFEE EFEF EEEF EFEF EEEF" $"EFEF F0F0 F226 0000 0000 0000 0000 0000" $"0000 00BD FCFB FAF9 F0E3 DDDD DDDD DCDD" $"DDDC DDDD DCDD DDDD DEDE DDDE DEDE DDDE" $"DEDD DEDE DEDF DFDE DFDF DEDF DFDF DEE0" $"EAF2 F3F3 F2F3 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F1F1 F0F1 F0EF ECE3 E0E1 E3E3 E2E3" $"E3E2 E3E3 E3E4 E4E3 E4E4 E3E1 E7EE EDEE" $"EEED EEEE EEEF EFEE EFEF EEEF EFEF EEEF" $"EFEF F0F0 F316 0000 0000 0000 0000 0000" $"0000 00AB FCFB FAF9 F1E3 DDDC DCDC DCDC" $"DCDC DCDD DDDD DDDD DDDD DDDD DDDD DDDD" $"DDDD DDDE DEDE DEDE DEDE DEDE DEDE DEE0" $"EAF2 F2F2 F2F3 F3FC FDFD FDFD FDFD FDFD" $"F8F1 F1F0 F0F0 F0EF ECE3 E0E1 E2E2 E2E2" $"E2E2 E3E3 E3E3 E3E3 E3E4 E3E1 E8ED EDED" $"EDED EEEE EEEE EEEE EEEE EEEE EEEE EEEF" $"EFEF EFEF F109 0000 0000 0000 0000 0000" $"0000 009A FCFB FAF9 F2E4 DEDD DDDD DCDD" $"DDDC DDDD DDDE DEDD DEDE DDDE DEDE DDDE" $"DEDD DEDF DEDF DFDE DFDF DEDF DFDF DFE0" $"EAF2 F3F3 F3F4 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F2F1 F0F1 F0EF ECE3 E0E2 E3E3 E2E3" $"E3E3 E4E4 E3E4 E4E3 E4E4 E3E1 E8EE EDEE" $"EEED EEEF EEEF EFEE EFEF EEEF EFEF EFEF" $"F0EF F0F0 E703 0000 0000 0000 0000 0000" $"0000 0088 FCFB FAF9 F3E4 DEDD DDDD DCDD" $"DDDD DEDE DDDE DEDD DEDE DDDE DEDE DDDE" $"DEDE DFDF DEDF DFDE DFDF DEDF DFDF DFE0" $"EAF2 F3F3 F3F4 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F2F1 F0F1 F0EF ECE3 E0E2 E3E3 E2E3" $"E3E3 E4E4 E3E4 E4E3 E4E5 E3E2 E9EE EDEE" $"EEEE EEEF EEEF EFEE EFEF EEEF EFEF EFF0" $"F0EF F0F0 DA02 0000 0000 0000 0000 0000" $"0000 0076 FCFB FAF9 F4E5 DEDD DCDC DDDD" $"DDDD DDDD DDDD DDDD DDDD DDDD DDDD DDDE" $"DEDE DEDE DEDE DEDE DEDE DEDF DFDF DFE0" $"E9F2 F2F2 F3F3 F3FB FDFD FDFD FDFD FDFD" $"F8F1 F1F1 F0F0 F0EF ECE3 E0E2 E2E2 E2E2" $"E3E3 E3E3 E3E3 E3E3 E4E4 E3E2 E9ED EDED" $"EDEE EEEE EEEE EEEE EEEE EEEE EEEF EFEF" $"EFEF EFEF CD01 0000 0000 0000 0000 0000" $"0000 0065 FCFB FAF9 F5E5 DFDD DDDD DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDE DEDE" $"DFDE DFDF DEDF DFDE DFDF DFDF E0E0 DFE0" $"E9F2 F3F3 F3F4 F4FC FEFE FDFE FEFE FDFE" $"F8F1 F2F1 F0F1 F1F0 ECE3 E0E2 E3E3 E2E3" $"E4E3 E4E4 E3E4 E4E4 E5E5 E3E2 E9EE EDEE" $"EEEE EFEF EEEF EFEE EFEF EEEF EFEF EFF0" $"F0EF F0F0 C000 0000 0000 0000 0000 0000" $"0000 0053 FCFB FAF9 F6E6 DFDD DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DDDE DEDE DEDF" $"DFDE DFDF DEDF DFDE DFDF DFE0 E0E0 DFE0" $"E9F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F1 F2F1 F0F1 F1F0 ECE3 E0E2 E3E3 E3E3" $"E4E3 E4E4 E3E4 E4E4 E5E5 E3E2 EAEE EDEE" $"EEEE EFEF EEEF EFEE EFEF EEEF EFF0 EFF0" $"F0EF F0F0 B100 0000 0000 0000 0000 0000" $"0000 0042 FDFB FAF9 F6E7 E0DD DDDD DDDD" $"DDDD DDDD DDDD DDDD DDDD DDDE DEDE DEDE" $"DEDE DEDE DEDE DEDE DFDF DFDF DFDF DFE0" $"E8F2 F2F2 F3F3 F3FB FDFD FDFD FDFD FDFD" $"F8F1 F1F1 F0F0 F0F0 ECE3 E0E2 E2E2 E3E3" $"E3E3 E3E3 E3E4 E4E4 E4E4 E3E2 EAED EDEE" $"EEEE EEEE EEEE EEEE EEEE EEEF EFEF EFEF" $"EFEF EFF0 A400 0000 0000 0000 0000 0000" $"0000 002F FDFB FAF9 F7E8 E0DE DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DEDF DFDF DEDF" $"DFDE DFDF DEDF DFDF DFE0 DFE0 E0E0 DFE0" $"E8F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F1 F2F2 F1F1 F1F0 ECE3 E1E2 E3E3 E3E4" $"E4E3 E4E4 E3E4 E5E4 E5E5 E3E3 EAEE EDEE" $"EFEE EFEF EEEF EFEE EFEF EEEF F0F0 EFF0" $"F0EF F0F0 9400 0000 0000 0000 0000 0000" $"0000 0021 FAFB FBF9 F8E9 E1DE DEDE DDDE" $"DEDD DEDE DDDE DEDD DEDE DEDF DFDF DEDF" $"DFDE DFDF DEDF DFDF E0E0 DFE0 E0E0 DFE0" $"E8F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F2 F2F2 F1F1 F1F0 ECE3 E1E2 E3E3 E3E4" $"E4E3 E4E4 E4E4 E5E4 E5E5 E3E3 EBEE EDEE" $"EFEE EFEF EEEF EFEE EFEF EFEF F0F0 EFF0" $"F0EF F0F0 8500 0000 0000 0000 0000 0000" $"0000 0015 F3FC FAF9 F8EA E1DE DDDD DDDD" $"DDDD DDDD DDDD DEDE DEDE DEDE DEDE DEDE" $"DEDE DEDE DEDF DFDF DFDF DFDF DFDF DFE0" $"E8F2 F2F3 F3F3 F3FB FDFD FDFD FDFD FDFD" $"F8F2 F1F1 F1F0 F0F0 ECE3 E1E2 E3E3 E3E3" $"E3E3 E3E3 E4E4 E4E4 E4E4 E3E3 EBED EEEE" $"EEEE EEEE EEEE EEEE EEEE EFEF EFEF EFEF" $"EFEF EFF0 7600 0000 0000 0000 0000 0000" $"0000 000A ECFC FBFA F9EB E2DE DEDE DDDE" $"DEDD DEDE DEDE DEDE DFDF DEDF DFDF DEDF" $"DFDE DFDF DFE0 E0DF E0E0 DFE0 E0E0 DFE0" $"E8F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F2 F2F2 F1F1 F1F0 ECE3 E1E3 E4E4 E3E4" $"E4E3 E4E4 E4E5 E5E4 E4E4 E2E3 EBEE EEEF" $"EFEE EFEF EEEF EFEE EFEF EFF0 F0F0 EFF0" $"F0EF F0F0 6800 0000 0000 0000 0000 0000" $"0000 0001 E5FC FBFA F9EC E2DE DEDE DDDE" $"DEDD DEDE DEDF DFDE DFDF DEDF DFDF DEDF" $"DFDE DFDF DFE0 E0DF E0E0 DFE0 E0E0 E0E0" $"E8F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F2 F2F2 F1F1 F1F0 ECE3 E1E3 E4E4 E3E4" $"E4E3 E3E4 E4E3 E3E3 E3E4 E3E4 EBED EEEF" $"EFEE EFEF EEEF EFEE EFEF EFF0 F0F0 EFF0" $"F0EF F0F0 5800 0000 0000 0000 0000 0000" $"0000 0000 D6FC FBFA F9ED E2DE DDDD DDDD" $"DEDE DEDE DEDE DEDE DEDE DEDE DEDE DEDE" $"DEDF DFDF DFDF DFDF DFDF DFDF E0E0 E0E0" $"E7F2 F2F3 F3F3 F3FB FDFD FDFD FDFD FDFD" $"F8F2 F1F1 F1F1 F0F0 ECE3 E1E3 E3E3 E3E2" $"E2E3 E3E3 E4E4 E5E7 E9EB ECED ECEC ECEE" $"EEEE EEEE EEEE EEEE EFEF EFEF EFEF EFEF" $"EFEF EFF1 4900 0000 0000 0000 0000 0000" $"0000 0000 C3FC FBFA F9EE E3DE DEDE DEDE" $"DEDE DFDF DEDF DFDE DFDF DEDF DFDF DEDF" $"DFDF E0E0 DFE0 E0DF E0E0 DFE0 E0E1 E0E0" $"E7F2 F3F3 F3F4 F4FB FEFE FDFE FEFE FDFE" $"F8F2 F2F2 F1F1 F0F0 EBE2 E0E1 E2E2 E3E4" $"E5E6 E8EA ECEE EFF1 F1F1 F1F1 F0ED ECEC" $"EEEE EFEF EEEF EFEF EFF0 EFF0 F0F0 EFF0" $"F0EF F0F2 3B00 0000 0000 0000 0000 0000" $"0000 0000 B2FC FBFA F9EF E3DF DEDE DEDF" $"DFDE DFDF DEDF DFDE DFDF DEDF DFDF DFDF" $"E0DF E0E0 DFE0 E0DF E0E0 E0E0 E1E1 E0E0" $"E7F2 F3F3 F3F4 F4FA FEFE FDFE FEFE FDFE" $"F8F2 F1F1 F1F0 F0F0 EBE3 E2E5 E7E9 ECED" $"EFF0 F0F1 F1F1 F2F1 F2F2 F1F2 F2F1 EEEC" $"ECED EEEF EEEF EFEF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F2 2D00 0000 0000 0000 0000 0000" $"0000 0000 A1FC FBFA F9F1 E4DF DEDF DEDF" $"DFDE DFDF DEDF DFDE DFDF DEDF DFDF DFE0" $"E0DF E0E0 DFE0 E0DF E0E0 E0E1 E1E1 E0E0" $"E7F2 F3F3 F3F4 F4FA FEFE FDFE FEFE FDFE" $"F8F2 F2F2 F2F2 F3F3 F1ED EDF0 F0F1 F0F1" $"F1F0 F1F1 F1F2 F2F1 F2F2 F1F2 F2F2 F1F0" $"EDEC ECEE EEEF EFEF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F3 1D00 0000 0000 0000 0000 0000" $"0000 0000 8EFC FBFA F9F2 E4DF DEDE DEDE" $"DEDE DEDE DEDE DEDE DEDE DEDF DFDF DFDF" $"DFDF DFDF DFDF DFDF E0E0 E0E0 E0E0 E0DF" $"E6F2 F3F3 F3F3 F3FA FDFD FDFD FDFD FDFD" $"F9F5 F5F6 F6F7 F7F7 F5F0 EFF0 F0F0 F0F0" $"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F1" $"F1EE ECEC EDEE EFEF EFEF EFEF EFEF EFEF" $"EFEF F0F1 1000 0000 0000 0000 0000 0000" $"0000 0000 7DFD FBFA FAF3 E5DF DFDF DEDF" $"DFDE DFDF DEDF DFDE DFDF DFE0 E0E0 DFE0" $"E0DF E0E0 DFE0 DFDF E0DF DFDF DFDF E0E0" $"E8F1 F3F4 F3F4 F4F8 FEFE FDFE FEFE FDFE" $"FBF8 F8F8 F7F8 F8F7 F5F1 F0F1 F1F1 F1F1" $"F1F1 F2F2 F1F2 F2F1 F2F2 F1F2 F2F2 F1F2" $"F2F1 F0ED ECED EEEF F0F0 EFF0 F0F0 EFF0" $"F0F0 F1E8 0B00 0000 0000 0000 0000 0000" $"0000 0000 6CFD FCFA FAF4 E6E0 DFDF DEDF" $"DFDE DFDF DEDF DFDF DFE0 DFE0 E0E0 DFDF" $"DFDF DFDE DEDE DEDF DFE0 E1E2 E3E5 E7E9" $"EDEE F2F4 F3F4 F4F4 FAFE FDFE FEFE FDFE" $"FBF8 F9F8 F7F8 F8F7 F5F1 F0F1 F1F1 F1F2" $"F2F1 F2F2 F1F2 F2F1 F2F2 F1F2 F2F2 F1F2" $"F2F2 F3F1 EFED EDEE EFF0 EFF0 F0F0 EFF0" $"F0F0 F1DD 0700 0000 0000 0000 0000 0000" $"0000 0000 59FD FCFA FAF5 E6E0 DEDE DEDE" $"DEDE DEDE DEDF DFDF DFDF DFDF DFDE DEDE" $"DEDE DFDF E0E1 E3E4 E7E9 EBED EEEF EFEF" $"EEED EFF2 F3F3 F3F3 F4FA FDFD FDFD FDFD" $"FBF8 F8F8 F7F7 F7F7 F5F1 F0F1 F1F1 F1F1" $"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F2" $"F2F2 F2F2 F2F0 EDEC EDEF EFEF EFEF EFEF" $"F0F0 F0D2 0300 0000 0000 0000 0000 0000" $"0000 0000 47FD FCFB FAF6 E7E0 DFDF DEDF" $"DFDE DFDF DFDF DEDE DEDE DEDE DEDF E0E1" $"E2E4 E6E9 EBED EEEF F0F0 EFF0 F0F0 EFF0" $"EFEE EEEF F3F4 F4F3 F4F4 FBFE FEFE FDFE" $"FBF8 F9F8 F7F8 F8F7 F5F1 F0F1 F2F2 F1F2" $"F2F1 F2F2 F1F2 F2F1 F2F2 F1F2 F2F2 F2F3" $"F3F2 F3F3 F2F3 F1EF EDED EEEF F0F0 EFF0" $"F1F0 F1C6 0000 0000 0000 0000 0000 0000" $"0000 0000 36FD FCFB FAF7 E8E1 DFDE DEDE" $"DEDE DDDD DDDE DEDF E0E1 E2E4 E6E9 EBEC" $"EEEF EFF0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF EEEE F0F3 F4F3 F4F4 F4FB FEFE FDFE" $"FBF8 F9F9 F8F8 F8F7 F5F1 F0F1 F2F2 F1F2" $"F2F1 F2F2 F1F2 F2F1 F2F2 F1F2 F2F3 F2F3" $"F3F2 F3F3 F2F3 F3F2 F0EE EDED EFF0 F0F1" $"F1F0 F1B9 0000 0000 0000 0000 0000 0000" $"0000 0000 27FB FCFB FAF7 E7E0 DDDD DDDD" $"DEDF E0E1 E2E4 E6E8 EAEC EDEE EEEF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEE EEF1 F3F3 F3F3 F3F5 FCFD FDFD" $"FBF8 F8F8 F8F7 F7F7 F5F1 F0F1 F1F1 F1F1" $"F1F1 F1F1 F1F1 F1F1 F1F1 F2F2 F2F2 F2F2" $"F2F2 F2F2 F2F2 F2F2 F2F1 EFED EDEE F0F0" $"F0F0 F1AB 0000 0000 0000 0000 0000 0000" $"0000 0000 18F7 FCFB FAF8 E8E1 DFE0 E2E4" $"E6E8 EAEC EDEE EFEE EFEF EEEF EFEF EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0EF EEEE F1F3 F4F4 F4F5 F5FC FDFE" $"FBF8 F9F9 F8F8 F8F7 F5F1 F0F1 F2F2 F1F2" $"F2F1 F2F2 F1F2 F2F1 F2F2 F2F3 F3F3 F2F3" $"F3F2 F3F3 F2F3 F3F2 F3F3 F2F0 EEED EEEF" $"F0F0 F19C 0000 0000 0000 0000 0000 0000" $"0000 0000 03E5 FCFB FBF9 EFEA EAEC EDEE" $"EEEE EFEF EEEF EFEE EFEF EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFEE EFF2 F4F4 F4F5 F5F6 FCFE" $"FBF8 F9F9 F8F8 F8F7 F5F1 F0F1 F2F2 F1F2" $"F2F1 F2F2 F1F2 F2F1 F2F3 F2F3 F3F3 F2F3" $"F3F2 F3F3 F2F3 F3F2 F3F3 F3F3 F2EF EEEE" $"EFF0 F18D 0000 0000 0000 0000 0000 0000" $"0000 0000 009C FDFC FCFB F5F0 EFEE EEEE" $"EEEE EEEE EEEE EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEF F0EF EEEF F2F3 F4F4 F4F4 F6FD" $"FBF8 F8F8 F8F8 F7F7 F5F1 F0F1 F1F1 F1F1" $"F1F1 F1F1 F1F1 F2F2 F2F2 F2F2 F2F2 F2F2" $"F2F2 F2F2 F2F2 F2F2 F3F3 F3F3 F3F3 F0EE" $"EDEE F07E 0000 0000 0000 0000 0000 0000" $"0000 0000 0055 FDFC FDFC F5F1 EFEF EEEF" $"EFEE EFEF EFEF F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 F0F0 EEEE EFF3 F4F5 F5F5 F4F7" $"FBF9 F9F9 F8F8 F8F7 F5F1 F1F2 F2F2 F1F2" $"F2F1 F2F2 F1F2 F2F2 F3F3 F2F3 F3F3 F2F3" $"F3F2 F3F3 F2F3 F3F3 F4F4 F3F4 F4F4 F3F2" $"EFEE EF62 0000 0000 0000 0000 0000 0000" $"0000 0000 000F F9FD FDFC F6F1 EFEF EEEF" $"EFEF EFF0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0F0 F0F1 F0F1 F0EE EEF0 F4F5 F5F5 F4F6" $"B9EB F9F9 F8F8 F8F7 F5F1 F1F2 F2F2 F1F2" $"F2F1 F2F2 F2F2 F3F2 F3F3 F2F3 F3F3 F2F3" $"F3F2 F3F3 F2F3 F3F3 F4F4 F3F4 F4F4 F4F4" $"F4F0 B812 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 BEFD FCFC F6F1 EFEF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFF0" $"F0F0 F0F0 F0F0 F0F0 EEEE F1F4 F4F4 F4F5" $"8545 EFF8 F8F8 F8F7 F5F1 F1F1 F1F1 F1F1" $"F1F1 F1F2 F2F2 F2F2 F2F2 F2F2 F2F2 F2F2" $"F2F2 F2F2 F2F3 F3F3 F3F4 F4F4 F5E6 BF8B" $"5624 0200 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 76FD FDFC F7F1 EFEF EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 F0F1" $"F1F0 F1F1 F0F1 F1F0 F0EE EFF1 F4F5 F4F6" $"8500 54F4 F8F9 F8F7 F5F1 F1F2 F2F2 F1F2" $"F2F1 F2F3 F2F3 F3F2 F3F3 F2F3 F3F3 F2F3" $"F3F2 F3F3 F3F4 F4F5 F0CF 9C66 320D 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 2EFD FDFC F8F2 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 F0F1" $"F1F0 F1F1 F0F1 F1F0 F1EF EEEF F2F4 F4F6" $"8500 0060 F8F9 F8F7 F5F1 F1F2 F2F2 F1F2" $"F2F2 F3F3 F2F3 F3F2 F3F3 F2F3 F3F3 F2F3" $"F3F3 F4F6 DFAC 7942 1302 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 03DC FDFC F8F2 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 F0F0 F1F1 F0F1" $"F1F0 F1F1 F0F1 F1F0 F1F0 EFEF EFF2 F4F6" $"8500 0000 6DF8 F8F7 F5F1 F1F2 F2F2 F1F2" $"F2F2 F3F3 F2F3 F3F2 F3F3 F3F3 F3F4 F3EB" $"BD89 551F 0200 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0094 FDFC F8F2 F0EF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEF EFEF EFEF EFF0 F0F0 F0F0 F0F0" $"F0F0 F0F0 F0F0 F0F0 F0F0 F0EF EEF0 F3F5" $"8500 0000 007C F8F7 F5F1 F1F1 F1F1 F1F2" $"F2F2 F2F2 F2F2 F3F3 F3F4 EDCD 9B65 3008" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 004D FDFC F9F2 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0F0 F0F1 F0F1 F1F1 F0F1" $"F1F0 F1F1 F0F1 F1F0 F1F1 F0F0 EFEF F0F5" $"8500 0000 0002 8CF8 F5F1 F1F2 F2F2 F2F3" $"F3F3 F3F3 F4F2 DAAB 7741 1500 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 000F EFFD FAF3 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 EFF0 F0F0 F1F1 F0F1 F1F1 F0F1" $"F1F0 F1F1 F0F1 F1F0 F1F1 F0F1 F0EF EFF2" $"8400 0000 0000 039C F5F1 F1F2 F2F2 F3F4" $"F5E4 BC87 5222 0500 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 B7FD FAF3 F0EF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" $"EFEF EFEF F0F0 F0F0 F0F0 F0F0 F0F0 F0F0" $"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 EEF1" $"6100 0000 0000 0004 A7F3 F2F4 F0CC 9963" $"300B 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 6EFD FBF3 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0EF F0F0 F0F1 F1F0 F1F1 F0F1 F1F1 F0F1" $"F1F0 F1F1 F0F1 F1F0 F1F1 F1F1 F2F3 F2B3" $"0D00 0000 0000 0000 0259 6E41 1002 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 25FA FBF4 F0F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 EFF0" $"F0F0 F0F1 F0F1 F1F0 F1F1 F0F1 F1F1 F0F1" $"F1F0 F1F1 F0F1 F1F1 F2F2 EAC3 8F5C 2800" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 02D2 FBF4 F0EF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFF0" $"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0" $"F1F1 F1F2 F3EB CE9C 6834 0C00 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 008E FCF5 F1F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 F0F0" $"F1F0 F1F1 F0F1 F1F0 F1F1 F0F1 F1F1 F2F3" $"EFD7 A874 4015 0100 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0043 FCF5 F1F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 EFF0 F0F0 F0F1" $"F1F0 F1F1 F0F1 F1F1 F1F1 F2F4 DFB4 804D" $"1D05 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 000A EBF6 F1EF EFEF" $"EFEF EFEF EFEF EFEF EFEF EFF0 F0F0 F0F0" $"F0F0 F0F1 F1F2 F3EA C18C 5926 0700 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 AEF7 F2F0 EFF0" $"F0EF F0F0 EFF0 F0EF F0F0 F0F1 F1F1 F1F1" $"F2F3 EFCD 9966 3108 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 64F8 F2F0 EFF0" $"F0EF F0F0 EFF0 F0F0 F0F1 F1F2 F3EE D7A6" $"723E 1000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 1DF6 F3F0 EFEF" $"EFEF EFF0 F0F0 F1F2 F1DE B17E 4A1B 0200" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 00CB F4F0 F0F0" $"F0F1 F2F3 E4BE 8957 2507 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0049 EEF3 F3ED" $"C996 6330 0C00 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 215A 3A10" $"0100 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 0000 0000 0000" $"0000 0000 0000 0000 0000 00" }; stimfit-0.17.1/dist/macosx/copyright000066400000000000000000000125601517235503400174600ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: stimfit Upstream-Contact: Christoph Schmidt-Hieber Source: https://github.com/neurodroid/stimfit Files: * Copyright: 2011, Christoph Schmidt-Hieber License: GPL-2+ Files: src/libstfio/abf/axon/* Copyright: 1993-2000, Axon Instruments License: axon1 Files: src/libstfio/abf/axon2/* Copyright: 1993-2005, Molecular Devices 1993-2002, Axon Instruments License: axon2 Files: src/libstfio/intan/common.* Copyright: 2016, Intan Technologies License: GPL-3 Files: src/libstfio/intan/streams.* Copyright: 2016, Intan Technologies License: GPL-3 Files: src/libstfnum/levmar/* Copyright: 2004, Manolis Lourakis License: GPL-2+ Files: src/stimfit/py/numpy.i Copyright: 2005-2009, NumPy Developers License: BSD-new Files: src/test/gtest/* Copyright: 2008, Google Inc License: BSD-new Files: src/stimfit/res/toolbar/* Copyright: 2020-2026, Paweł Kuna License: Expat License: axon1 Permission is granted to freely to use, modify and copy the code in this file. License: axon2 Permission is granted to freely to use, modify and copy the code in this file. License: GPL-2+ 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 (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, see . . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. License: GPL-3 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package. If not, see . . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. License: BSD-new All rights reserved. . Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. stimfit-0.17.1/dist/macosx/dmg.ai000066400000000000000000037752371517235503400166330ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj <>/OCGs[22 0 R 57 0 R 98 0 R 139 0 R]>>/Type/Catalog>> endobj 164 0 obj <>stream application/pdf Print Adobe Illustrator CS3 2009-10-20T15:18:20+01:00 2009-10-20T15:23:31+01:00 2009-10-20T15:23:31+01:00 256 152 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A755T8p+Vp/K2jTz6NYyz S2Ns8sr20LMzNCpZmYrUknqcVTX/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG +UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp/ /SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA0 4q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5 Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9 IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTi rv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD /qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0i wf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu /wAG+UP+rHp//SLB/wA04qlXmzyn5Wg8razPBo1jFNFY3LxSpbQqyssLFWVgtQQehxVNfJv/ACiG h/8AbPtf+TC4qnGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVZNNDBE80zrFDGpaSRyFVVG5JJ2A GKoTSte0PV43k0nUbbUY4jxle0mjnVW3FGMZah2OKo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY qk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v8AyYXFU4xV2KuxV2KuxV2KuxV2KuxVivnXz03l280f SrLTn1bXdekmj02xWVLdGFsgkmaSaSqoFUjsScVYj+b3nj8wdH/K641iz0k6JqXqLHdzfWoJ2tEM 6Rq6AI6y+ty4/sla164qFXWNbubzzl5BtPNHl59O1i6vNQksFt9S9WKEWtuj+pJ6cSCb1OfHiaUp 1INMVR2o/mrrK+ZvMHl3RfK02s33l8wPOYrqOFGgmgWbmTKoo9W4pGvItQnbFUA354XV15dHmrRP Kl7qPleCMSalqLTwwSRcRWYRQMWeb0Ts7Ci9aEgYqlP5667qWpaV5NttM09dR8v6/qmnOxa4EK3g lJkispEKsVSUcWMh2HhikJx5L8zTWfnHUvKg8i2PlvVzpP6WVbG6gdLlYpRBDG7RW8KqeTkBjWg7 YoUvye86/mHr2o69FremK9hb61fW0l99biJsjCicbJIUiT1lQ7erUVrWmKlH/mnd3Go+Z/J3kdZp ILHzFc3M2qtC7RO9tp8PrGDmpDBZSaNQ12xVC+T4IfKX5uaj5J00yJ5fv9Ii1mxsWdpI7WVJzbSr FzLMqyU5UrSvTFUR+ad3Nd+b/JPlS6mltvL+u3N0dUeJ2i9Y2sIeC1aRCrKsrmhANWxVCeUI7Tyr +cGoeSdGkI8v3Wjpq0en+q0q2l0s/ouiB2ZkWSMh+NfCgpir1XFXYq7FXYq7FXYq7FXYq7FUn85f 8ohrn/bPuv8Akw2Ku8m/8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirBvzQi8v3VtZWeueW tS123Znlgu9KhaWa0mXiFYNE6TRluXVdtvixVhWp+VPzA1r8g9c0a+iurjVZrkzaNZ3rrJffUIbq OWGK4cMQ03pxt3r0HXFU11e41XzL5/8Ay11+DQtTsbOyl1Zb9by2eN7cy2saxmWnIIrsCFZqVxVN /JGlanbfmt+Y2oXFpNDY37aR9RupEZY5vRtHWT0nIo/BmAanQ4qkHkLy/r1r/wA42Xmi3Gn3MGst pmsQpp8kTpcGSV7n01EZAar8hx23rtilR1ny/r0vkj8oLWPTrp7nTNT0OXUoRDJzto4IKStOtKxh Ds3KlMVZFDpOqf8AQwM+rGzmGl/4YFqL4xsIDOb5X9ISU4l+ArxrWmKEN+V8Wr+X/Mvmzy/qOkXy LqeuX2sWWrLFysWt7kIUUzA0D/u/s4qjvzN0TV11ryt5y0iyk1K68s3M/wBasIKetJZ3sXozmJSQ HdKAhe++KoHy7ba1qvnvWvzEuNGu7O2t9JXS9C067UQ3lwqObmVmiJPpcpKInLfxpiqP12/sPMPk DT7/AM0+TNQu3vJAx8vxReveW8o58XLVgaPZPt1UjkAaVxVBflZ+X8ul63qXmq80mPQ5b2FLLTNI WT1pYLNX9RmuZqvzmmkozfEeIAFT2VemYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/wAmGxV3 k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v/JhcVTjFXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/wAm GxV3k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v/JhcVTjFXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91 /wAmGxV3k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwu 0/N/yRc6o2n/AFl4QGKJeSpxt3NabPUkD3YAYaVmaOjorowZGAKsDUEHcEEYFbxV2KuxV2KuxV2K uxV2KuxV2KpP5y/5RDXP+2fdf8mGxV3k3/lEND/7Z9r/AMmFxVOMVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVUb7/eK4/wCMb/8AETir5EySGT+UvzE8x+WnVLWb6xYV+OxmJaPrvw7ofl9I OKvbvKP5l+XPMgWGOT6nqJ62U5AYn/ituj/r9sFJZZgV2KuxV2KuxV2KuxV2KuxVJ/OX/KIa5/2z 7r/kw2Ku8m/8ohof/bPtf+TC4qnGKuxV2KuxV2KuxV2KuxVJ/OLawvljUjo3L9JCE/V+H2+o5cP8 rjXj74q+dDeeeqms+qV71e4/rkkNfXfPP+/9T/4O4/rirvrvnn/f+p/8Hcf1xV313zz/AL/1P/g7 j+uKu+u+ef8Af+p/8Hcf1xV313zz/v8A1P8A4O4/rirvrvnn/f8Aqf8Awdx/XFXfXfPP+/8AU/8A g7j+uKtNeed+J5T6nxpvV7ilPvxVI8VdiralgwKkhgagjrXFX0p+V0nmB/KFs2t+objk3oGevqmD bgX5fF40r2pgKWWYFdirsVdirsVdirsVdiqT+cv+UQ1z/tn3X/JhsVd5N/5RDQ/+2fa/8mFxVOMV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUb7/AHiuP+Mb/wDETir5EySGReVPIXmLzLKD YwenaA0kvZqrCN6Gh/aPsuKvbfKH5W+XfLvC4ZPr+prQ/W5gKIf+Kk3C/Pc++C0sywK7FXYq7FXY q7FXYq7FXYqk/nL/AJRDXP8Atn3X/JhsVd5N/wCUQ0P/ALZ9r/yYXFU4xV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxVxAIodweoxVglp+TPky31Vr5o5Z4i3KOxlcGBSTWlAAzAdgzfOuG1Zz FFFDEsUSLHEgCpGgCqoHQADYYFXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohrn/bPuv8Akw2Ku8m/ 8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVSfzl/wAohrn/AGz7r/kw2Ku8m/8AKIaH/wBs+1/5MLiqcYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohrn/bPuv8A kw2Ku8m/8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVSfzl/wAohrn/AGz7r/kw2Ku8m/8AKIaH/wBs+1/5MLiqcYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohr n/bPuv8Akw2Ku8m/8ohof/bPtf8AkwuKsV/MXUdJt/OHlq11vWZdH0e4s9UeVo7+bTlkniazEILw ywl2USPxQk9TtirHtK/MTzpZ6VqBv5bdLXSbK2miubu1lkupvr99cwWUktZ7ONFMEEbO0hTckswH QqqWP5y6vfNpEgOnWDX82ixfoq4V2uriPVDB69xbMJo/3cJmdB+7b4lqT2IVX89+Y/N8HnC60i11 aG0tvV8uy6XaGJklb6zqfoXLmRJUeWGqqky0oQ6LVd/UVa0382PNVzruh6XLp9qovJZILy4Zo4En aHUbixlNr690jgxrbCUxIkzfFxPHZmVXeefzE8zWWqa5pmm6hYWP6MbTpo5/RF2Y7aa7toblrt/r CLAQJ2PB4l/dgsr1qY1UutPzK83xXOrQWZspLawvVRpJ0urh5fr2vXWlqY2a5+BIxGjqg+GgKrxB HEqpaz5884S63oszTwomnz3dvfWkK3MUN1Nb67a6QZQI7hGpwueaxyGRAahg3wsoVPLXzV5jk8gX l7qd/Be6ra+YItPlit0ks5IEGtx2wim9CbnUwsGUfDVGUOHBLOqh4/zW1aa3tZJNV0XTWvFmkulu oZG/RckIHCxvQt2jNcT8jwNI/sNRH2wqi9B/MrzTf65Yx31hBZ2F3fWmmy2LRyC8hlutFXVCzSmQ ofTkDIV9MGhHQg1Cpdqf5iea9O8w+bbXT1tfq2jpqWpyC8FzO0kenWenSejEfXVYfU+tP9leIPxc a8uSq2b8zPNVn5h1mxu9U0y0tVu5Gs31C2YfVoRZ209tAxS4hLm7aaRYmO5aOSnLZEKqv5i+cfNk Oj6fcw3iaFBq3ljV724snQi4S+hs4po44rj1I3SaP1GKcRX4WJDbcAqhqn5sebtGVtNuILN7m1uT BPrDLHDacTZW13EjreX1miSyfWitTcfsEhDWgKoz8xvMvnG50/y6mg21yuqR2w8xarbadPCQI7ZU K20srSxrJBLLIQwTkXC7KRiqD1H86dZWfW5tLOn3lpZpdSWNkI5TdCCLRxqUV7Owm4GAy0hYBV+0 KNXYhUt80fmT5huoWaC/t7q1s4r2db7SWnt7aVjoWoXH1SVo55HMltJAjMVkUglSAjDCoZOfzMvY tM1u6nvbCzuNNJgt9Fkhea9jpOkEV3cF7uAehNzDBmEagMC0nXFUjj/MjzRqV7p9zLPDDY6jD5Yv bXR1WSKf/T78Q3bxTpPE0iI1FcOrIeSBgPi9QKj9K/NLzfqs2mWlvHp8c+pXVpDLcehPJHZPdWl7 PNYzxmaJnurVrNPUIZRR91TbFUy8q/mTrOp+Y9J0m/8AqKfXI76OaO2UvO1xYXVzbtIYzPztoXW2 DKWSQEkoXB48lWMaV+YHmzSrbULi6vbae8nmv7u2ivEumN81vqFxZpplhGbkpFKq21f3aHZ05ISG diqjN598yLpUOltqAtJDqqvHcTvKby9V/M81s8FrIJFCpbwwqsikN8DhaKtCVU5uvzY85PrWqaba WFlbtBqUGm231so0kXrajFZJJNBFdG4dJo5TKjmKNRsAZAQcCpj5p86+atA82X9u95ZyWMelWFxD ayQFFSSe8e2urssJfVaK2WksqrWicR8O7sq6988avP5R/SPK3u2t9fsLC31KxM0NreQPdW4M8Ijm duB9VoypldGKmvJdsKpO/wCbvm200azutQOlpLeafpOr+ssUiBINSS4MkEcEt0huJ1a1+BVlUsCa KzKAwVD6n+bvmbQNAv7q7vrLUNUt9U1WJLJrQQn6tYTHjCzNdw+k7Qsrx1V5Cm/CSjNiqeeR9Y1i 589m1ub24mtf+dnpDJI7J/o+twRQ/CTT91GxRP5V2G2Ks485f8ohrn/bPuv+TDYqlvlnX7Sy8t6V Z3NtqEdzbWdvDPH+jr9uLxxKrCqwEGhHbFUy/wAV6X/vjUP+4bqH/VDFXf4r0v8A3xqH/cN1D/qh iqU3reU73VYdTu7bV5riBkkhia31n6sskRqkn1Xh9X5qdw3p1riqbf4r0v8A3xqH/cN1D/qhirv8 V6X/AL41D/uG6h/1QxV3+K9L/wB8ah/3DdQ/6oYq7/Fel/741D/uG6h/1QxV3+K9L/3xqH/cN1D/ AKoYq7/Fel/741D/ALhuof8AVDFXf4r0v/fGof8AcN1D/qhirv8AFel/741D/uG6h/1QxV3+K9L/ AN8ah/3DdQ/6oYq7/Fel/wC+NQ/7huof9UMVd/ivS/8AfGof9w3UP+qGKu/xXpf++NQ/7huof9UM Vd/ivS/98ah/3DdQ/wCqGKpVK/k+Wz1iyfT9QNtr5kbV4/qGqD1jNAttIaiKqVhjVfgp49d8VTOP zNpEUaRpb6gqIAqr+jdQ2AFAP7jFV3+K9L/3xqH/AHDdQ/6oYq7/ABXpf++NQ/7huof9UMVd/ivS /wDfGof9w3UP+qGKu/xXpf8AvjUP+4bqH/VDFXf4r0v/AHxqH/cN1D/qhirv8V6X/vjUP+4bqH/V DFXf4r0v/fGof9w3UP8Aqhirv8V6X/vjUP8AuG6h/wBUMVd/ivS/98ah/wBw3UP+qGKu/wAV6X/v jUP+4bqH/VDFXf4r0v8A3xqH/cN1D/qhirv8V6X/AL41D/uG6h/1QxVLfM2v2l75b1WztrbUJLm5 s7iGCP8AR1+vJ5ImVRVoABUnvir/AP/Z uuid:934585211EBFDE1184E4E7092D2E0EE6 uuid:bdc7e2c2-d2d1-a744-8c65-0c21c1359ab7 uuid:b1ac9fe8-11a3-4422-b8f3-ae4b8085b7a8 uuid:5D20892493BFDB11914A8590D31508C8 Document Print 1 False False 546.000000 321.000000 Points MyriadPro-Regular Myriad Pro Regular Open Type Version 2.007;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032 False MyriadPro-Regular.otf Black Default Swatch Group 0 White CMYK PROCESS 0.000000 0.000000 0.000000 0.000000 Black CMYK PROCESS 0.000000 0.000000 0.000000 100.000000 CMYK Red CMYK PROCESS 0.000000 100.000000 100.000000 0.000000 CMYK Yellow CMYK PROCESS 0.000000 0.000000 100.000000 0.000000 CMYK Green CMYK PROCESS 100.000000 0.000000 100.000000 0.000000 CMYK Cyan CMYK PROCESS 100.000000 0.000000 0.000000 0.000000 CMYK Blue CMYK PROCESS 100.000000 100.000000 0.000000 0.000000 CMYK Magenta CMYK PROCESS 0.000000 100.000000 0.000000 0.000000 C=15 M=100 Y=90 K=10 CMYK PROCESS 14.999998 100.000000 90.000000 10.000002 C=0 M=90 Y=85 K=0 CMYK PROCESS 0.000000 90.000000 85.000000 0.000000 C=0 M=80 Y=95 K=0 CMYK PROCESS 0.000000 80.000000 95.000000 0.000000 C=0 M=50 Y=100 K=0 CMYK PROCESS 0.000000 50.000000 100.000000 0.000000 C=0 M=35 Y=85 K=0 CMYK PROCESS 0.000000 35.000004 85.000000 0.000000 C=5 M=0 Y=90 K=0 CMYK PROCESS 5.000001 0.000000 90.000000 0.000000 C=20 M=0 Y=100 K=0 CMYK PROCESS 19.999998 0.000000 100.000000 0.000000 C=50 M=0 Y=100 K=0 CMYK PROCESS 50.000000 0.000000 100.000000 0.000000 C=75 M=0 Y=100 K=0 CMYK PROCESS 75.000000 0.000000 100.000000 0.000000 C=85 M=10 Y=100 K=10 CMYK PROCESS 85.000000 10.000002 100.000000 10.000002 C=90 M=30 Y=95 K=30 CMYK PROCESS 90.000000 30.000002 95.000000 30.000002 C=75 M=0 Y=75 K=0 CMYK PROCESS 75.000000 0.000000 75.000000 0.000000 C=80 M=10 Y=45 K=0 CMYK PROCESS 80.000000 10.000002 45.000000 0.000000 C=70 M=15 Y=0 K=0 CMYK PROCESS 70.000000 14.999998 0.000000 0.000000 C=85 M=50 Y=0 K=0 CMYK PROCESS 85.000000 50.000000 0.000000 0.000000 C=100 M=95 Y=5 K=0 CMYK PROCESS 100.000000 95.000000 5.000001 0.000000 C=100 M=100 Y=25 K=25 CMYK PROCESS 100.000000 100.000000 25.000000 25.000000 C=75 M=100 Y=0 K=0 CMYK PROCESS 75.000000 100.000000 0.000000 0.000000 C=50 M=100 Y=0 K=0 CMYK PROCESS 50.000000 100.000000 0.000000 0.000000 C=35 M=100 Y=35 K=10 CMYK PROCESS 35.000004 100.000000 35.000004 10.000002 C=10 M=100 Y=50 K=0 CMYK PROCESS 10.000002 100.000000 50.000000 0.000000 C=0 M=95 Y=20 K=0 CMYK PROCESS 0.000000 95.000000 19.999998 0.000000 C=25 M=25 Y=40 K=0 CMYK PROCESS 25.000000 25.000000 39.999996 0.000000 C=40 M=45 Y=50 K=5 CMYK PROCESS 39.999996 45.000000 50.000000 5.000001 C=50 M=50 Y=60 K=25 CMYK PROCESS 50.000000 50.000000 60.000004 25.000000 C=55 M=60 Y=65 K=40 CMYK PROCESS 55.000000 60.000004 65.000000 39.999996 C=25 M=40 Y=65 K=0 CMYK PROCESS 25.000000 39.999996 65.000000 0.000000 C=30 M=50 Y=75 K=10 CMYK PROCESS 30.000002 50.000000 75.000000 10.000002 C=35 M=60 Y=80 K=25 CMYK PROCESS 35.000004 60.000004 80.000000 25.000000 C=40 M=65 Y=90 K=35 CMYK PROCESS 39.999996 65.000000 90.000000 35.000004 C=40 M=70 Y=100 K=50 CMYK PROCESS 39.999996 70.000000 100.000000 50.000000 C=50 M=70 Y=80 K=70 CMYK PROCESS 50.000000 70.000000 80.000000 70.000000 Print Color Group 1 C=0 M=30 Y=70 K=0 CMYK PROCESS 0.000000 30.000002 70.000000 0.000000 C=5 M=70 Y=90 K=0 CMYK PROCESS 5.000001 70.000000 90.000000 0.000000 C=5 M=90 Y=75 K=0 CMYK PROCESS 5.000001 90.000000 75.000000 0.000000 C=30 M=0 Y=95 K=0 CMYK PROCESS 30.000002 0.000000 95.000000 0.000000 C=60 M=5 Y=95 K=0 CMYK PROCESS 60.000004 5.000001 95.000000 0.000000 C=30 M=0 Y=10 K=0 CMYK PROCESS 30.000002 0.000000 10.000002 0.000000 C=60 M=10 Y=5 K=0 CMYK PROCESS 60.000004 10.000002 5.000001 0.000000 C=80 M=5 Y=10 K=0 CMYK PROCESS 80.000000 5.000001 10.000002 0.000000 Grayscale 1 K=100 GRAY PROCESS 255 K=90 GRAY PROCESS 229 K=80 GRAY PROCESS 203 K=70 GRAY PROCESS 178 K=60 GRAY PROCESS 152 K=50 GRAY PROCESS 127 K=40 GRAY PROCESS 101 K=30 GRAY PROCESS 76 K=20 GRAY PROCESS 50 K=10 GRAY PROCESS 25 K=5 GRAY PROCESS 12 endstream endobj 2 0 obj <> endobj 22 0 obj <> endobj 57 0 obj <> endobj 98 0 obj <> endobj 139 0 obj <> endobj 140 0 obj [/View/Design] endobj 141 0 obj <>>> endobj 99 0 obj [/View/Design] endobj 100 0 obj <>>> endobj 58 0 obj [/View/Design] endobj 59 0 obj <>>> endobj 23 0 obj [/View/Design] endobj 24 0 obj <>>> endobj 138 0 obj [139 0 R] endobj 5 0 obj <>/ArtBox[0.0 0.0 546.0 321.0]/MediaBox[0.0 0.0 546.0 321.0]/Thumb 163 0 R/TrimBox[0.0 0.0 546.0 321.0]/Resources<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page/LastModified(D:20091020152331+01'00')>> endobj 157 0 obj <>stream HDPj0>4鎫 (1H gB!Qmi@?$ :_cɥ>stream 8;Z\6gC;%C%.l7P]7'UD@@34#>)[1LaVHl_s#&C*Br B-(3B5-jgL%HmeCM?6=Eg7@qnjAE9qOH6*@*Y*t-K*k>=9Aa)H, endstream endobj 144 0 obj <> endobj 154 0 obj <> endobj 155 0 obj <> endobj 159 0 obj <> endobj 160 0 obj <>stream H|yTWƫliG2e:GEe5dkٷnhA!NAK!FDv]hTq's( pE.wƆt/vc?IU(wC,}}QCzoHV\L7ZH>,DI%n1p1?R)JևI\uW\*S6u3pDH6YXZ,\mfG8mc>ye}Khw'ىvlc'] BIda@tb*W0Ex=AfHf r\P,@`EV-jyP4D󖣙(A4D| v D3[W Yj͞`7RM/ P8{Be|y7ݽ0Wh,{`k,">'@>c鱪x>X+KJOI=xEPk=o=y}'Fx``Da%)fm!I+B%1A>E y E{ހޝ|3ə!4!-(Zh!J2 NW[oQϪtA XcT-$,%1JM9!DJ|?7 h,SIk24F^.p|sAQB љ2ŤWg:sNg}@؈.Pd\X|ո3i:YtSQݕvjPfʠ^ɱt\b"1J_ERx;Rk}tBԖoOdgy|1 4<趢mZhQ5n^rZEZR>|ap/yp=J"ːZ~)|ׇLG r$?4}p'[k{#A tiFF+B(}7#Q@62u r dOҞm YLOWPGמ,iKF}F닌SEDi|GCQ>v] FØnye?>stream HuTKtKKJI,t(݋4K%ҹH4J#Ғ(H wqyy~3̙g<3Y9El @ ]!O-@\+BVKK :OX~WCaiHKL0qY `5ck X]x= 8 XĿ׽>.f#aPn D^{y8  dp H st:Y׬cxc IV?S!:_9[YbQP~+rA ShHht^ '0߅™kYXY9Yqqpl'WzEE$%D>,^|t*K)%/`\ҫ:&D [7dplDa5|mb4,yy{e5 3⚅,t+whlA   m k xYUH&%Ȥ qO'Mz3KT@v[NUnn^\o]abTrtlmE]e~U+jאZ:zaqi5};CS[\_ۆwCaQ1;>L$Lz}4:%8M7l̎Χ/}XT^]X>\Ym[n!ycskkƶʷ;v{pIs0Xݯ3s󝋒&$WWW*)!$$%!e$cHNOAKIMEq ƕ;KLw@YX;ؚ8^+DspfKOTCPpJ%D=++O%$*8IZ\Z^UK_wL"dx]}>9=;s_G8/̹N!Gz[<=2|B}PQzlH0Wc(Een|Pds::5&89yFT"od䳔i/ZK^&gd:fgQl kJХeJ*+篍kj5U[ZUh0|em6]B@`PpH?QM1Msψ*iϛ.Z [JYZ)X-]R޸Ѻپw?@?5 ǖ'vNg W3gLC#u!MMMEvAms˔FVNA̝GLwA̬,llؿsݛnͽ+!B²" 'R&k?3?4+:6oT\ұڿ6VʝoF?LT;:>::>:;eqvx^sawݥʕ'_EFO\DKLtAnFF)F|ԭ6\`@z?m+F;LwiAhy͖)Mgw~_ @ZH_XA,"F)%/*9aZ:Q,\B^_AU񡒀2 *'[j o5[uR1uh`fm$1xJgBdrltlyyEe$feg-g#`dGbwj0TOC9; ܨݿxz6zx8IP=A!.aAxۑϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M \lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} 0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ ~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;',#h%T,Qۥ{[s:9󅼓&^!Փa@!" y .Jl6mHju,bU6+s hܸd-ʥ}wi-sun=0Ľi-_*)U_ˈb$na+;ϧT;ppA7C4.*Iߥa8Mm.ACi7\j|fiԫ)]ޭjʄU]3(í whJch-4x7h׿*P0H됎L랇ڡuÂ,{Bz}8vggҲd[!XTZZ.vlAg {;Sm`vؿ`~?ga. 3Ì{L^WYe4]L7ok!wI~Ira^=C#Zh`Wu}p)"z7ff&3$FJ8Ҷ5m uR_,^VS&aR~PfLL_Dw*`\-9]q  TI6)>u6 D`e͢/xqY%9ʜ;åOd\˾P&eRz;].R<oΡ]P{?: r̨\ʻb Ҥ3|m s؟W9oZt]RnÅ\cW#+nI&gyAjsN06HiD'@J+a5V~cRI̫vwtUc[3+?F|l(iU^+O?Rs1Hqil$Wþh=(RE 1BvџnF/ BsGMY9>ܖ3ȗqI ڣ5V_1ȣβiJiX0WVH[8g_/ n3 ` 38A.|f|ј0I6bv%& ;Y㿜҄#dD.).p'3J12K[Duɥ$s8IƊ.z^48e!R6}vcMiozo0'=~i,3:?-?oS,9w#ROa; ?pB ֞IO ݟe#}ԯN$\l?], y,>&Рq]yh0AqK)ĝBFҍcH:-h-ǟcf)K9T127]qEjL<>h;|U dpG ƫ`&!8al`83>.qɂnA9 ; `HByg KB*k㰗2fF=#OM eT? mTm_OBۊV<ɆF('n3uG~Ȯ#7Њ9[١`Ns.P..콤 'KnpF\? B>-`NWOOWBlfxW^b-_x&*/(j_=߆󑊢zF`LdE:SNʔ@S 03|TOKokto}bFz$4-,.m'j*J|)J6BP ^3ewܫpX.*,07xPڳ:2XOT21|"7=0ߴy}ĸB)H[Fs V+̯+Y(I(x&9JAI'tXmyG=X[8TK)2<TSRvxlȓGO|g/{>4/gRFȶ&A52 uЯ*B幃AuFǞѧuD)B,*?n` 'qQIzK֗4{B_g68#ʉ2.A$69!̒ub1&D3Qx" >ɏnνxVG&TۨÓ)sxd-5KxߣD&1±jdGjJ|J{Z ޲f6/vTp̄ub PmBU#gBg˷)-*E ar>>Ƶrn[ɭF-IByѸP=ĶKUC wG D}"vN.p]]Q8uY{#qCv}sax_oyiNr( d8aw2CQ}V8UWO\g \yk@dcZt9$u p-1z(=f) vě92 w u煼ת#{P6+Dq3HIi%BCb!kc5&U ):X$܎[b2*@PkcӘdoTB_L1Uwi")=2#pI9,RO>T@>;bnDPuCfk^^\G~ oLRcHqܮ=-8^5Ońy*9:-\g8:T<?*C;[yX+I;lRL߭$DvYTQ6DyVmfy%/sIsmXP1Lռȭvow)QBb_LVwupeėO*|+](uHװ4WU.{ 4\m.QwR~MAiRz+%BKz?'{ k҉aa{H]sX}da~3_auQz VM\ĵv5I0LM)DŽp1:5,&4 %!$}ocޤA]R^xT◬M&/B:DwA24?cd&g]5b4a?iǐ Ĉ.OA 6vfvsd(5yTH/P=(a;zUs bWxDa)Eʼ $sgPJreY3w`cFo0|U[j5k.5J&eTor È´}I lpjC8c5J=g%Uo|L58E" ِ[Ak]J͆VBM"{NrQihЦ@Y?6^߫ZWٯ]ذc؋hKSLj:>O ɲ.ݰQ{5mm<ٷ?^v"}ъw9O&vX7km[ ,70nΒ7|eP\I;-wgFN cIP#qWI ;NٶA)H~7i thl~~dzY Cx2>*c&mb{9f1X*L #> V@g蒼]7n249=MK% ;,F\j 1klZi؊ΐ.|Q9а$_.!;̿lE,ɥDi}D3^a`Y5g{J=mɳy3CM'jM-iЦm n5? SJE+U~ ;q.tXd~~p*QeS%.Ћ"ưBsZ6-6[\d;^z4`;64藸ͱw;|+&AfLU3XTm)lF'l VɺgcGObbɜ9;v \CL, >B?KGCe"z -@EHILp<5'҉$>8#gL2m c1 c Fw)P+rkC qp/u8#!*g°Pa`vu@oH`"Ž:z_Q<,D>'ӅWP .`xW3|!6 5 El[",0 e[Oz0~lUO+&xkPc|u$k.?{Qp""kr6isVa=~@W_ .<7 2#h?c~m'rE_xs6aG+K 14L^kUp^^_mS^dШ'>}5$:τ!E[bJx&n t(m;ZsF5uqX.ՂBqKP *l%{ٓ{'f';,TT,bhUq2Z3;}T9vwRR;GD K*/@hUv$j!@ vyבm,W|-͢ ^ ~D_􆭍"ĉ#c禘*X/Ϝe>|XH;:)d9gƖ4aBQ4Ew,C ۯBU#>SV$L-5gV ϯ*B#} npþtdU$Db&$^\^&Z"/˺+-}%Z:}9AYu rTlP0"~! ͚*@5K?߫Z-P=j>܈[O?)a5 ?WUsy5^(ge${Cm> "Gգ+$踿ϫ& Xw8?g,'ō="/xNM)'EFqrf CįQ9ZY$r!6m)4 V9kJ$# FьX٥Cp[ģ)CS;rFP#ImKGɺzj>>X9,ZL-jIbkȉ8˚?vtxPIO}_ay@:|Ve6ubd/e3<֭ztea'cLaM lz&,f^_!?l2x2Xyń3D)\?ye ~4O+9$  EVDTSؓ7X?MM!ԼuOtP Cbt;iްa@gW#@4c9.Do z2>M5i~u0 qswQ9ǸLt삟Mz)>kɝI;io"U)]$YL >$$T:gUo$UK,C`sCMAJMÄKC(g]ٮ9sUG0?L5QM%0Ol5&`Ƒ1,x'{k+mY}-Js#\d:i/NK\8HstQ#-ND).s*Zymnf\1l{(E=VGW9s:?wǟQZsC6A1ƃ6K@8OUY^`7j6@9?,yt4&}"T- \Y&kVx녣391ٵqQ=beMq\`/nņ|2͌JkzDmͫIR4\~5NlօKɁZ]TC3l̅D3jSS)tWw$IX[wV WTUw^PeUhWE^ؓ~Wchs sIg`wgs (5mr] B`7JfAaA3ƓG?{O[ ?xj/Z*7exXz Ά})C?`KcMՌ&)Y5J]q':]$؞]Yv x(ıH1eU>_0b?*񸨎b¤،D;Wxm]|N7U13*;.=>SÜj)CM>.eI1/QvН6Tkk+Ɯn\\FFV#Xde&~WE7"bju^I@j@bQ Wk8w_D ^z xZKA _`T}] x}ЁM0S,rV+ KO&ƈ`;E{irf0F] w86f fm_8c3V<)r1p +hs|p!QP'Ղʛ2rӤej4Y r, r?4! Uq]f(*&umM+;1 -c8CjL=L1TDJ7>)BH*cHY}~xI,{7WjWާʇhg_YovMKiN> QRǧ}AQj^G syJG"?txt,L>֍p_>Po$^<%}KDS4 *S<ܖyd;éIJ~JMn>ȸcI6uɖژ䩊i77_5W2' 9t^}/8%wd0k)ͦF9kih3ShPBULzs'0$Y/L3ol|f ɪ\AW#siS-O^I+36xas @M A hm45V-' ѵ1S+ ~*%~k˝ʉl * lك=3_2~OgPs Ccd[aے{<ХjA {! ߲ۓ;O'9+wEHE&JV?fiӺ j05瀶bhWZxo=ƺ 0zhK5mov (YOut;e=R*yMVn,$v:QڳE.yVl;svn,Wi.[@34SD_!MF>J柣ND @$Y~-CMu (+lBpБ^#$~2è /@̣6 3nh ;۪.3Fq3\َvZnZ"/vNFNJ2V{#ΚVse_쑮Ta8C¢!Η>FL\M{5eH~7;F AB?VY=۩Q i9J.sӿc%FVbdեiL`a)kD=W \ne>NX7Ƒ†2IYf-to7/~Uas[`W*v3_`~:kjR("E * e)DDIss,f_n6":hmh+]AqñQqSa9{~8|~bh6GZĠםN\h+(E30~kTMGβ1:zka'LG2>,gt X&@?e% =@Ihs)HUOeX^m7R7~,, \jJԌfͬ8!*]JR:WR]Mɚ PZ;JN.8ɦ,[r*Α]MM"waX)Lbjd`>:?|:?u>^G$fa. ʥ_S%ED8 J=ĕK{6r zGG Ui<Kg"^ q I6vPWy^,uc/5@:ǹ+[N+li{P#^yv,ñ-NѳH⺣<֡gxV</nb6󴳜Ρ +nhB˾PoT(W##ĉTwZU} w-vT-9O᭺HIz) z9R'dI5aZGS˟agW=.P1ٜ y?2X)r4VaGXBe`9Q1͚@85$W?D}z2* pt +;Br\ܕ'> -vCNeʔL-ʌqKHr 7I d<BgNelB^փRγF2AqCR&t7߄{" D9u)Cw1t}?"'[7o̩~1{>Ru* ʖdClutqf2[l~{S4>J$.nQnlP#x])By`r+wLH?VD:|iUG~ժ+&+Rb gP>}WԹkQǖ]WSkqwZ DQdVd24KGMvU35KJ~4&jwJ*y;X߉˔O@5hw)񘴕o-9E:_̂o&6#V(ѽS-te$ פp}4%4mrnzhe4KX*KÃ29ʩ~'Ǥl|O5ÍB ;^j㛑Q`exH;J\*`l˴Khk &tF|(8VǡܷR:ϳoG*UjSKknRgl ޅ-6&Nŗ7O4rGmO[du_TvY{ ̏Iy\aRKy&P7ݪJ)l"W5{K S_j0WSW;wixF1^lО伴^'1b%OAXhq)L7j}=9PX=n`ɗKX#CùA *7{ jWܴTByufכd=Af]F=_u*`q+_i݋\^`BaE|S&%Z a8+QgQ[IK-jIKr2Tcju=A ʧQ"7{ٮם*X|,Yzѽ}ƈf:jCo[>]x^hlhNrϳEDkcCǪ ת9c Ht<)}z!hE~DBӳ2S͆i{;ouIp??砃46ٺ^"1R<-65sjpCSjqi6dzھİ紈 41.$5EG9:=ob쾄 v#[xﯦAF+T(C@RQF772I$^a$Eq>.AEbiO0]ТK5ΫPÛG ZdJ*$d ^}E*֤>?Ƅ$dO _tl%$^7[KSECqz"$]*B]}W zT[Rk"n]EUYvFUW\B6-RB^Me2B4/wͺh4Ek5˖<1U[tD>Q!.kR涧7uJc>c l/i^3;iڐ0sĀZnS qW7Np:([568ViAFޜ~h9Pldüj2dO +61--1Ewv =JCHW34܏&x8,&#Rc3Dvz6RSyu_N/nmكvT֥Y˼?RFװKzn9Q4gC^5l`P\ܲG&ޫ` 9PҞٲXr6 V4,{a؄\tcY`]lǿԾar鴯؏=b!&Yb ^[\aYt$w [R)i[{$7f"o Xp zBz'hO|Ō4ǐ|-j :}̴a%Tv5Y9QK d0 ?$ćH|#uD3 phrd@,@XmVKY@ou([8#!OM~.7SoJn%OG" Ü3N|/'O-R_1Vh&׺ NPz8de 勊ZTH;XQ6}+'h_|ȋCcuHjBA,NOS{3 L`]1> A rxӴ*E^.ؐ`Q5 v{`=W6뼟\9avGOXc& v1w~0W:ʎ~f: 0/˵%m KRKAcR% P#CSߥfmD5oEx17B0<&Yd8"1wܡ5 TaaJ3p57A>+yIMcu Zd?Bk1x-rsV9sH6p]DGgO| y5S$aE`$Ls [Ym ~u8p`6*I ߕ`S88sn9O3nXOE /7f^lbN[PBFO.9Z_.5>F S̉R'}ΪѬ`_dX|{dHXԾ3QlZe7PRqشO5OkZrx5u`aǂ:*`T), DPQʮdߓJRk=H+ *#u)h) )B6s9߹瞏HZGzGT"93hDͺ sr|b4y $TK "$I~$v(B#].qi?CN ~ޱ|ܷLcOnT~vxj̦5<.f\K<2p:CpSy,66>|zC E T)f/:X1}J+>_~Q;^ㆪvs&۸>.k7yZS:˩㜍rݖۜaKa!l.g57Kv0!;ڗfe %]"XT J3aժlwVj=v姠αe=bI/gH& :g,(y 27>aba88fVVqɌT0NɉB`( _"fo! t}Wg_0}HX 9,Qx=~Jٹx>ӱe9M2mFS)Vk-eZFF٥btg0O?Dǐ%7eyښ6WSCyeUS}l`a8i g"1лJ"|PKڝc,$+&PvꖴGBoj_t4I vqf熚(eC!b׼^SbYi1¨;2W`/7uh?4 !z@#(T 6 ^!R S#>E/Sq9z_ /G%ӈ0C9[ۼ@(٩P ,}XTOkpQȫUG6 x2e,> -?ϭQެYz/T5FL^`tީ3\#̬D:,vw[mDW)TBZ`0Ֆ`3tBQ˟kks41y `\޸cV#z`XHhwA0چFTyqӵܫ*F˪%*/>9 gS'"b'zL=N)cs*bR)W<#S 癛)K &L\9WtW!Y17i*%wJ_ 閥nWJ!p-0T`:K6B+SzlL,~J#ZLHBEe߈Eq1 ڸTD}bB;*OTCnՍl$OYQ0mz7o9NŻ|hDV[Ve֩b7YZÖHl~I)ܻJ5oOݑ%(,hZGҼmRd!/NEWutV57z;jjs^^lDǾ0-a_aL؁w44簍b^ppi&nX uƻ-݂ -cY4_g ?jGIfH %J҂[%ϩC6OzvWzoZtA$?z;ؼFT2/+0@@S<@>0bSuqw;j4S'/4sEթ(P[V^5ƊHkg/ۄw 0*֭ ajyB5TC J(_F4!m, RN ?S9 :״OfOV"յڇ1,V)S@._ #Q`K|ͨ%cj/&\: [Ft^Z"q٤Jm뙊jMarח`VCg w"~>< 8i}XT8dzQVY<p%HG/Û`rq;Nm~Ms\/Zh:(MXа^F.꜋.Ys}5`a((X0T+JS 4&~|iB!! !)$)ʰ WFY]E븎3x,˽}|dc |i-0Ws Q_GpRjy0׿tjT̎ԍD1څڍ›N:ka? 7ek_%]a;זF=9-b= &Mm0-vD'^j+/5(er^+EL F1$1KWE|fOFMKm::1`ڥfXЩM*i9 l?+Lw?-Nx͈wɳ\C0瑃f sM;iđ`$O0z*RٹB9@"k5v~.lB?ug]ed8JAj͹um.DO^^v:y;ske+,L¶vŝҼخd_5Z;q#k> MU\J{l*͟ґ3Doy"UDcu#H)BPit/ v`_Sʝ{e5mpPpy=-2[m+v6*.WۿSǔ] ^DMk,2.#ɲ\!{^I4Ԉ.~çlDcBU\b"c jvJG|H`_2rHѥ tHHBaG :Bf{'9 [jaЧe &hz6Fdy?>gۑx&l$^:^nx-'-]O 5@S Uڏy]Tu _,zWPT|BJ,ɕ}`8ߴy?p7gˢu\JO(_vOUue4+Qbi?A.jCxyRJ駥Pt㸲rTfdd$ֺFR>PaL'v2M*׵T]`W*cD*hAe#"ɆKO9JKL2J( KgK3jԉfZnL5oM(_>FOӹGi}<@w#Ndhoo4Y ̾Fٸ2YAz$W֜5Copli\ 32l;a<;S?B>zprjsm1tZc̥{s/J{c*#3ހfϡneh->Bc9SJ"չO8'8ހ `yHϤu-*` x[c')Oy\x!QS9q*;$;d'=NY ,|ܶ34qT=ka%hs䬺UX7Fl[ o1apuxf9QGk4;e ˸7荇5xB:yZdͫ,`2?_a[0~9iY Fs3g Ë9u<,yx87 1Ja,O@/gO㔛94 |.]16'^@1'p:XtwL,jVQv@wl{έ̱\?R^UV\GI+9D03oyd[R<""" .2}"!<4tH~(-r25DH@l"K濣,/S}"+~wF}V dRz,:w&?C~FqJ}JݢJirjzEgU#p]ZF%+[PjewVjlW7wR/*C%%jGx @EFH)&0_Օ|Xu DRNXA\0JSH307͛73 CWc+U#r# aQOL4Eљ?s~{sIy?y>ҒLָKd-ޣJ1v*fH 6hz+~BO:IQqZUՍP[UD#BM >$ z|?^!J0W8N WzXfщ@'h< %sdR۔e[$z,Z2H5[&Ht L UO 췯+52j&P6uRɮ! a+rk!o4 `ܗP)f%VQTF(Z]s,TR|O)O?ho# ]6yл)OU,F٠E})gsٴGyҘp/kw~˖I'Y;TdgYU'I8@F* 8 $I+A2((+y8OϋWȗE {բbW"@}@C׌teYgvֈHofE`eagbN_4!/e%O;mhtWv6[iyFy4ʔat V] au #QYm3rM/q{~tjD 7fiɷ  . =[n`4qShBrx_5wԐ %nQ~x'G[ `+qb]Q2Ըi=UGn~ڋJ(Aݪd E7Kz +M]!} jnh-Cզ_魺a٭Dfrj6$-4nUZF)Zpux'@]U/ٳۿ3Ug`iU}ڰULWu+SU[;uXJPvOŀ{$KF,qQruH.}imfZh~atMBb0*iWC䶧jZmn[nKfi c+.&oV.&ʭ{5_s9dmIA. *s5: 1Ů m!|fl'6#N Z>\oMkCZ8)*bEE@(27{I" $!0a=+vUZŁ`-xEJUǺ ~~7TSsV6i1=2J眆Jh@ Uu;7!0 ߽\醮%-;=.e/T7D$v{.ʫ|ZѮmcDֲ+-Cu_{>1H1]"D^nR ٺ:E3[h9 7TJOW+3 vœLimc @6'[c`Ǧ8v!bR{1_ӵuoPE2\@;4"mO m{ ߺE1dA}C=WB}[3']\PJG5VmnYG Xyahd'J[U~ vWۅWo]WnGnR9H7ѨAu 1vZm]lUrTVA sj6lhm,My4A*0vJR? Ĵ>2C!*#q0MJ!:ŏCR|dFa?2݂ch3dBzSIt?%LmF[AxYGҏ0m;GY1űh%[sጒ@9 q_8G>r Wn)jodEzC.qJviN&If8bg v|sd%:uTf&L0~p.(RU ; _)w%$/ t# ~#u`u[w.qsY_-*'̳ɩk/)2* i9$7fUzflc9}],툏WYCIkS-ty7>T! 26Kݲ m&cӣh' ..+upC6&@j5tdP0=I˂Ė C{޶$tR:(ϭuOR4$=jluq1?פ9Si|cqF!_z^SK}`d%DT wV>;<'V=(5H%jWMV#9YD2֓p~~J }D]gNSsjJmn->,vg&SLl#>^i8ʞ%4'RJDhRN0hBA0(r0K+aMY|"EGE_R^v4/?m[˨yN`K/5[71[Gؒ' '铯RGhqꭁ]>iIX 5'\GB ćd^ux+[^%e ֪pxE  6%!Itި@Ҿ#% :*h$r7שׁ55׈Ց'I+6*ЮwȰ%U#zD+Jt BaUؕ 6}uOr7dP Cu}FEua7RV"KST20 EN{^lkƕ$vW(,F7b ˢÞOy<"_).kh[n 9W?gڈ7yș*ӼuA@ OpIRrP($e[iVYR n#(aFq&mq3%\g?%ӆM5XD3b$ʁW ƿ5&͔D4®KcᏊ . 1Zo ^`~¿`6z q aXǰ)Ӽ܄'84 n"Db.yC<K d},{*h ڸh>wMv^ c8Iƻ(~j? eoyl/Dl5Żרpy1ܣܵ^004{ .%CA22dWuQ>okL<5.ſȠiffh7S-|^TjX[wCY*sG^1Ve֗+˃L3 /2y{+.;CtJ } ->٫y6q< WxA_PZ? Q y1>yK\.!OqM 0Cl];Sk)=RZ@[ɷ5JBeǐ$Ni"0 -úR4H~9.☫|Dϸah-)r~"eoMK%4 _7"‘e QD~0T.>"x*O>酧.Ey+HVy55RWsEk*PxEGB;(J X(8hiqmh^ 0`}_APWDLZ‹]<4zG֦`oyZR|u^gCF#nr)Va5ƪw9njyIt xI1bIy>}-AگOShKFx6xqqQ 3SU\ka椚̩Di~ ?{>J3mtߐZt]YNju]ɒQYlZZsNѴѷW>Sݥ0Bj+7q҄fU7m :8^;#eտ+*,_CY3MSU*LX.jQȖg_IWJ5a"9R'C\y׳qH)VU-Z.\+Ѥ/aen/|F[?SPkr" ^Y>VH9 &yaIxQfd}+] U.o.=q-y][viRgk*`/pLBu+A@[)&PYQ?im/K,Y*gu(i2`؀V"fJSs=RU@7+>dْsmY)w=U?ο3D qjv83׽} 1r@vy:{Eͩԡ.޸,珈~CH{ksv_l毁@"lOR."0Fl]]C˧Mfi nq˶Q{56ef e l[IuY_(i&;to 5kZ/ jjp~Ch⨿䦿iRs!G-֠5 &wa7WAƫXUr8+}E)oVӃIÌ}qZlh<gw A?=$6-ޡ|,)!<*ǘ*z!8߀ϸuPpD|Ŝe=sm4'ҢؽYaPOZ(vj?VGgxI=V-̹uMCJH_-C]B~2A\8*E8PTΔTo 9/whaߣby\'F,Ռo%wU/ժnM*T Ƌ{5NJԢT9L;y _fXD\uַA:x")V%V/*]1# )ԋ@X"SVӅ4u.f?Uչk%Nj;c~?]Pۺ˄WҌ=V듍1 E ֻqd{q׉; NYHdfttc #&vPtQjd1o ­R)ʽ@}<7 &8wyybH04͂@>o` ~M`Oi#T2"-!NSn\ z$SC%Q%;OzcT)!M.wf.Po1U=Bl1F#F0HD\u̞rڜ*ujQO5u8E$7:"І(UuANgulWYE*Z"cT\kTxlx)$8(YBIY`[}.Bb T$=U8Oŧ yP-x$]0_ j(sOH|/=wKR` ptl>f*ӡuU<=Ts(&zpKA?sLo`N0Mq+~*m-~F7^5惬H]${|-Ҷ9Y&=X'Vu+^ϖEm Y/0X cAdPc_X VRx6b|C6^FeC]o-F?f7Q3V>͝yFsy]ݯMF͊k^NնI#FZ.7ƆQfeϫCJn;AjB JFw mԗ6t(I5beElXQ͌ i,)6QS 1zJezVBf ۹ʹ/ HQ89SnE%o-4NJ``,)~utyQN]vحp+e"xN6y*,7$'x\CQL[8.d@}CɏE)1D?@晹b$?7 YM N| _Td'wa}0Z<9|3閗3~o=Y>l0Wb=P1jmE XR[louv:.C=;.a.BřS[nWJ3ǟN1='\Xr8۲:KXj6e g΀ap%z"K1.c1ɇzɭGTRiVBe-)K@iͬ!u@_`&2q up%P SЧ|NWP !o-t_ nyV|ؤ賐e`HʏE=>\Tǀ|cҎkIST!%Gu,%[IR'+#T}m3\/df)`n2#\M(CQd6flqGv첵).Z&wITe{JQܕQE\m`p`Ҵ\z[v7OVo9ݜQ}$SSFMWdnyuя: *o[3 O FRJ0ոl+L+&oE+d- @?^fEkoo\fyJ8zΰXmi  -Nw}OYpz&@>gݪHc. ]7Mz#fe"g\a@\qyºJc\3ܔ r'WQVE D|PLs\h_h#9Z-TdL>˼!WS/bniA3.1Fx@Ǡ3UNN^nPOZdtvWO&-8ךshveSȉ`wPU_cař=շ}m`<<$+UV66do88{ηzkG}ڻ<<7\jvg!5M!w&GmpfSgO3x? wZsLRq/~lK]QV:om<Q' R]AMXyu ^ȩ $}! 9LHaH8hʡrTtD-*fY]]wuu[bgg޼ߛ"ȹ I7HR7HBHudt *Ჲ=eJtj| #TI/W?{ΝO^'`v'$^E=7ITF2˵7-^'Z"[x ;[U7,QyWrr9E6cy'I gIRm2ZQ {0K,^H/>>G@l`T=FZnZH ѳ$m¯鵩KA3D;w7ŏw^J<`i$M_x8wU-,/h!pbP1|*k _U;N45jX_:]$ %ͫX+é Miwzz{7`fOE5FohX}fL}k%Jq_b_A54WK'h?:lTHmm. m&"X7rV7l̨b]r+ OpK[{0EuwrfӵFajCCPktMݻVw[FR(Y-VE8 P?)p>͛5 #TtF%3 qhk ;`LVOpZۓ. j&\Cʡ <*g!r)J;ȁ&xK0N\B&Գ$bԍ7fpt(0H23ӲG1d?ź bVֆ|\[w+tjj?b7hwJCmm#b.^VBDRb8E]4J 7LGc.Xd/a&ڎ @顢zQuֈ4Tqi˽èb˕ 43~,ymoθ[0 l} TCuLBt 2ZW>Eh@+[Řy0= sU"r];û](̏{e E=ma^2'FKv~.Оm0Oj(esߺ Pk*!3IBЦs4{^|{6k\* }XYǠD=A %$hǹWǂORV UBꯪr+Ca6 Kԣe :Zڿu6&?W&k).]%],lb7MX][H"}WL)RIrfr?AƁY&I~_IB${XlZXE&|w#؆`_vߢfu3fm89?9 ̟NՎ`jz1*.@爎܋`oْJ_+-4α6@/DWEjE}HRDl;Y+ z/1Dѓ(z)oι&;.4aZ#gsbZ+XWi;<~n"( M'b6!G lP<^\nM8--aG+dyXP^s:0q \p3bWu.,R&rm#қs)lej(^ ,=/FV6fj;ex%Dk%!FW@ao2QTvs 5h0B{UHiGCOzL'pbIq+'_1Lv QA%$[H~}{1fKٲ:HmWS ëd}2w7 j< O7i2G;SWݒ!@YsZ~*PƐ6xQܡ/9i7cGHVf3R>K2jZxH"Z")vHD} @} YJ64T(P_(*C]miSJqOZgA(ny8}wν37;?߇*x"D6HaeZ 5K e tE=H\ƒW8 72ym]Ly 1N<8͍@:> >6pӹ$.7$C$pA)hJewT*FmKg-lm*{{v\ܲsJa>3_*ݑہ>V5|WG_>RR_YL!RFjz S5fځO2< `}I\:XiZkRH*4[(xX$u|I9̺TkVzl_׼gC%*wXR nY)N.9+wZ[E9ľWJ%wp`Nj[.b|JOsdW,R~#* ĽyFdwCp*L(8OelL˞)A vfFʹ.Knd~A򥾺]Di(i]YʯJߟ?>w[侾7KK6w"!eDp5V* 3VEa{:KoEDcɾJ#oOU44lTjFk,>{S?ýSk>Su=|j}T SU.nk.mcŮ)RxbT<TV*yÙ<+`RC;S^0-itp<ȗ2IZ_0ȡVVKHWol9=fd jb%}DCy{sI*{ZL1r`n}+D_*Uz3}i779_kjxL+u ;FxL.mmQ`sKzK#>&ޗxiBV^\s3_XX_رC+ҭj|S kϽ|j|[X ΆBL.?\DCqߢ7nO(M&JOiݖw0IJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~ ׉_LpK-~~,*~&E()D9vyowy=TS3wI!D)J%OBvwN64;>FVWm S^Di*bPkpة?%"1#!ϼK`L<n-e2*+) X䥂C@v2l Q?(=0q MzǃIz7MEY; Y@K (-\U&>rI^2IMe;Ya"VN,S;o_%sD;fƎ.R?l ;0Dq>8zDKG)3o+&<4@n͗0EO94#ҐnW9 b_7}B2yːv/ąJH삻Ȧp$ȫވy;Æǘfo虔F¨LsI,KhW2!AjHE^τ _wdlXggΩr!jU)[%B\DCfp <_\?k,.wȲirJRݐ=>0+cvZ{HllLVAc۠ ^{6oCҏSمbȏ:sz 7jP@Q;[wg|z30Uq`!P-~|X3+z2lIђ:_p-FOJ*Yr(".O'qäfrCRJ'dc~h!€?`}WzBd;hѲGϲmT SAij9< ߨ%@`8xLTqė=,Mk $hJdx_r̰gʱhtG,KytomVK0X?R=Џ ]ٛa`sʠ7g&Grŀ?>r&z`b>&z%sxbw&{~څ]"WR%c"zD zA rs!֝=jcf]rmANJl$ے#ؑ >wTfGFF699<׵.'SZ*˺#-Jl.ZZx%m*| o 2ӝ_TWK4eRsu33'jRFBWl| Fgml0L1, y+Hu2f;[T0BE{:qntoT]okI, LgV_R:Kϋ0dP?= vE̷փ(M4m\Tk׉o,H=Zw/EI-LQ[ 8F/g֖'$?[u~fghXjݚ- VImKՀ,%ibQ*e97WKMYiHtXTBUDw-49#iԗ/r]hGވ/ lD2 h‘%TTT*Fdw">GY?"[f r5ʊ4`TAo4H5rWS8Xy;$Yr'q vUPV&4m/5LJE:S7Hvy.. kPXAl` ,e: E$@BKr.!{A$A,CY[EA;| TJkU>41aƜdcT.Us R&BchR) Pd;ʟHbl?1;_:i^mMh9Ӝ+,x+(‡j3=P6u>a}&b (0=.À<2&m%u9_~zL!S`(6͟>թVlW䨸m5ypg!2< PR%wC>ubvbF.0UK$K;؂P,!rA5%\v" [2gwdxJ:_'Eښ_+^Cژ I! v,V72UJLNITUKɎIy/R+=+(֨v6!M @PB%R--3|4-)#ͯ w.ܘ<;b#;*>$eG >3"و~AZ$xOUx f𜓜x;٥Q h X(Zx=`dš 8b†id, ϐ!enZ b /޲І2P0~ +1baktT ?g)˧9 С`.ޓ`>'4\DRdPaxԗ?i|9,t Ĵq]"m-9OD'Ex>#Bz6Nk%tm6BDzVQGq,2O: y{iHcy[]vaZT5 ȨR 345N@qG!fYXr{3^M7HX1ey87ҙ;NP9tn/D=}*I:2s̋%G{7abTBm6ۺ4JZmI׶Fהz\FD*rEyք ̣V-8ˉi#7XmZLW:2 $Iⷱd`U+z3 8"}Y\E^\Qܵ)<&uZ!FM)V"ڟ}&à/ ď 5 O546PW눤0 fGlEbdc 'ƪrӬ[{K("M/y%0=zFBx}{w6{Y50%,40R}ԓvTp>K@fR$7HU( /10f<,1BS>٨RI3#&&pa5j19#yTH9cI[էjU̟~? +7NzM`k|-kqJ}(Ҙ2SaӼGi ; b:`uǤayU}T 2Ftm̔%OpuDU0m~L-_:qWg0~huw-] NVrP =<]x;Y1iw@8,n\(zqb !$zB&5dn61Q& & CuЎy#c%$7]w'z\0Lk{8 ;fGS Fx¬P~Km%t3MccM(bCB$ _ J,@՜ %ӸZ;.6B)PT~~:_tHNITScΤ5_3bO6-[o 7$cn:zNqnE2~7\NT' "[fTT^2F&+c5r~ԕ(jl 48mWDC]X#<n_ T 45 C0 V~ m&AGA7w@w;Q8Q ?d9#1yʕq_eS]y|d*&6Q30J(WG>HN vAg+[o:y1ډGmUV'pJ{"M@3X|*oƙޞ%sfJ<ߔ[-0R'G i++qNPF\&XT~ykPx>–~u2LX'P MOW rة Z?qU\+w>-q}y/sRQQJ@737Ka[t̷E8X,Tp!PVK$`Κ׵bu~*LlBz-f{i8DbMp/ŲF_<`w[Uq. Y!'i7L' Rz$v]c-ީ%HY~ٕ 鞀ws{)Wa˹ԑ`{[z ϡZ& z - U@uBP.8jz B{GtϤ1ޕq# ^o2N*`DZm錞c@QY@Oy`ŕ^ )H??s %J@f-H%{#}řPKn@u5w:=YX9(5#p 9#Av(~-"]Qb'䠡ya '£ +vO@%7_*Z-r*~z Ց4!wBpG-q.a+c"wmqk=WfB +k^0>npu5㞃= m]0o-1:ǒ~%ui;pVO/a3;0oKܼL6Ed@ZU%{ ^ ͰyOVNHLmu?uMBEQ1\IُOui@L7Nk\dd[i|lRܰ3"rW^  19~(VZQjsfb5~Nl, $LAE \Yv3k"*Ie.gj4uDk"*T~~g^ ~<|1cPx7kF84K(/AI\%HG;'6`kK ZJAFqKq$5GT#.a;1 p't.t-SSUn;QY(sў*M8= BHZ# GcDS{d',Utl=,}*vcr+](_1rØ@?A[KDlv'”o>=ԏ[?Q ôn!ܘeoiB]u3PzP'ߧ%44Qw L7@?;gSVjgohop7syR\7V%xL| 3n|2Q|-GotuV֘Gk}fd'̐yQ/;^+b#&~ي2(ɚpTֆ)$Dru:5zj,|~0T\~>*,6Y ]7E9!7;au*8Y?Ң#WfiA~\mB\$OwDhE16:_JqBR%*X3 !O:`Iok2+}Y'1%Y GPMJ{rK w_ L&N NyA'ճmﺾo4gz"v;L je %Ɯ{NS6U'*@djNcvo^=Bi 795l€Aⶫ627ICkyV_}B.I=YR2U^c~o\Ƙa3Ƹ2@eU*Tlmcӱ~ xnNU)o`Iχa]PFŚVTC&ϣ࿋Y=d]/..FBXs+$=}buM>RWm6Ŗ6ᢐFX 5x{v*j;zv<_~AVUJϐ^IjQxシuQo=lK_ՑEkZ\4sqU7vOa J?Q)4C^\k[{3y~M|J'g4Ay,$0( jHl:Q"V҉1X&e s)MZ(W |Ϲ\88&tcpҔa͔ CC GU$^fb|8u̸&A֍9ke7;㥦koAvՏ0o5y'M3q"y$[Y@SgÓ=ݎP1)L \!B;U!)/C$N$A³ueuU},3Y'/Jc .8_[ON-<"NawGm_+yj~P]ſ^\y X,r-|㒒ܳ<L^T},^eDR,nkqց%|r,!gJx=~p{"\eeEN;Þ=${q@Q_\?/иLe>u#Mp'Yn_e<q㼅Ra8pLB=(YK[l`BKB#4;c;HS^OA>Ʉx\+0lkOԼ`Fcfup.wlCnKJIi]&fXPAn1کFTKBoI!ӮZ f)~Xhy9 ݨOC5&|T2ӲnSLB5eD0:yP;(w9mΪnWhKu{`wk kH>*ڲ1 wp5Q݌$;LvvJ1f3n*Tg@oO#9|}?V0M5.ۀz{" NK?C_$ P&B̆e>(qIu`|ob|_0l2WꂝsCܴLTIa?f(/+PIwB WhgšH EiŮ(G6 "  "(H2̙dfr $xZEP>ţC~EF:}< \{ % rH6N$(߫Nᷘ_%1]2:$o-8ȥ I-qt;'kTjJW^}kfQUr\ulNkHn᫂H*Wd6M2 *{`V%VRoJJ`+"yO|s86Vy8 :+;9ɨ=.qqѝ=ɥ^ӏwldG;fH^2`zBȳ ŞO*{M2MoR0i:T~%$9ED~cj<}${.-+P]c=Vzpwz\S;!?C:GFIױqYŞ ݇>;]mS)yrEz_n˕aI"l|sGvmߵ_7e]֭>ГU)i:D΂G}V W5*{f? ($p\)9D$ZYr|(4D܁OHʳ ;ܫv۱jxLr_r ;Wi nV|Rudܦ;@YNl-QnJȲc/14C:'K&̕BOJ{ߴzfsW|F-q2 ?}Y[pXdY<\v+M{ir8~LJޯ vlL: ?@o[g`}>?UrǛI2Lk.}GpI8QRV%܂L0/PUE ?ɹTcۼfHs^QMC!)$ ; ej uIy W6#LMi9ĦͱP*HʘFg]mߝn+|X$Z6K'OQJq m(B~ljSuZ ťbhWP"z@UVJ΂\,<\HA 5Oaf΍C75O Uݮx7F>QL~:ʥ#][eTS2%c Æ~EWg9i%3W4ފ:}޼0_X|-ƣµVu8H{YF"qĔ-F95E!L/3zLw@"FRmOQ&[#ZO/xˤr~9T00bܬ 4Pߋb>_nMFY%MOaN$ʡ˖~ &($~>tBM%^i3ϐEf8UB '`-icIaͨ+ دR=ZȾŁ=5U#5HR>njky/s6H؃E oLyCG/?QE%FvMMz)=ZB.ϡƋ/•3O85&YKլ(ST eҝZVx'xaV4Ë*H]z~h~ i0d,K8CZy{jCF')b|xNJ>V{0e#|SE1b狛*_R"37Boξ(p3_<ݥ%-tɫBetƓpx HuRuɵ)H?mf@Iz͂qrgM_D|Ce ӯ_wCՄYK/Ԩ 佨/Y0y̸7.]*ѳa !d[m9#{-;W[ U$mb?ci3ؘsq6ĂT t֠} dlv{Fyt/ټt̰KQ8 N"4ʻc'׸Ns6I ][#?wsb,4U_ f)Eď* uä6Go76ɵ{'CGa+RUA=@5_rgs1OUG*ʚO&Q͡4%nlc=%Z vY Zeਝ4? eC` _wvĦ10KB/*Brv4όwM 0r `$CܝGa6;g-N_&ɰ.` `0M/s\PMf`p3 $A7 i c(y jӍ 5!UiMSD-rBFL&^:OF-T4w T3c q]2Rd/3U\;?Up=@b TYRJ3O)*+sWu.[L6ǼA. 귒hoN_=C|HW Gz}w\2h{?Ur_ס,[<4DmD〷C/Fl Mr_򑹾g"P\TMIiDw$=` IӐ }6.jYx^h}]"]l 8"ӽ΃ǐL"Hڝk:^֖Tm.^@1~qxTlU#U75:LE|4&W25exz*̖̆;M0do^lpmaIS7kD#'͊$"lL?bADINmEh 8Ԍ*"vұE݌5Z5 `z~x[MN&a|b(ǁ$ch |cq)M_Ɔw>bSО$  Dpz!G@o3a]PnN2);K4 U"p+q 7bLay$04iCc9(6>E3a{ R䏡0`?s07y9'`Lq`ScLr&MP.ڽ,_ru/F=܏=1ltŜ 9>1lם KX_t+ =#ثL uuWK̹ u)F@jR_$YuBśGbQl+$,o8qlg!) n2QήU>Ytw(^'Y! %GU9, &>YcwU Mj"Zo6VWF9=al mynqA/2AI̐i qAN?!9NxlbO{eiYQ̶>SZ .&sbj?1_ǡPkٟx`дY!n6fVJ?ffon06l)7BuyMAѢ&m>>Nj#4J%&|E]ۊ:i2g0io*6zXh +҂3;1"2ҍ+O?KjaY|nMHpA/LsI5cu*ΐDx!W {|mpq%qehrYbBt M7uA- w%5,x+ z!Ί}|%wpȩxeXx|Yy$M}yAz5{+=}5"6~{άq~p^Q~Md~*XŸ~,LU~S@~5 ~+f2T"P{pUIpf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i 9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy }>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$y gWTaˢĮkTd@D\dPPp-HG&]30;sCg( 1DE*n6ܵaz*&>P3ĸg| ,X񦁓`S$>BG DǕu#i#܌-`xJ!wم:(`[HWeQ2UFD`|:Cd2~TvkdEeUb2̽p ʠ~[@QdF!7H$ #dLt!BOK*G-iCrB.UlmO> ,B2W<+367ߛ@ )۠&KO 0ޏO igm82=D 4FB[!AIb4~Z *fz\OtF&ӝN&3xF[Hjz&3n14bM zB! |+ /hw{V\lsTjg?қ۟u 깮D}û.5ʺ(wM ұ=Ljeo(u\ yPXƢ8p2232"uh0 ;(3-ybݷ3WdsF@w ,8#!H*9)iF^ P7Dg3I33D_)JQNdOm2ta':=J.۱ s`d+uu- ǵiȵ\L kw/i&G1|91:H^gW@-Eif?QF?/KvřMkz݈uN0:ӎ3BJ]PU@׊VVzDPC9>RTl{=EY^ScyjN96b~mwj[ Zl'd}[YގM:tU9WI-#d=sѣS IKuƷ6i/JO{s{c@6oPU,'9cV~M6IQ1WwoT+mlF0\Od?oi4M4MC%HfM[r0p[p|R’/Ld/_c8]׍ YpFKM(Ewo@jjI0/kad[H>|/ѓL |00SVRׂV2Cæav4x,'L82'7&n&CĿf]9-f]i{Ta4EeNٟή"V_ǔ3tf65ҷ, jP6Ex)ͻUSu@6M6dFVSˬGŦwƠuy@>.TȆVOdj?#驺sycA)w,zl<ـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! }~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2>@?nC)HKс#Eu$%`^>[ (?`~^x0_+OËv&"YD>s5x']~-if~>NF" P^OG# ǖ0<7ӆ7 :sXL!kݱrx{6Rt"+@q*7k1U誘Y}(~\H`J䞂\ 52[{F;Onݦ *C{2Hpuw0D(MHOB$vKѻX{'V' 5c sh]T4I DGãTD(2BNlz9eB_ ݫ.#JUbGɰ Pc36߅!3?o/˼ 4Ta1l-vKWZApɾ<>\Щހka8Z5$GdW#{{ߢ! e8l&Vlu4ʚ@ԸQWJ"쎛)9(6gf y'1?JL)b쭢l]4LkۘPpuﲹ)nCA Ŷ+2dEH'Hm&Y3uѷkѽӭ1n]_Z<ڮRvӛpjm9G݂#j}dA-uڠ 0\C"dhK>مٸ:IFq\BVhF'$[I&3BtK\ D'`;I ["%#N\I |?a8+ş3"-Aש_ZZKO%u6`X{cͯw1 $+OM{'E],jz6+~ Qk a=_/E qbVk&S7fg\"&]KOÑ: %ijeB>%j:l=T1e~/ߪg I0^YV)<^ϑ% զՏQS-WGpaθD8ߠ9D֑ՃXM' UJ]I"mteuuE)-3`Ҍ SoO6Ju@$ZZǚ;oam>݄92)@m{>-V|WU>r$Ӳ]qّ¸zEYuɔ>GT@蚩\'}њG9mp.d.@L4c&,r;b ӂdlt3ݦ]Q<b-w Nk k bK%H@ j"W4sf|Aa{8c%J@bW\E':Ehsř=}9fǹTW !3ߔ% פԘ]YzĀ&XIkWdPيb]9gbIi $ O1wu_)xS$P)m/UI .mpsf5Uwl}oyh 4;=DUIKSDSjj:?2*w0P4o+G4O6jeu HW)ϛ=ݮȆs51 okaIӽ֒Wo0%>#}?V5N_r}%7 Լ{!`D}K_4 !Q\HҽzȔHN>uA-^Ჰbg%+k58W #wi+q0khcuTT[`5Z[`J &-v**cs0:-7o3G(Z!d  z Q}vx'E}aQ#*'viƷ|'in˵Y;eR{E1vikYT24o/;K |O c Rr_T'UtKyγzaL= zs#k)|OĀ܇:axim&&^cŽoIѓ` W82K/ױϬ˽^ipuO:JD:WtG<8YJ] ՄyiZP-|xm4rQe`dZH ;4SX1̚`wpu>7 H2%Cd>zES?+&e{\Q>+) ^T9ZPFV+@l@ A B r3L2$$x *,^-ڷ[]<**RInpdk ŻΫ :C>KXi<_TTՖqcs.JmZEŒ:^΄hsVIbm8tSX&^ a*Ɋn^m=A2s^mICca|k`K{"Y١:nf,ڱW x_n~ !f睥# Aɧo(u gįVg攷E)?n/ؠbdSu3QQIB`\C!d P,2QC[Pһn`RXYU^',|Y5G4-},V{:T5zGFdx|4Zٲ u'ʦ"Ww[f^'0Xcx2rKJJDJmB|CÁ=55oc/hNL9'0jI. =$!_3s^>pX0]ScԹ`gi9Q?+,O|ekkC)6bf!),MjQZF_Y[-ۈfiv&mH!`5oIxudP#F P&h_2nnmMsC?wOt[Pk+jnA ǐHځY*zל`L﵋TL01|w:44o(%j̨5YJ_|fyl00DO+/.5T"$8[g)T`MH?Ɠ\fިÕyL/\Zj@Ν(Wڢud>P"Yd'$$ʗVJ+W>pG[^Gڻ2|M 5kci{ZJbILFPCR7<]'wKÍQXb* $f»~ ^̈́:)]}pA(+RXzE;b1t!9ݠBj` d> !L7gh%7nׅ _Qg1R2Ǽĸ:@n\KX)'WIC0hݤ!XL}4l5 Vh2,?bLb#(sÀytk]:ibP_"2S&F ߆*:/~5l6fݻ Ӡv(l1u;8qi7mL[@Wxlg Y<#nMDyYZOEX;/C<_IfGuROM++c7S 4ƊaZԃu Mߊ]>]o/m^&=Nh̕.g*>d_$ ]koj-]wz`g`@XRSZ^6uV^og~XQ 濮a%{s Tp4{HLydW)YU&R?FD/'gH7yOG S0᪄g :po)-.XF:e*diG{.㯙nwn.tY<"`7dsSC!x$g:SX9Y%r_']4K . q cYv.㏢Mrm*ADbW냊M1Dqby9mT'buq7Or }yXK8`微.;~1K}wҭrB;ҏޒ &6 Rr*?j䆑lugICkM|vhZYHn8VzQ3N??֫zGP5|No(RGJ[5&Hs)qq}^&2n:zǰkFmP03;7Nsi+ZiӍ ^zs7Tm , zb@p22{96ʄ/= 4)c x t&83B-(;^SedSy7yG^H@Es7<AQ|h[\jeZҎy1|i-M']|k!3h{&m5&[KiK%}UEk̀u hT[*FkkOZ e ev]G ؼ;GLW[d;oo3xY{OEk[@|l2섐^򒼗F6a 9uUQ[Em'*uWAw:^WfAw:Rc$DZ9-N7~c ?;A34VfO 5*DvUe_Rqr_pMv]{қ[;f4( c5ڑGdxEjO-n | g8 KٶŲ]{r3J(?ұqlu;S7qWA}ǰ=o nxg|GCTpTaH͗O0U`llڤClt0jh~pڱY_,x',IUjn\[M zDBb<Ô]T7S0Co}2%sF͘MQ ś!7fSѕ&.!mFk(+O Oȏ@ W1fG 0JZ-#=qb>@@gIxFz|޴\E=Yg6atҺ*SY5T9vh  %2{}n}I90v zRf8kOʼjVo:*xH3_ 6WWx4\;5juK::i7rʶYAd~X:J1<;e (;MsrlڪU[y5vw(k -OlHWeG㐣݆L9sŠFp6i&xИp0C2}TxmCH#ѽZyڇm{+EAaWdVSy%ې8bש"SLL14$Bs&Bj&d@Y?O+82}-D^ݒD(PR{Ѭ.s!$4Pڣo\i(#u"D8 :]C>6ڒ׶*m@1GQm lìOrusg# tk-ۤ^G) yۂ2b+PgDWB;T+4Qv{9輵;!f6~/ė|@r~EM$,<`2+oMҿ$ȵk뤆)<$\nnu|LX+z-]:r"Xꗺ.KW;–YFC :Aǔ+IU u+U>.+͋;SN@] LUXKx6 ͑8=*U4^qݗۥ>S韒+Ż eLsf v?m!'粈Yv0zْ2GwT1e{BHM, &fr(y)% P Ehl% $EVDĶt o \~6-s//E 2<뤪t :mbpVn(Q7:ziZNl*3miИ` snX U\Пbi0^Kc=!!{pwpyKH&Ș/UDg#M@1&yf_sIrŔ\ Bc7HexXltbu!hI &) ֩ršbps;Cu GFq~~c6RbO'l"<͖z [T0}5y V|EWrф\2aAA0 /ɷW&aA AK]מ q\kPU"Jѻ?W{j#'rG^$U)~VHDTup7eÊ⚊R"I^w0^+mOXiMi-T5ȝ'N]~{e r5Ճ-wA-VYF~UgBOJt8y0.{KO(vlJ uS0փyk^?6Wc+ Cl]Eko%ݼ脦g}h0[[tVۃw,U^|}X?4:a<X s%هU)<@ZQ/[6 . 0A=fxIҗQl3\PBoJ]Դ\>[3?,ЛMOyIOi> '|2kxo6oy*Zo9XYifNP?1k𾠣 *_BupֲB[ 4Xφ}P73d"dٮ&<ăT>x4Y"GXF%Ngt2S 8.hpq܏#~2HleҢ(j =~n$ Y9PKC‰/q䢘&lrS1|8+ۺp5q Z(QӸAX!\$$$CsrL2$L%,*OQuOłBuUX뵊]xV~n,[|nC -bY@X?(e92"կ)fm6@>_|Xȼ L N+VJ2v&ǂga:y*=>C,꽅zqwΣaVbP$Ԇ3H* |tc^7CvfCUʆN\A X)MȊQrK{Fۏe"j%hCi24.$ҲɹDӮ?2]HMtaPZ+C9J*_r%QNH4r{W) |em}^e ٻ .v_.e'T)V4(FoUgzf0=rƣ[(hGjKҢy}%]ʟ%(y쭬0L1sR1w^NJO7 نyoxõO`i0)¿6T@JJL#״C[!)9!w+@,&TQ0GU5a 5\1(-9]s41y3yʍ/ G䇫~IĴ41_35g%@.1N§ N̡Pi'74@rz8Z? i;f cENOri@Du{A6.ѱ>1_:, Jf?/LCNN*E]٭!mq=p)ݍ cFMH?b;t% 7r~L&3>ﰞ~6slD'9?6T­ϙ^ 5; k[}gX0^hq$WKJm3qV/f̔&|}31sO[9"6ε6 9K+|dj8a&kɐ=9wUͩ?|0,lugzeU,}* e-^uGSoy77bC#Qşn[,( l^ 6!ʌ>":jbiq2$V1\$ǕwkGԣQ%[`ѐJ Ή `]+Y)u!*5(HIdaoElw17hYxЈrMyA39ScLYgBل*dlQ P/Džml)IR`i?ĞAY訌:et/ ysn琸M>dSG&HPe*p:vFӫ}9|%*CdڌTm ؍θSVkq~VQ< f CB'LH? 6ǍZWzjxA|+cshi#a43 KZr?'H:m2AĽ eЭdcM^k^Cj#,@DL2I~tHGǫJ̀e W`_qZb "pp߄CH I&d2L)xʪ*jXEtJJ]EZ_=@XY#>(UT#tgE UO4E]cDix`Ffw0b(U Y]sAvjfhw@A,bx#iu+E_Xx˼U-EW'_@ce2b1( h^EN `V[@-kbn_Pe:60lu-'\j|Dme;tHGD˪&աD!ߪ@M?B=rΕtSwo2Y!;DLž]򮆁˶Rf;˷-r0ۏ첸R}"?5#mk+3((.RxP{K$ ~?uX m(U$C[KIl9vL"F]C2q.OI61Qx 1iQZxle_)O&uZCj7$6} A~8zXmb|n^i>]fQBchJDj^ k]rou#Ih 8ЂTc1)üW+-*kxueI~PE:LR] &t-¬^*$M4-bB c鎳A9ZuKDۄT}pp;dzx0w 7 ? rlJU/3BK3hf@jm1RזD*p֓2O(Vv ndmMAO;1S`M-a6)N˛,_ l[c.Hі%Ŗش+#]lcٶ$ s~&b~In^Y6-쪸ʟ/FRa` Ei|o$Գh:)=kZv6g|V'E;R^t\"ZW YnN'⢒LiK[!6bjnf$=+ *.ӃKvIchP*%zډ,1-pGsD8DC7x&X8e!j5kL4Y &XqYLA)$]s_g^.[fx́{sHq  o݌ KFaa)1$PoגיDO̐Ńwq?0$װޮxYZN8$8 _ُ$`lcZ6ݐ?ȇY+0H5zቔkQ}Ö!~QQ2&P{BcH|7gz9^sylu^A ;RckU>)vQ 8:oVcsK68#7>^nNk_<w*>mڹ3"ΨŢl` D#ޣ7W-#hD:G"DxA4 >X( 6b-X>*'qkxOOX+{5| fP|~NEzEy?|S-2<3}=`[~#ltGPj_ _߷,cn$kaM=UlMQ"gɆ 5iЉ5M%7R%qvLSG[]]M vKsw>q| 7pL=#.[CjϨ^wUOlTvCe]j20uuFfձʪ:AƆ"E*S'_ !Z:Qpt47rv윽Ys9{<Fr׃d+G1 F~ /bm1&&x, ^ LtZnDz4g?x7o߽06m3fB|=ksΛ 4|K5~Xp%&(*,.0<664^?|X@`PsB#b$ PX<1A͹O3l.O IrOS#?UBP' BPT;} *~>22 EOL_~[ g ,v,cy]zFl(}FVύPq㫪J6A$*H$Ρ`v0;f×9zL2ٞQC|QM5xzAR+Ԕ k*xGjsH%Ť^Vaݼr~Lȡ3h5$؋#2'$ ,FP].V!foDc&2`* _'ǹ{# ݰw%{2>aQ*X SV*5r1V/\2dL9x~dE ]0 ^z[AKmILŤSK``;m\ojc{.]w{]}A][UT5䄚T9"#֑$-QJ֙ (R;7n^윆a:VVTST@e& PkLlvw6ԷU8{`>5#8-Eʦhc5Ij ɱUx(EUu=XU=ux}{tjG 4a(=Gr(nËqZTivU肝 F7 :&|ؾĮȬ8CLNlG\nt{Bvx~T2?]ъ?:B': nAS+w."nG%PBRBz^MLpz&*T@ mHh؇Dc΢&ZT_Wj 5yI5LOї5m һE/`v0;fˡp;ϙ־A}UlK8SQC#kדtYFUVErAF̾!b7E|{e wY쓌E8T@V4U4<7IIiA(R@: j:8vug*tE@EQ*r 럄B; !rIC@V@]_ӇQ5UW/)aY/-Ry%F2"  InK/i"tY{p8d|Q\Đxi'6ĩ/UUi5gԧyebLY(ke&\1q(h-Ev;wΛ6 !5kC(xH@m՝N&וy UFeaf5n\+#$,۾.wAڐ&T%_}ؗY6"s 9G&j ơR9aWLt~-m ANv$&! 2p0t{z$?5Z uTj]Ġ`9t& f,h؈!%gS$&T<6ncK /'z&bp`F*8b(@H3x!}': yo8IP&\P{C@Rt(ɓʌ*rH1𵐗&dx'McČ`$f>m|S~䃱ؕ$x0mq]Pe& i#eF6AWB~8QChiTɞ <|]z[u*nz!bg9Ԓr3lq Xr3" >4SPh=m@A8 {Ͼ+\Ǖ--F3a@4M6;ҩ'Z8JԐpjj6 DzQ0'չ=;Qv(X N#0-z#}2Ң>ƾ#Ahw8Vw5C/[r:mU5fYH7H)N6S PX'>}<5ӽe~y'NNdtOݗdjM Z̓x3YAdECM&-ڀjG ož>ْm\-u ZTS#%xG;Ѣ8]0^`#Hƺb~ںnA-9*ViTR8 `'yM>aATm#GђZVZ˪ݐETD_l }mϒdo8zPc)VdjGT *:YϪ z*MSqKP}W7K۫Ov*om;Czzqt}JeVl|eryItV2j)kb腳h ?|lIlN^mzQr}\E+ݫl([Xp1ٔZ[m@_Xi䮠pvfy?q)?GZ3=@W =T2lvsdrڰP챢ށzE     q5YTp yOCŻReb &l[Ghmb9M%>]8!p~{gkl’B42?ȩVnI6 e%2G-8o QP6ncN/J/FQ&= }-9>#, +>nƙ,Π z,>3'ЏԍI6Mo$GWdosfܐT:jGyhKڻ)k[Leٓ#ceA>Vl oiEǪ2p˪lMe.{J~IT"Cvnc53}-"ÐhI'ِ,kHM"D[YjsUZCM:fD˂+)U Naa␽Zfk@ 0,"IBLtrAlĐ  N9Vr:#Q1ha x!coDjԀE_dLqi&]8NLSNIS/)WKlƜ5==\[jTv]٨@(WKsm!fwO)iiLڤ?鑓#tɕOL=?ٯ9,o9̳t2UAP@C6-!d!@ BB6BĂQDkop94Mre9*ӍRMd0W:rB5*G1GRBd; ib"P'dh8^`B5yϕJ\ L΄*nW2b߭L)3t*E&' sdr* i@s?/=:Vh,~ߗ;{u15k}6EnA;xobhS$u,N%ɕ8j 'q/qO=`S)г ,Tרs=@o5-z$^˚Fk3(lUA?5(!4v(_uw1ff:w-}hXKvzqAOQ NϜ@:&z$B/ $Gc*8?z0;ߗ]/ZZV#sY]X&qzlKNCd P¶GFޜ=;èj!,z5ϥ+D`C^n"NJf90 2?}ɉ=yΝi*mJnL6M$_e A ($eEU Ȁӏ^9,>IoGs}YEHBWh֯յYTwL3rS1MOeS-)*d`[hh%؝jӣ͓\$|[XRK@-_JoЌ+כŋ8V"]?/&{d_$]B?,kʯ2xF5xun#s [oyDs?{how1,8 fL?CVAyE% K.?)-amU [5[ڜȺMtM0o?s}*Ϝ|-.̩ {JZVu (lIneC6%FQnj̍;\M{w 564q@p${{bKXQVx &\^fA{O򒻭m.B0b @ħ/d?4m/o y0wA6kloz=vVtbd.RC{,DŽ4]@Г zӁ4#L#y,xK|}]XÿC>A𵲇i6pD1|܎,HψP(@c ii@Rq2[eaU^FR6Jz!` {v' fQm)0}^(6Rc$5 (r~P,y9wM:(^։gDHDϡyl"0A4t!5F5bl ”#@ )ۚ+Ou`;\ mqׂZ4++'8bqu2ǬN Gt$ F7 G,)O '6bgSo/+WuQ.mlc`rj($oQM 0rIF?i#@I_S>8Z7gW-[ܫ J?&[1Ck\B"mф;[ 7qD $fØt;Sj͖%qzfg,;-^Q`-}"ҘGHv- 35Sl.J7oÉ@ 5pNgmwٱٙmu*ꊸ/#7H NH  @HB\$77!PxE.ov[O8bD>Π)Q6AY-aWjLGU-oF7k1Fj@3\=ۉ <'#Gޙ?uߎo qxeP IÉh1nzY=Wu Mզgԥ'(e]-gCGi.];^ɹ>~o[?) oOP^M!=aǠtRl69m^rU4\ O%%-,O]TB*s;?Mw+Pmv{ւC)#HܥO)ih\LC.!K'b1 HQs.w{ϟ/2Tp c6#s6"bI)i+˰exVz:;9 sYAnSKG?vOW{$a R*ը1o7l ˯WC^kh+qf7 :B|J+*u}B2#PCѦˋS%e*:g cCh܁li) `Fm5{kï 5!>s^sUXt9UJ厓7YΆ-P7 $*gz0W]yl`\:XA>s97<5'&cE=ffӕDdyix M8ZH6."4Fm Iz9)d1 ź F+)mju@a7gDfFiUcԝRڊXxi>6|XG/@@+$kaQbќ0/nMҋ]%:c!רZTxY jq4Fּ]Xyw?=5a'v:u]㌵u=,"@n9 $$!+E@AHGBBpEA."(hA P뷙ӗ}Їw oPEiԑ9qͩ[ q)Q<\Uh.gY}WS(35QEJYj)zS h/Pk<^~'?aS| A :8}F/R+|cha 4Y^HjZU7 [C1 ?w<}Aw{_Kyē]Pmp\+ؐ- TźˠRVYĐ[tX;-i(i7[9GPq4zg6@0=4kֈ\c-MANTij *A+7V |ZQ4fmld/ 5@ ݽ#]w̋Usri07mN wˌ|!WQRQIc fWlerU:Gg&{ q? n. |f0rg$u͚B869A$Vˊ:bVoi L,EUJ@!Og)Л@v4>4=A[+g $fy4"nv,9r1gJc:5J-AYL :J匞Y*ϗȭy5Zg!W6@@6,GDOMBӆF`+٘^-+*uj/iuUcnC9K)7hsz 5]Nٰ;Td~>TJ4& *ow} u?zXcΑggS+~P2u.3MV&*1Z,_e%I#\iPpYRg/PphmsY}~'kGs4Tj`ޅX~>3en؈24"y 'ʸq~tZh/5kofصOa8s߸F_$@3q˰>'n9;7^^^=1.5?jD'_X,D,Qn?t/J\p &w!ב0؋gTStZ*j| D„=bCB3WYx{ot}5[,w$ 4LBA#oaQQ\xąʈ}IHNK ȇߠ Ke's}*_};v$p;$p\,1~ ?$  ! 9~|?}SRwp^@YH{VDrqQ"Ş'VpoTU$VdDױJtzt *BM"{i1a=~oضR[ Q!q/eUV.yVH[(`IʪYL 1KWiE2c9rg0]DgQ])ܚd]ѯWiMU}:o@:vN?ćѱ@Fq?.[cT(y1oM70œh~8Jh.#lQDҭWF[3j;E#@O<~.;YKhk&qtd=rT}J+zPUX}Ψ9gTz<#8:<1)y/%O$yevUm:>Cn^!R$,@P18Qr .eFҺs&o|<#AD1@q47剜_NJ5yvAT8a@Â*2 hc^3~13JEi颸r!:Aj$U^NMrs!&xt~8ۀ>4@sWѴm)9PV-kQŸiP8SYFR4c4Kl] IC4<Q zás!{2 ЅfNxfKH~JμΟuF^4܊prfJ@г:6BRBd Am-[[ꍏm@Ch[kd+>~r`vS!CkBD+Y]d=a&JD;Dlw؛7c_so` y툈z6tk4 6֗7Z *-Kآ&%ת#qfB׆cʡ2 GMTC?.X [ZH5:Wt6譥dUEFIҬŋ(ZǗkxZ,z0= >=P~?Y9=1y~4tV$aix%A!jLsLdEԶrV!tZQ<s`i ,{߸?xQ#/Ne`%zyx+UnGz)xVY'iNCV`k"|FyT&`y'_z>#n/F\Lz2Cs/)Tb%Ӌ\8yU B+|Ȫ/: {7Ӟ޸ho;A[,8N(V'O7* xUzjޝ;Wd(aCV%l`PPyp<}捑^gՕBkQG5wa…g7pkŭYlhd˿L^b/IİK(9w} ۿy7S[Zh=(L0~l.}-ZYn@."@P gSDFd{W5d˸:n8 \o3K>^=ݻ_%%4$&8 j%| A oմĶ^Ƿî:fԌ& 6-LzH| b?ӑu[}U ^^_b6QYU82Tݘi-434o'iͩZRn ZoH͟sӹ?}W>ߪm7 b#1en ?#s"*aQ{u5k ixtJK} LjH 0}0:[gAM vtv3tљvZuծ]uC;rCDD @ !`BBHHBr;\BZPXnŋu ؇}f~/76ذQ @Bbh\Yuun^R! lQwLs6H-M{#RpRʒKʓ7k׌MrM'?gİkS!" q8@& xw3KsޖG!禼:􊑟 %X~H<齾vmWkaİu~AD (Dh>F,AC~I)o|J"&xŭԤǮ03bgF}PM}3-z[6|ǓoK@C' 룐A PtD`#c{xʢHjl80bÀ!s'<jc/q/Ӄ@ | 8- QMxFeU>iHR|/1{.K<['-<+AIgPW7 K g N H]iD/X"IYEMo( g]Ytd_6]8|pR~ =)L}Uz{@ yf4HsRA:VPRX[CYqDu*ܹr. Y%3XlsZ~=*UN^i\U^,t{gP5y - AEr(ӣAeQq>IY`<<)`?5Y^2]b+0gnϪn]T_\Vc/=˚%>x[@A#I=,-B- g Vm<Ǿ_%߭PfZewJ-۸?{5# %SryUC ݠ>Ф'XʂRlFyCrsTI0%ŭҐǞ݌!Wi KFMvWZfC?]>jqF-VTyl?d^6b#Sl0bYKO̹4KftDuE5spx!DGSvWLv|j'mmcUZգ_E&Ѕmc~0 ֑ܙyWk:nv}þv sv$4y4A֏K磻2nuJUaDG222qwQ؃RpaWPgM/ uLnmXivu:3_0%yN䍡I/ɴQ:8nj %bP,|Tv@^@q;$8ΐBOGhOtP___r:!͆i`=li_(x1ra q#Ь$ $v@mdx8$ F{8 ;("a)^STS 7 Ә>ɟAdL bc!3쨠bUom`kRS2i@1ȏlr>>^@=͚#K+ڴW+lc4`}_81CQ~u6hxF 0l? y;H !?)|$Y"3?iV徊H!fLSI̝Itx#{vMH!!M@0cr?H+e.%fNMcH͐/dLk V-I9wȫ_G 7^P6P%Ȩea-\`XL)jYFX| ך3"紒jro/&ꀣmjv;!NzA1 1+d)VasYV.o*X0N?'Tg<'TZs{ZI=yw)=?S4О\ p|*N{?(ы Q#eMeXqiJѳRSFz9XFRwOMnUzwOqKqOVgKx}E5qcu(:ʢ2 R^P)R @JHC"BE0 A\ gnև}99? ^!HyYz@-F*#1KcH9}b_Rh2/s/gf 97y7 HPa 0WRX3aA *v=A)%(j*5ybf?7 +@\MH@2 P7]APeB<*#q r|h%x\N/bz|VViè- 5(n@ ^$k $ub wkd߁zf0]1>F)\d7KheRUr:[Dx%2Q5I%euaYI+tJ^%(G-il \~NSyU0.FyaM𔋵dCPq d&؜L,QdJ)BJ)dB֋$SC wNyߧ6Ʈ6/> qJhMIlm"Y+q &WQ%+ŕm Tbs@@ӞEoܭ-~b0䤶2'rą >UepKyBBc^3XVVIqUz1 >7O;AtzB;~ICțF-LZ,8GK(^4#J]cz9@YA}O_\;nzGPLh%%lƲ.I*\Y(ؼX%mK$ik ^-!Bs@i ?lu?ov9цwD%HS2{31| n)c!5*!/Q)Hj&I A |sPsp3F>M/Gl|tĺκ>mw3ȭUNӑ98żbt,Bw2IjVs:L&9Z&9&^ MaݕɤvOeq'Ey+_hbh'GDzCȺB(kAzE*f5Ό0"4ӌ)ftPnjXo]+o?سB쨅手e36M$Po(u v02`Ry=0^G/z*TN k㷩a#3 sr%ۿ Ve ˴?si1ߓAԇaqIw3SY*v5(Y51讆to40xQ9rl|Wӆus^Y~mKw|NQ^#Bqsғi1s̈9Zn0/GϷ`{|{cn[:6-2vk-oVZm-FC q4Fcqƴ(c j&Rߕ}L{#}9,Wϼ3 , S!VCfi}ؼþMGNK?z8O.{—`bc?[BD/b>bSPo93){J<#}Yw:W@F4 WAZY۾[hΪ8,v ]#xA7̀}@a zZ`C? O-"ܖ#>65ڷ;2"{+vM%\ -ypI^vq2_gQMg9=ǥ=Gg>(*(Ȏ;Hd%| ,심@EERVOU0l*wo{_;Ci zCg н|_H)Om;ݠ0ʃ]ʬ_Y4("65p`63q' ܭc~3!>G P~؎wr+ ..:rN@uᎅEc *lظ zHMQ xzAԾDkW pN8t8@`s$@fka;PYln "b HQƺoc.᮳cً9 ܹ11?` v뀍5}wG!Bj/YD}鈿S +5wqY.棇xcy/q14o(v7kHx AAn8x|A e=1ı.${5pנq &+0ȋ9 55l eԄJtJ{UK?Mj>"k>G>EOsE7ڙ+2k1`0)쉑KxP{ ]D#؄t J2:xՙ&V"_8Cj71RuӲ 6YPsMҹ>jY,BOz;[Rd:MRhg75V]={__Зsbc kAENBv?k|?0j78H89PE -aoPoꤜYB#k 5*a\pP&k, E|>O<3KbXC㟡m+y~oߛ`b<&Uȥ\59颦lY€VɋTg*uũ 6cdJ3Ft@6cv`^GKq;}^] h;c;H N]/eS  VUfRe $7eMZYWF0W-3|@oΗ l1a ؜um%]V;B=vB\pW-%\gKERSy*ʐU(E_0}&79 @͟ S߮\tncuO:>hp{+!Z#9RM2Ǫ* KH)T*mN6M2յ4\DgB9_2?B p%MumwuL@#pBA^ ST::8iQimlY"YY9}^Pd9(R6 D)LI3 %8)|'r2$E9)yW ro?(}Sӑ) ֩ COǥ]%c7M5Y,iY!iFy-_RM-ϻR?{9,Rl|RRF$5tYqE7 )ɏ<ޑ)  Y4PSF5;/xWg-^f72.ԊU!AyW2*R/}8Bfzc%9gʥAgjĥ:NwJCrgECzu6Wzsmsw~a5eJmN qȈԪkRbWH:&*_V/+w_rDgfIkU[4Pe1vGO}MO@ٛK_omϕY' YwFHNM?x=G_sb:Uݔɬyɮ|ɭRAb/+զtU|J WmR}mNW)6'|cDŽ6%ňw3\Heܩ%w_J{1 GV(d2*uTnVyxիE5.vmyN5ҏ.b< >oDrZc}[-U$rD$j {.TB2/^#.SjПS3gi{ݒ>'Oqb_B]\~gݑ&ft{w t\ ꨎltz9)z68D WoZ?u#ꇗT ,iCzҏNF<,iQL?ЛO`S,W}ueyUL+vS;3$~S' j#*eߩ]o^T,7Y+O;'=#e4@ӑ/rdbO,B&xȏYhuX#wvݗ C3깢L!rL:{NFN&&%ST˴}P<4Mt /fVwWkS%*4ҩǡ; Ra:6p`F~ 0cFnuF##G! E$Ks@9]0D Te8v,`X` N70I>~ r>ę["fȱ2E>ރwf6uw r3W)˕ 0b WS $x9[LkpXBA{c7$;C#@!MO/ X/AbAh)c52 E0"Z+l xj=ir$5w« /Urc3\嬃hD1w!av%8?)b|Jؠs~S6$ o=OQ3MAdpm:f2ɷ@Hq$KˡS YeLT~Sz7I}t _(Âh#t! NuM5exuH،x1bCp = Ȣ{v)Ki5)Zޤw=@0A}N7PF,`Ȅݾr<`&OlX+m$9CiFg#Zd= ̠W5o*oQ+~(F{.0F0Lw$sD% lggEw:v/@2ڿ.bϰ=l.R-:{RUp#V$BB Y$9Y$0Baod(PW+^!,E^y>9/yw}qzP!qO( CT=gd W o#oŸ_F M"#Q/IѯȷP(7b5. 0w~B~`9PXT?9; @X\V?, !tǻ4̡Y%ԴjH#uz:~CCoX}:No\{5MU?ͯO+r3nwfB` 9HY}LpuD(09ZMF5M.t+y&A ?,'L2򤨈2% `uM%;Ěsy~QC| %'bzjb72zjRXMI\I-)'Kb mB\@ḨOH8Ww~rCsk 3s63Q64r6[!¶K&~˙F"D]?L 49.5%Y =7pH`1],Y1W|rTMOweC/0m|L"H Qo\JhKٍU}_6HϵIӹ{n OO?|{e/ʏU{Pu''L٠KT2^fq OhgK ^\RQ?& lLjwxѬw݂{"YMв֞\;Tw}˄ nʦD֤ctB5YN7)S92 C'NEEC,PGI1YR PJ[rY¹}'}K5Uv Y/Ηg1c|I'SCR(NYd*R!Z2_ɞ*!hTAc2px3H]}=@]_Y0^}gwt# cOU EttAVJNSrY&U+UJJE1HaU@5ikwxN|ҹk5zC'KԘ<^-j3$/K5u&-Qp5 J暒Qr4rn,Am@7dK[>Tluٰ}së otxՕ`ߦ*P'B2p5 (\R' G&w5\gZ׻^<|}WwVPr9꘩{.+a%R!(Pq9g83mRa. $rt >SWV:rk>WX}rKEGK 2؀9ZG@$Ub\TDc+شB-h.YK}6(E[%XӸ$.wBly; OU+ڼGr꽳ݳҚ7y(n)(A=Ǯ52:ZVf$+̂J]#EOP)=@/q֯/qxpoӡrΟ}=K+3FNȺ :VMi ӒLC5vDS7<]~QmP.rF/Pm`C߽yݏ:6Žў%GVg  uDЏ fB)7^^Lu)6Z2>u䝆c Ъh](VED$ *d/FI  Œb#ngT-.uGܷ0n B39+r?%RC]9˻RzU.y;w;l`Wqy-g?cS_iy=*| BKZJO6>b)MSXT*4VUj^cu:ZvctWn`>ӳ~˴[9N;W/9'%j:f8#mϲLviTv:^֚ۖǔ.[Wd1uV#eߴj%?Pbv$k4mv!&2yҶ]7tG۝8 /t)]8IWN0׵^bvWrRsLyc?=*˷ /m $KQ TL eP`F80+c_ĴŦXJU$& U% J>=r25j"#C##KnD]=q=ɑgDGw>ѝW!p|!ݲ7=^Jp|Rq^>(9!Q( HaY1!;BG.;QȞX?2n )~c3:Q/H&à r"d(|!/1B?T`GMG b ֶj+}<Aw#` 'p3nI`ǃѴ(ȦG@=# :d Ry=[9}Ʀ߷ V|aStD}Hp GP''C>i>ԓ}<9S|P6%_z=P5uv1 ġP/r. ܙIH@Z^(%Q| DJ/&8X`a:$I!a xa;{K!Ȉra93aӡ@ eqqu1Syn-\Hnlf裆XT?go"aHi9C crY3aaH @FVҖECm<$ 1n&x k&i}V3 #~{Pi کaa5, >.A C+Ĺ!<20DC:oe@Xu QS|pS\(nD{;rPo,'!6@f A c8Lש( _6 hLj] 䛙āh'#NwY3a)X<,a&Fc42Q)mkD,Bg_ ܒZTO.P&6+%_e- / _'E}4pR4Bo`,L\jV[x~IvX%=!+9x-7+__)[T-=YsSn\V/*G5f. 9sPl8PY^X#*EP.r`i^|onI)k-筮EҗvElSecM셦Y֓~G>A^W֯;8"߇UcPwGs-}5bc)pڳS2$kw[4UՇ5wtO7T]Kzuᔦp?VM63rz\?Y Brs9z!p2;ik#|r[a[!g=,Ʈlׂw1XWef ƫVD)tL^Nn?Γ8rFJF7qxg3Pr|UO3& S5`їƽ}/0~_5t<᳷9h[C䙆xO$_TN r0󖻍\g'9YߎAZ-՘MOd%LM59U}v!5J@XĖ1fGyPdвp.O80v9f< smOvcb8fZp(%-$T,,5K34HDuQP"KٗdZN<9\vupdi}{>Q `>7ZNHM$RCÆGda+2ZB'pĂp2SHr] j yhC_K^hyb5b=lО# pQ,[8XG*cE_ODNCVNš)i8GU;ۈ&_HfPHZ!I!q"EmB"~>"pg#!(Ohg3aNQ4NB8kC{-!v,t5J d @T~|p7c1?#HKAo*V"t@' @ P{}dY7` b u: Z34b(@,i!֡%`D(0~N} G69?CL  [(B[= q.Ш=4Bqq%xg`]y=;{5x5,k 2)Blp'0\Wx@c2;U ._ QM;#tp[\6scc~pG{ÜʘT e0} 5alZ(~'gYb.cny8=לOO11v {*D̿D[!އ-L쑾h hśH 1%:K谺8|H!rP6 ca=,(^%~wBx/[bE܋=!9a grܑN6C=ڵQTUnE/?%'bW/wsᓸےRȬCAIɃL;8bXɜ!|n>sZzs~Ē7 ѯ4[؝>sQSYr_?ߓߑǷKWҋayu!CNF ;ڢ0xǡؐ|Ѹ#i{KcmJqkjobMZ:Oo tgw%;y}w,p>zݭB/M6小\!8D߲^7ZՐUPq̸%5:=iszGRUgcefobEf b,g":z_Jמ 獡#NvF:unrsԱLvSQpxWZy}&6K&w*簩2yCgu9Irr{A"rYLtފ#oserɁ`{&^ɛu6LfJSdSy:qMP\Tee`KBE~Cb2isjrqؤϷ&,%!T ; (]@{:!PRB( R'DD H*" qwPagȇ99ߒs9I$(BVK S%> ~"^=7y^as`&ETSYAʨcGq'y3좂s‚nÔ/.w-XOlDde1%PD _*s:bhqИvN~Vqt`~xv>ǵ6Ç_TSq4Һ"މDnW49z)p}8EGדrlD@`VFExߡ³JdT=bH2`#7>"ak{?~л>;0y&6)!3)l09l:`9e̒ (FPyyX햅#`\/X˜pQ<cr9Ut(PZ=/2*PmC|zu;+lrJ'&I̩ZgTn$VlDt_$ X' ڤEmۓJper7ujRzdYgg穾P3Qֵ]SNA&&t.C#I.^hz-;XO#v>c>N6nkRlrk}xg.+98=7Q; pa``4ݣARP.F}CycJO$ ]ㅾjQPpav:MaC/ao,lfʹ%?wHo, ןDY\$o4(^U5"kUfJglYsVXV^ R x_md-;]:fֳ{l`^`h>jd~rgc" t^hXx@@!`CӘJ*䣃t'w9O~[=>*~fnsK;jZ|[=8t#42B/kd@su:pPQD-JSь6t7t䌞[_Ce!S "gf(`*`Tݍ=.ne4.OH"Q(D'P\ЈhCFG t}JaFK!k.:7ict5A=Ș0EƬ_lWXi?M12qJ$ވ:&$*eQyPEY+:긺 (# ~| G E 3N:8ͺ;8Oz@5!8&cǴ |5;Gk :{nq#x9g 8fӸ/<.ou[@1?s!p@3 if o^9-j y;Rf5@nrv' tR/2}e_^S\?zqfLxÞ7$>hp ANAF\2r6hjіI,[t;RZq3~.Ӿg\^3E&$ߑN_%| , @`iRkCٽV@8y5l 9H:ff (wĬMқ\?'?z u:Lw~v{ S?xJ;oe;5CB"/oSlKlYk3)Nd;9ut3{ܟ1N|ʸI/WIs >@e@>AngkJXO]%i2Bӟ֯eǤ鎣2Մ!n 1!ktkk:K7J?(}\[0G}Eb=l AdHQ@[!Mڮ{W{zn4yX)(6~;aj<ⵠ*+6EI>9?nj3qf K10$H 0<_^ ꝉh4 ]\ܒ\w,_!5{omwrqqQ{/3=.iH}!徽jϾ&)id`Oˬc6'vMUE]sz=H٤[ ע/Kj{FܕXRgkܴ?ZWLdUE7pQ=’_DőEQoQ3C:~AW= 1%ޙhFIiV V\-[SOxgWVS{zTg*|$1ZpqXqU_-khbOc/scs^r⦅sx!!n꽫QZM}y6Tvnj Ҁ' ;#=T>)2U>(I*ي.Q$]qWVS4)u߀`_vP@cMjM給`:IkOk[ lZ ϗΉ#j3I%iCibVvr/]$8)NIC5Cǝ/: ;/1n&K `ŏX4jFtM@- aPBzVYaLYㅘk|kObX3ٱ~&6r6ȻOOG6ɠDW9i"ӽQEhƜ ,0b*e9,'aՖS3c3{DQ4H0)ځPqE! <Q=0i` 4LOt=.a.ʰ"aDCE4TQDU8 cPf([ .Rn(ASxX9xG r09ACڗZ1Jj ֨IGբ8hJ*\'8(>M\'ot b`8dLT;YR6*q~uF.J=QrNި?(KGyR$%zQQţGC1 0Vg်Qf@e;b/CxbQި$D*,,  ]彂w9zЧ[0OE-z c LZ` c16\0j #ڭaMzo0|?@uDЧj*[>*/x}P~|ݣ|ݥBY0< }c% \*fS1wM\H tdrtqƽ7jCd n]7{G}^kNtiD/5D/4Dj=|f~Rc5uԙqIDQ⊈ȾCHrsH }; #xZʴiZԱuZ>sx9||񐊵n.5YMAJ"KA 5 *#pL6#-pͶz7ӦJWn]Rc&S٥";H+,%p jHVJbe)Qa^b(,D y)|Z)qn3כ X)a zmVoRG,K)kȫvٕɎ|3LV&V%XU?@Uw(1ſ!1Ő(ZeW0Wi x6}=A{a.'M6eKȞ&!>6!$.ݙ[+tOfUUFW#ȑWy{R"wypьÝs8>Zﵡ7"fi-hgMoKKiIuHl7Iz7QCi n \+k{'B>p6?7{qevCd]@?ߓv> eЛbw8Gv廝xw{S;|)W[E?r/~V迒g9jfjk`s@=aSN3w1_3"ܑН]QM^i@AH ,!!   aȢ ѶNjkkGfܵ"hE .qj3/s{{sfW/=4rl4:&eUԉU'br(PV_}P#>NW8,9u >K~i]ԅ܋/a坟ÝyDUD^Rj NOD{Z\oO#"V7ЊwXN)iQOͿjr˹jʺZ\25/$7'6}&o 7}״Gm:i=ic l:;wP^Ս Ϳ㌊|QMD[}fpNۊ<zǷ1tmk|cm_blԶݜǸv ?6OvwP;;ye*pALdRԩ3vΰOJuvuO*vt/v^^ٳK޳[s.=͐^cHzak=U>GhùwK[w@9(+JcԾ"_L+)qZ;@U=h̦E;ȇ#J$ëpKi נZV7n7ˁp;8]~QBi8 c>H7'""zBJ*'T"}kC]dR!EBXd/48pܑ~p֑ ͎,xx5quoC('u"4c )d $L.9t?$\0Q ‚̷C|n Pݠ}f>g#Ѕf!8w W(|!g5q ̤+$a.9N )Br=H$$(H-@TPiwgpZwl!_t1 b v{ cbh01dU!$Ą Va8*Ĥ@= >re(>/}K _2AR]`O!tZ WR`HR~E$bP ev0CKq'@7' - r\>&@~ aأ+{X>߀8rɀ7(qVH pIj*$&9f̙!vh7z+bMDbGd*FU'9oTת+-Πӧ<S@?IH䓐0)IO0M_=_3[|5略3h5gx/4x57xk}10=c ֟.)~ HEnZ{4:ML5y$҇V'c0l{nj]^An}SwQDMЮ$M|[:A8n@,ҘHB>#/~|qĒ2U<}̷;u 3+ޣ&Op/Bh3Pxtp_t=ᙨ*рK_걺I& (NBQ(e(:\ Ź77ǽ#g={ U[Zm7SH!zʿE-!ƚ+ƛ9ji&"N}} {o7sY Rʳj)s\ΞMoBVkNŲZД!cR֐ȧ̻$VqSmDcYi@~<4VJ' s<0,bK%!dW"fŹbR~]ʀs> *SINf패';Q̨<Ѡs,AeԽ"xBBZuh)MְBXRȶ[ȯ)\.<9q]QMi$((H*"@V,f5@ !LK@(h5x92NGǶsȇ߹~z}c)̓*u96Ϝ e^*3WuZM?YP2r}mob ZfkVPa~RM|%Qz|Ǹ$~(ŵO%n %ZnUSOPj8=G`ߡ_ҥhܟ)<fA%z)U#%ܫefeE䶉ò3. ҼMBZ P+ڰ¦9$P%+2-%&DqlZ`ߗ+ ks9l3k2"Z*?﯊"you@+a{6 }jKKKbA*huE!j iTo5&#YP>e~L`C&ZSXQr5\k޸qM>ʮSkMmeCJ)׻_V& *W"5QXN< @>Bsoh\!B-"y3$0T`½z5:<̶ɖøPFm[ÉZUGJ>EMʪ|oHY8T*Wy-$W6Ec-sFF*"odRJ,48X`f:` -ؼbt̡Bpק{+y~š@~,6<_ɮdUL2d tt[Z?tBɐ!䭐\oJީr1p {@0uָ]r]Ky뀨1dzX]ksTu BV&*)LU*CqP|Ce¬Aȿ!mpLp~Wy z{ô1){˻O9w&)HWԖu㕧4K3!i03"Y3JJTϑ+ r|ȭ^:OuW) {hshF}p|f+iZ@՜#H1\%wc홗.:3.f$p㦥NNzj5y˟>?}?Oq$6nfDgpG p =I=@+B;D7xxK>ؼ04+6g|`rŁfڵCk3eO=IW_zFοC#fwv~Qir os+ k cLV-&۞˲?f`;Dx; ejgA'зhv 7|fkg/] z ٿկ{x`),@ [ߙ@C 8`64f1ƳGm4c5ȵ4W+jv8N Z] _;{ z LpA8"4```"pP, RFC` l¥zb'&jA'^R 4TxPQ HG</chm6F&Vjr l&e #n#D eSNCCC@:*"=S,kP%;LQRBlt$js_%nsFΐـ޻9sG^xWSo-Tj}'润 MuyVMg/hF5DӠDdEa0$L!g*Si=j0DG3t9G.ߌzFZd-tm%mӅZ!?9rNGؠq;EQ=QGNZ (M4LfΙIJz{zX[3ح ټkqyVcW\YgCSǟ"8(s9~P~Tx>좸6xx!IM8JEo`iǒ7g`Yûl;x ʩg[at5#}!UgєPp6i 6-)>$VG7yTE_UF?UcP=LxI ds0<Z@{-ΑR.¸j8]ECF.-D ǣ_:N N&!Ƚ2~"RVws܏^ZqO%(ߓok"!dc@13E4wкXD]c[lظ ]lq|,úՙ3 \+ֹM.}7מEIRN+g^3?*I1ބS8Ä́!9&1<&_b7r2Wi1_ì͍dIUTfgT6k^QIɷ<^3{{j϶:-畅w_u+7nJG騘=C<R}ZVry^).jpdI*/Wy`vs-q-[ 5gdBV.YMY2O(g6yK.omZ>a"^.#NzK\ g8@U+beV%y:Ewn_Bu.Ϩ<PD H)#LQA,"tІFpF RD *1XQp]f%'nf=G}s=WR*x-^nAIܐ84wQSQQ;aQP_B61xCTT0^,p̕_-]Qךnܔm^`UfWH+v)OmRIޒ)ܤ޹oEDBLH$ oA26.98]pfnt.*[;hQ]&8+e6lDzBY[Q+HouSEg|2R>H{-H#BK&E20\ߖpQ )qXt)*+4W֕V"ҭ &ۖg:J $\IN^vNWFv -h[i Q^R"K0T꺭bQ#U+,-}).$)" &{d1pq5k7٨&+46r5 j:^q:(X̝),dEK9wkE5/snAph}OQQQF_,Õ2ڃJwfm4Յlț5{V5d7DbRd+>6)uSu墈&ކ.uCq~hН) Sxgz7.^܃ZZi>5Pt:2e^iRuI*Knm7rKs=M2 JnHC{p OpCpC:=zW? -4 ]@e*{磤ϖ)sg.VY97[pp֮(f):v!;ikw۪n{B.^R=lRMPzA]H-u̕IrbVύ>u4BcuGLBd.XPWvﰢqy7N}7{;s& 9:t}C@HĶQc$:2%@`u#BF6_s*ppqp5~'[-LjL.7h2h1=D[!b܍Y?.b/Qߪr#icؤ#7&s,17]Կ+_6dǁ\DU#c$&3+Y+&lU}'|2爦4SJM&-m):S]{ýqwx+}P2 d.W)6ncmm,m ib191 qBG|KV@E1aɂ:3jQ!9N,vP>'Sߨ־XԤN]O}&gI}D]\wa% R)i~=>BO͂82ٙ!.g.CX~خe6JlQ*\iTS@H.!y`b FdA@A 4 aJ"cD'( (
Pϱ+߱}`:{uI ,c`#ց]{I|OdE?Xc{< 8b¯37*535.ClU4-B 8۰::paQpڱX'v1e| 2F9#a[ lA{̷Sɥ,s0\; "_ h@ |9 fрW2:pb5 a|'&Gq b{̽D|^'Fa7BMhXt'=o) <_YؗڝW(5ܞdZnQcU!-[j!.z5{%-dp_jI:Pw1 d_hwWеL*D:臕fJ>Y)hץ(Sc +e&Ir2j}S_l_W- TC|)3I]':&ͺ(f^zLd/.XBVJ/)y+nd)˼hYh=w2٬ )vQ,yvi%)YaYYWCoadbτd`Π6AfҊ`u ؋M,hSbE nU/*H,X%%.ls>abAǐSN7=p w %!9kųx)-vbE8{`u,= *̃/ŖŔ fL7=[+"|WhW+BwK' ,:}mDss^R(shRX\)wPCTffU*'EL;mV1$bل-mWC_^!S~\[~ uI}q-v P߻`G)@N9@ΡKհSk km N3<:fjm0ormڹ55K֤Uk|YxWWENѨQ?Jw0%wrf@Rɼe%ǘג3Ly)P@w_wOqץu*N:ڕyw[6~_U%1/;{xb ؅>K= c.Ul&׮VsǭX[-uMu^uY~%U4uyqx"*ʡvlC5ިxxŃJs`Vm\clTf3iwNl׶ݴMnc3w<>]لmqN `TRiyFxs.q|r۵yyo띭}w8>9|nrolʖҵ-ˤe=UΧ䋜o)`"<#“QZ2\b$D+ mk ݾKvxr~Kqf(/]p6Q43` (; e /r*x> ].K< ^9e>gx:,fٌ M`tWDL+p`_+ǐ5|U"wxP w`EĄ+͸EQ"\!dAל8#P ܆Vk=!㼽ay4gTh֩ȑtG] ;z6& ,}sQD%IV%~pYJFii~Nu?V,'ZBsS` 9}yt{\T_b޼1zDw5Q]_Z|#x~sKn)$U9 48U*婄\C"⁒RX?"ZB =zOᨮFgyfG*˒V{3f{OBlMz 4eεFO >pZ`JUD/y:Ľr y̿_ # C{-4k-CF(^ԽfjppQ0f|7\^a3d{wUҕiM դ 0ь]}QNbWT.ŪUV^+1\"h:еg=Փp>j -b oЫ*CH׵Gh(MAcj1:QLtwxBOg tZf݈kVߙ^b]jP!SXIsGN/l7O3y|-0?a LYB6b>@p-3(.7RFvsնD7ó2?YWyĪw6vXhŽ]ٖ eɳјJgg]ȳfPQ%L^`}a`aQ PD0÷Q )Fal7Ls:q&3sޜ0e \[%%I8ù s>pٴi ]ʞQK @ ?IoUWp㠻6DC{=7ff:47BsP u~ڪ`v? lo>mnVGA '&:n1ߒBӡC U(| YO"$=3!Q2 @ׄBz=HfX0IF)_u@wPlP ( PC2hM? tB"A kSRsӚEs@a=2`8Ȩl3q}JCHb >$L$)^>8qZt^wK-uD'3Ÿ2q'vABpaRNH^ɛB~ CXHPCnnDOZu T 52^HF"$W셺=W3uЯGnj6{ΆF.f#W'~#{;֫e=֥?:CןdNvå_…VW.D.rah+i 8Jc=a} Xa2bak7lcwݿfwܳmЗH=_2p5YIr4'jqbjQ3o7>xDxG#G퍼y13K~{ԷofÆ_$TT.nTwR7\v43g7p$I42w7y Y<=Aߎ~m1[b~(h-hHh\`%li<?"ﻝAtWΰ)83Aq^aQYpZӀ4ۥWsN)LjK$4%Ygu 煵Dğ |1SPk_yd`ZT[0VFr2zeN K<׭EhJ3y5YxS}k]|tDP%VHEfuIcQؘo1}c%殺9Us0clƐfӧveٷ͙.J[}FG]z%WPt!A|BT*˗$S^X`EаtP7)r>0Oc m@o6Sm9`ߨIvV8ת\+Urg̬-l/VʣBYNxBKdń3_ ܣگ逋"`~ǸCBGGAӢñG%8XrӜ+wcNg3de7 }|aQ$G}%@~HJQbB'Ry"es8Ba+z|tٰ֠iEU9H.%:!_YW˫mks{H=%Qi/dj )Բb-in({HWFG'5ԗ25e;8a\sI}iqp)2t|b ~VA `T;!V.J亻r'?$ K߱!u="!{KsH_[p"$bP[*( b ݜB~xmuSv%2MYY^aS̃$0(8qKQ[Q&']%3ZZ:WtCY?֠ȺYwrpnvC}V}^8vw֕z&Vk}j15,(-aW¨/U V]uTz>+C4-(lA~*h7#};jdEqmim2Gi9%5\y볿_x,?:_/aa ճ`>GSʹ -]=m]]@^7^/dٿA0Xnb>/!W[cv 幷%ޮB:B:㦉fz~t.tV.=Q7![@$oGx(3͉OF"Ʋ9u5ctmim##?r>o<Y, Q}hPv ec@¤b=%F:ފ] gBgb=3) ΙmU?nqxkzq 7/ޜS'Xc@ v>ʵ sH:D&u9_[sc>oχ`|mq2oTh3q6٬܍~Ivl?ᮝn9~Wc2 Ng9ឋ@e.,x p iq6.a]xj_Ǻ%,e%V/YUKʥ#LyFr6#Y,/<爯1E#T{'trcIICm׀759`w ﮃ^ł_9}PV )x=χ_u1>FH}oM+@ lzx> չle D((`W% 1`A,H@Dņ(< C-O1D!ODQDĂg0;=;{9F 9PY0s C Yҿ#DHNb:D X ACFr<(g3J,Z=X=OZ8 `] h%+"6!j&;@:5ͣ1n@hm }k7jGK(]48Zw }0`W.e@~5Gn+jM :kRsG?:=@ON}DoG=b{}`]$7bu)bѽ5t?+f 5(F?C?b>`hUŗ`RwŮ`0o4H%$"H>)k xCxjth(m0k0QLɼLDcOWI%KrW߀|ExNyn@߅BV5ջ ]x)[,<:t6ᑬt7J+&BZ7pC]h2ehTsE9塡|(T7Tj :U3PŸ@7QMVen)wr{q]yMWՌCkp^øZsƝ{=fKm`f9/c)QDy P+Kz?'\z?#qnU듸c>;sC V}ҮBܾUXfLXD%L3lw`φ1H6G[g\qǜqy,wy"y_sW8-q;-v\#,s:Jvv:;9:wlqfLm|N:h{u A!8bnqm* [u_epKؐ**2,m7֛l1l5)0.7TJ6 W\:dk\^V2Yg`(vF#9. % }#cwJFscS[ŋ6-X f%YZ=_ڽXU9 ֥t'+mZ#PM88>(cEV~O8qT oDѺk6+Y"ʐ-ʑg{fzmS,maeye//L:}?>4sЬD}>͟Po ;`k@xry`A1Zѓ٣L2eit,ET-RBg}[~=h(1:ӑ (X2 d 3lj2|/N&I I?Wbиlqr1_5׸S3Xejf<.iSGCp" 80(ٯ[u^ȉ̘AȈҢ}QXqR9Ӥ'S E ]|j)ǻMk"-&1sT?pjPEq췍Ҽ3NZ,ҿqBj;(v<.@0wlpvL8!f)xy\ԨLȵ" uyGEuqwgfd`.誈i*e60 URUZb2XYK(nQ@M\)GO-hknQ999s{}b<31=uO\u]D1D[~:s[<ס='ˍykP0e P0I(HҜy2s&3.N#56CiuXShvNޠGGp>36o_kE QY|7jdYc?4bIQ4I\tl-4 6)1D")!ΐc/T+b۵ \z/NFŋ~>\3T`'ٔuy%&G,5E^rR!+ea򗤚a6IѶE $}LR¤r'Vaܦ 7w 3wY`%Rf5Q|'&`_ԥ;I 2ۭ^8cGbt8Nşi kܭz a5_b[7 W`=.Z ׆]4T[]Mo:`+@. L p? f' iA̓0 8 ׃S {t{Ȁ>-fn)Eϖ:4@ro9tXr0y TO&`R3`Q19*hZ]nusp2Nm U{0C{2OAy vP7A%PJ^uqW}@w&cN7sG80u p>-*ka{l(H/xArA$upup}DwPA;6yDt3=S-iw8O.ձ]#Zr_`HD)PY^K:_KFn )kp9}5O= G; pKŦ@ ؋+p By:xyDM?} :[KWO21 F.~EG+#ɗK q_po-~#nT]:˪^nb 8K!N>C<O}'iǠd[[k;ϯEf\ wNrgũ!p/394L`""}*/@%Spk6\KÍ8†NQp: jp2`9Nű yy9t>`:G}vm(/cH?5'Ip?P;2z4.c: 'i8ڍVW0.bfzWt[=h/ n{h˸_E zyɓTb5 O7?OEOHhq`t Dg)`Cʘ!]Zv{*vkphsѦŭ!CΉׇ7OZ4gI{Y*w}? A/zPg&2S:Qh MP3}:5<@SnT6hZ4uuqUҠ%YVkNq+5WSHOQZ*HyYITꩤމ&8biޡ'H}1 "'b{d86Gji`6D3-vv]m / %^^%^DR[- & +[v\^'_H {BWG7&3ҿ| )-F{lM16ͱhIbƤ2l}C<@,L\5G$jW3NpZzfyմyQG}*.*D=P̎NQ-xyO |JOi:D'mxZѬSQ7uOg x $>[TujZ*W+F^kSRΌUighUjP yj9n/L]ns!I!X2)!K CmJ,S,HNe'e%9ĕىeܬJiybLR^[(TĻ|~$A& \9 4{IF ǪXnZ㻨1b12h![\npI%\BZ_ +/7+)ەN}?&zAI(^s?dN~7_mSJ<ñ TMAeZ$Sa2s [jfKS\q7K]*Ӵ'Ԥ1n},)F??2 J/W袙h!kS.s(N9]Q;yIq#IlĦ3Ein8U(1} $pGn?cUk(b,% J,v-I.. Eu݊#ʘOʘA'GHotE,9g0@X3}9ݓT84ɬOOZqIP/y_,*ʷ8o{PzN-gߑn1>c ӧ#% iJ-,KRĦwIp^4;D!:gk{Re܋$$ӻ0 Lg6)C8cl7FgaTV?x B\,Il|ଥҨղYeY&rM"<'"*WB[+XIYIoR٢M^s=\wD\C5`0D"83ƹBqfL7JHCvKCviH#iȆe!Ԧ.e.I ^ ̦{~F`8[֘B99c@"u(AxI$ %_2JF_Tf!شzS۴Ne*Kv PrQ? _H \ la d5i!݉tOR r+ZJWޕeE9X 0e,sòb 3КB[m(xuQ!b#IY}XLa[8 l5N /xF6#n7LŖ-lڶ* joAe}u͏Dt##s*g16Jҿ< pnPBUNP6t>2 kgBCfQttR@Z| 01O'06 z? 'Q@86!=Õx-~ 0h兠V>xڸ\[ 9/G0+"<5`#Ha 8iAu#y㼖➼ ŜG;/"WX_B_-'{9ȍN2I{F(;޾^S@y\|N u'^5Mw6'݁t$jV; . ={\\ ry =f 0^-z~I8m|E&w͜>ɤDtح;DM"P2$ydIOK exJVғ;؀DW!-tUU񭸆2Gq?"G@ο\!/"o™89iͦ=zГQ3pkMrpqUFjFgъSm$3‘O"%Cpb.đh8!x ܒNuY"o$[ TY:Sf*/G|6Eр&E :=؝~@JDd j|<\5x]7\uK18 Ψ)ؐ<޷=||E>86pcQgvǡJ? `>e TNXI(ћ`Pl67HCNI6ܒCHrCEIίx̲\fimc?p}a2lEa$&4lLY(6COBao/}\)A55J .{]8..]n r[ۊ(%*XԱmSӦi3δv!mӴt2M3Mil/2f9ߞ>f&mJ`OfO-'_Ʌɍˍ "ܱj}6p/{Vp\qz܊5)hF+" ӚjLjIMs"fÙ!v43gNsCܠ"\4wYSe}~@DPCܦ+;t/m"hUc*7'sMέdFNfXa젶 i{~0ק=hgnK.UEg_  yyBrpeCmnNSgcDǐނA}ۘ~#ۥ悺\noӝQ ~+BY_٤+Ш>BIN1@QD,60aL@ش æ4g"dGٌt*tUVG5U~B$Zʜ5!M^Z{&Mpݵ6W&dw*&]g] ] +"\F5uWep2CiJi zE{RpqbS#uEuSnCw}jwςb_c٘B5Y3xwZ. וywy_sjJ`&FOy]7Gif-PO՟ f"1j=d\?_T䴼n"[n~i~-J#0GLQ;;ZPŽ0wn)j2@eE~W9tYV2s܁wyu65WGyu7HJxZ)st~P@1лoA^nhRqp@P>CfdJ U!#:¤zq65qMMKr)=kJu.ӞF D5-ʞ[ d!st#2ƶc8ia=R|+,a_؉pH0ç] M&)|II74eָLZqhcq=dLO ej=N'$$O`fbI"qH+FB3sH\3oFH28O1p#Mύ!Z-v87 dRLL=e\,'`f< )H\8شhlX|s/#~qxqo n=<9) Ch_$uh ПfIH^6]p) D"\ށX"vŌu+XEJʕA|-p~I|gėPG@pS%gi9i%ҿL/וP1M}SQQB_CRJSNhHER !|dB29>eȲZfǚ550żmw\]繟њ@ҚCeSeSE؈xxu`E D994|Cݬ`@c\ 0^_o !(`$' NRp>ٜ69mV<Z[9ɭ u;yr)ɘ+ƫf0jRӢ P676 }@R;Nl_lL:X;:8 u'F7yۀ܋ouQ`= PSy *_6XAEl<sDw' L7;0x0ZSלV/R"ȭN'w97?=G3sǼBOٌ<݋*%_꺑aуBFqd$$o+%9V)6 *5 Gp-'.o Y]> C+"/NyYG(2ꬢ:lΧq&9[<`_Gz)s 1'#`uQ/Z)ʤN`uSJY1ks4r.f~/Ȣ!ӝ7:WGP3ٌV"uC.b,lN%3_gpqoZ躙Y<8I + ᧾dJQϟ0ԊhI>K\P\͜E140M\ts :k42JC斒e.F` J.$A"gѦV84%^:e^.R/NZ*4؉zzu uawc3vE= 2,wwȍ>6^X㴱;MI(M"pX2 ʏqPze6>WNbOr۱t?63/QmvU揱-xN,+? bIaJ.l?=*q|]?o쵘ݖѨ)nyfQ%*W`U56YQ1 ^GXmnzxj3%Gyg{GFhh:!m3;m}PcjQevlMv`7v9Xgka}9VoE{X^nA+'C %bY(zԿ=}bi}z5 56t38zc?*ð1ӱ#9JYXR<,u*BSPۓ C%(Cg( <'bg$LCRimE/R. aǜ|+W㬰@=ծL?2ԡHWO,TcNiB:[H+~vHZENһ\b͡\l{Jza|7[ +Θ_!90IB|B\`/.> \/E(TL : <&JAigV29Rz)d>rIv!cv RC⎙!c1# !a ؐHĄ ѡIBTh0=4W -mSL '-kzaRYA#[]dK3f H0$h\FFhM04ᘮiBdx0%|09_#M273(Bj+7& "0#2L*8y2T2E$\Ct2_ۮfFmo^R=|yߔ-}ԋRR-)>Ϝ"3*{$efEim4%wW^zQM ʶ&fPndXVL#1Z[W,2Z2cI>&6j!<@ۖh!Y>q4M`,e,x 9*#fT{RclO8MIE,%eF+amڭku!u j[5Vm8պʭVU_Z-mߺC[[7䷦A-Vsy\۾HJ1eRl4^kЯBnfs nԢ:D~aj^)K`eổf+]M"ˁ샓4(-wZ^;ir) 㞓nwF[Zi&sMk.:⽏B8jijpkxju-HN~spRb]05g9#э܆AV xE{M\0pvƎ4Gh 1.::6zIù:bQG, r/ֱ>[#>AVG%h8ٜh[mӝihml҉GccPϡ_ONIt=.9_9%tzuR glf13] &;Jw>%}iBPWf2PWIU̫8rf`Db405nt;xZj~yl ҧp>HKo[ȝkrf>7vߐ@a5쇃L  B,$B&'fѿHi5\Buz}M=żtC:~5V)@C(M44sћ 4棱XׯuSDg-:XsE]>c}X+]`F>/jh   M@'_\h(Ac{)ezO=lK59cnE鄩zj>^TPnBHȅ@B.@!B- !"BAQDTRuκεgzvvnݥ]9o|=y2|k1;nmmW׆p%f.Ōb^pe^wqbpGX}qQ,MB!R}[;q+67Dĕ8.n0np̆vr|'p"~b!MX‘8p1Slӛ+,ejwѽW6\ڔsxiXJ$+܂d'wc.#2-޺[b_77 I}O0vG1QݟP{WH{1jm }=]8c,Pxub'k&j~GIF(}Ls1.è( Qv 0 .E!qbz]BgNtW2)ZXKM於C~ʚ%X$|@5敏)pS=e勔Ǡd#$Jr#K*C@ZԂvenx:) -f$sSk48?&"fE9OO5_{Hcq2Kc^2F9)_<Ay)(ѡ]QVE9*(Mp+Фtl ;|Us^lcQQfU=|ƌsdL3NY)GQF@:,xphRRW€ WzPW [jƙEsjN1Ǩ}|H@1jO'Pݛz49D&N7@9z_ЦG t|4j JQU*;,:7:?L>fԏ /1*Go6Gg!=GrO4\Q|̒մoѽ =?eiѬ_> Tx `5\@mj#5uiBuc:NVefZq1^Tr*L#NKT֬`o+&&uh<͔zSy(CC xIe_3LVe(%dtSV@uʹ[hUIѶ X6# D(ЯvB / ?02xmY/sd?q5iݧg&#?E^`!! rB*d lnFf2SH/!-|H }z+NRi2Bz'6@m W7Dd;灼i06@0{]1K%5edX+aXo/m` ƣP;612@:Xvp {KO"ޣbrϯ.˥*4q~d%dԳճ|$$;G؍=g~Iރs{Ecpnk*>'͓|]%5!qw4V BB%}lN:PBp$aIvg9s~DD$<Ɂ' =Q%_BfjDd{=YpN')|FLN3,19%]`aB.(}INPWʤ8xd8Du:1>J;돟Ч[o pp p&t;1({@}>np/p_b?'v5Q5M+[4[Rjcr}Ǯ{GﱷEsS{^ =9כ `.AFhC+qrCH_i!eWk2[EB ;ɳtUvZ+~~vuGMD]쟀F3A#bÎZ̙m e|??[#(FXI 5hHKS?(4HИ9hb4qR<_Zق5b.@dP+^?jFؤsbguC |h4)ڏ$/{;vk.rrkmOqR-Yۤk#ވ ?;@_e.hza}D Bc>رlÎر;ꔏ<-zUv5ZVJ*T)W x+>hv@Iy _bh4ICgV)B^fUllF-n~TTj{OĎ\봷hh{NC-U'5vk}?UV0īܐe-5LbCfaJh*w\*v:"*p~9.ϔbUnܜoGEچ{hsVDh_wTb-pMD(9IQ&1S9DqpŚjdt/ a44ztc-Mh`yн\g̣:0+*"EPEaeXT7( .ǚb&Zq_c5֥1xXҨZMD? \{0t^>|߂3s1TG9y%41W1~PŌV1V$ٍ6es[2͔-WJ3-WAMJ`?fr1 6 k`T78bEqgO9+h`U9Kq&(%a,pFIJHc0'+ ?:cx#%S3=|K!1'tTN쉽/[P%5)J)Iq$[d-`.s\ŧ<+SJM2ZbSI Qg[)#Si)ZdQ5DJH5ʜ4LiK+Rm9-QtzƦoԘТKj0;1Ue v~ۘ7m]Č~2g V|F2-cY1YVEg56@cehKoPxve G r+^eti)̇ ߶LUvyWMP*սj4ʳrUS99~nբf@ pWKXN/`^ @8)a3/ffl^˹-~**uv4{Wnuٕ-thFt2K` Py;Nn{7M.v77\ĵ7TN(WRjgpG˽_&h'?mM^!A918P~!0qGBAlp.|7ݾ\Gx`K:9:A$'1 G f:GMhI ކ* ]{.CvyH8ZZg8 U|J}'|/Fk~Eo#v{n;tk`3?M—Nñ=]|m--M< W8/t?úB9sIm|y=C魇 ЏF{ok:KkOB<u:=K[Dp\џDlAOЕp@F=+1ɤI *!q|@#q8մNjB)odJOXWGta(V2:h䳣:FGqK]k!*WmWxvjgvBm1<{/H.ΐ}"1++YO䱜LYvNATúuLM&آMG2ӤO<JpW0`6``6` $&!IsM4I&kf]zd=Uuӎv6դQҺN:mkUv޷dz{>I}R/xW%^սŋ7Zʥc:\G&dQqXtS gb"㙏5;e2|+ O =.V%?{ewV,Y ,de#l33a*pN79nek4y g((FsP;."7)R.JŎ].%Yˏg m K(dXѢV 2X4Lq턶GIPݦ2=Ke6ҿ7Q׾H_Ny5K/Ib$SCrM6MNJ)&X:@w8]eos[<7C_kҝ6GYyҾLh_Fͱ 3k6Tmqeioi⧣"D{(Uh:D,xlO}fۯ_\DVyFWf/k\2,'XL5v IM[aS4,d +48/QxKEDd'{VwQi> fѩ6n5zqmIޚNuk>VֶJTzx#f(-Q[仗G~C(7_eJ"(YRZ X;TvPљN3eՔ1[(80EQ`#.x O~S U..HgI*1'k*j;ʃ(`KO>=&z(쭥z MIv Y =DFۤ~&~OF'dDwK렴ĔDPKINA? L!w("d U9@pA҆GI#ydGΈ$ ?KŻ$ }*wJkYEHM%ZcUVQ[cȘ06HD:)y$OyZ'$bcxMćOb_O7xG?#~<Ši1"ѡ5UIJQ٘U!}z I$m8Ms`/68e|/Hu^dD~@cL<0""2 * 5"(Ȧ(( (8* +˩₩1n&DQc%i[5ǦMjԨI44>99=Ǚg}T:++Hϖs''- ŏ;q?>Əq)S&ժt"_u~uyzYWz+TXGO~>/~طb-v7R(=zB>C,N)V|^)P+[]G9DFx!Ngu%yab Qh@#`52yi>ZUƏq@Vf*%cDuX;;M,$ǩW5Ġ1 㱟LVUG$oV*V[rcգ_Ks4g [{/^g A' hEc)hdc)E ZV,""[.v._iswr# kG>>wpelwUSVw JhYG%Vu.ZꚢZL-q"|Y܊TVjZ֤y-*s?RwTcxJ1lD%G(1,V aAي /иrF,؈lCuR#~=;iAo m 1 ǽl09C"J (EӸъQ)5UkTtFF[4b0dǼa1|`!vS\7ya&po K#.M ̣>0dQvMvD}}GEepcĠ`Ԉ\Ƹ5qiFkUظ/MjzbNs5MSTk7IOsf`f{{K9YeIPfRIIHJWzrҒR%SJMJM]j%7)MG`A,W}́z@y>9JTqd2јTI)& `ҧ)1ݮEXgޭX`>x7e8نV7m\30*ǔ.SR3(;[9%ʩVdLE(}t jK4l)w)We 7v2l {Emg6k|m~sn0(z8E BװH~Rr_&,K8p.+*.]tqíAaa= Gw1]_5 ͩPFs([\!k\>ZiJɩm*si-䱎jb`;6{[ Vf6SDEVFr{ 6xh$2.c}cc}ǹ}7TGKH1Ia1y5빑oz v^x2 3#jrK y36 Y+0;g6~K8N[ u?E\vih2@o!ނ18I59͌# </W/RK ե e_&*F;Djǒ7pjY`\ U \eN>aFї2gl MVżuؠu <=w'-]U'mu}r uvxa}k}Ӹ_C<ω <74}tWE/JD3|t*Ш-6KANw}eE|y\Y"qyW(29?9<{=;BDzQDJ^Gt<ΐ))y|X5<\i0w|G'X4HG# |4J=ͫ O[;i$Nb''sqbױsqiRM6Z:umU]K+T(L\Mh B6&B Ć m0ډ3??~:w}~{cc/V0]b -|Q_75O op}$1s4WG :kѡ\i5ϫ~j%?L FX0i*\ъvif/hGɋ*ɒ5Q&>d eEi׸?-Ye,-5jԪJ-ЬyC =ij׌!ƔiM5a<NjĮ1]ר鞒ה0F,Yڬ^FzЧ}c~,lZsLf1;5mnДEami21˘F-Jn\U c>nzRqU Zju~?>./8l>Xz{f,3qږ)Q)&iU֦-,xwnm~LъksxUa WާyEit-<3M2s36{f 5dw*nנݧG=9bVr\Ym(TO5wU:koÇgZI"r=I8ce^FːH_mUPY^g8[R&Au׎*X;EuTo͉[=?kh=Rioޡyd,}TckDָTߖۿG.Ljj7T2|[/iW?ճ@su~NB/ ]m|5j RC%w{jc@霑sE՝GT*^eٻހ_p7ά濏YjN~#?yJ ZUVnTTeOLCS-isCO,| $[[&[=>Vy54ИVA:R#Շ}…rn1*bQe\HnUCe٢CFS]C;'Ḵ{Mb?9WY73hzϣ3N Aۄ%n໣RU_*KT>`RـUA6 j`#e )>s2/]_SIǴ0:tf|0^ B-'F)ՃRuPAED6$dLeHKɘJ 'w([*H^T^r*7C%~(cFgJ D H~hObl3ɘ*QIʤ&*Lժ ըT@aتuL.EL%*Pl܎3% Ce{ˇvLJmϳ?ݿ}" JH%:bv̠RѰ$H@phĈ`ּ>5&ym xyX{g(b5 s/w)1WΣ0JWAJc6ԔG1 #uơK?C"<˚eße.o-q3<{>Mzmx_ShB?ʹ |5[By=g®r'oϳ.0gK2{9 2{2r{ 8|oaׄnZr1xvfK04&{CYi>>椏 ~q>J%?A۹B>zƸ%9j]cF2ur9ACa?/~곟B;i8'U9@mcAg|FW(ćW$ ^~Ea{3ظ!'}q=/XRl $Ip.G&& ҝjKt>oKOlH1ӝS{7$ۘ~S M̫2ґZv>Ϫ@VOS;tF=ğI |ݞpOѩye \0]׹ i"'kL>RXf)'Z:%t,ev+-H|';!.'v5LqTa'&3iB/mt9.hXIdn9L?Ev( ,r5^qOCr1/$v9u&q'-[|c!.yds.3: On1.̓ي U2E|$E/"|,||\q7˺LOgTT2CeO8[S6[.R^/i8:4D# <4(GJ31yJ}P\M曓Tp$:`v [6 jV^?!=8-:qHCh(fSwԫMԡAS4>. Y2a ݩЃj =!vA@{ql5[=0fO53\6;ܠICtgUaɚR{Xi Tkh79|uq 5D,P}JEnGBTaT,5VŶDٜ*e/Hy&)7U9]N%}Ik2*#\gsó֣T= W|$^h)Ub{ Fʳ'+מle'I.;FY)LTc|Pr:#x>3zhL9eHc_#yVR!: qq)ˑLS,yJO-QZZRL#}R\ z@IGeǕ6|W<h5 ћȅL|}^d+ W\QhŔX]tȑ_$4(c,J*t=TO\K%7MEF4 gR]AQg]wEЪ(* -, BmăD3iFUi;1&ͤNkNc̴L56i֣c,d?Y罾}FL+`WJQdv|dȕQ Jv\*C ~;+ιOcqX^8V±`>( *id_+;IFYIJdT'[y*u)ڋ'/ыp| <<_h&q;(@1τ;~$J ~dʼnJ**@0 :3"$ * !yURxP JlL_qÿ~Llu1JXbPt|R.Fz#ìCH Njų#aKgpK-/p PH9ĜE̓}O?/Q_µEgKO F+k+:w%KF.(\/Qu`;ϰ-DMT\~vPBsy&1O _?f4`9VAZM.?Ppxs{Ez3r [d!m\@̳p}jΫ)$C7XlaX?X6N`LM6s6U|RMySpw+TQ"͡|ի^3uK a·A? XWY q/O=r, w}qKCM~'q~g<>,O ڙzb/ku?#|agD:a/Caq0&Xku7F4(8!8G䠿&M sA ";`4"hu&x`x?NsfO8)w /:r΄;M6HhD9pɈH#88rpu\,b%% ~O y.!MwAQj@|ν:+OQ8|H❧I~E?"sphBp;C->Un3o>$}|QX5=:7j ~{=Hj=k? Ux3z]W]Rt+pk>\P\fFi3[GP'^uz|:z:~CE0-{/J'i : A ƸE+Zd$,%ض㷋\DKè!A6]Tyxscu9/pޏ#N[f|a Gb]m;V]a;l/nvS<7v#dr EA+|2;17bۊtf.v#ʎ^DZ=B]F yBz}d%,ã%2vb\lQ*'a{:sυ.#U{~=7QBy5df'ީ~.=$8#`; ۓ=beد~ ?:CZEKo rzSL9q,Ǭ`#vpFHo~:b&'2B". 8p@wtұkuԣj .3HxU32_ Vq G-*3VÑG&ȃceTY 1GT5Ii De=G(\jycm+U5qr ?'L84^zJKXk'/SIF-6X3k,!K.l-HWMbHQuOzU&.UUfRqJL/tBEp |'6\p-^~w[62UcJӔjTM3Te|S**7WUV㖫hjͳUk}Eso*!=pm`cmzk.|q⛃SbUeMRŢ MI*NS5[ֹ*ZS;IyW)7urR٩O+fL9p{HC U |w*_ԖTRST:A575Kslʳ*VDEʞT5#}2.5-cD55,! ¿4`$|e}oJx  b I5AI*;œVYKfnVbUQyUۺuն]ﶹ]n9 d'y^z|*|̍W%Yety-Y*R OGrjU(Ek &-V_vl4~PVg~”߬8Ki̥*PfYI(/TzT) jhQjE'Uo@ɾA%;Ċs2T\*>W?a;Rԃ|ǤJ pϊ|THپx&')ʨLiԪP*JnRbuDŚXFwlU|^U կ+|DUݬmo W TP *1Q <|.HF3ńٴF4P(NiO;JN3X3.kᡖ&lAĵ)0(41{$f[3K7E,^mfv)##ψvl/ dx:4z0^oQ&R1&J ȵ Ny=/亭Mԃ>!g}6blS|s>imd7yp.]6E,`c 5YQ>9fq/r9br9c/[yfg0% .mm,o:HCYk7f-Pl,`'&'ߡOQ!zt~"'(~sbϫ5*]Msv,!{_3hl<&Bh-TlDŽ0 ň2=r?F(8 a:tPuVr4%-|4.F&1BJg蓳q\E?OAr3!pFpvR#<+;<au:Qx\(.A]6}fJ#+{^8i=syS~}=*:+G /P]Wiԟ%.~J~B.i\:ops0^/c_>Q\f 4G5t̻jL?~ʹy -JCxЙOEh47jvP}hũ߄3,ji0)(' L5{ #u̼M`pEWhT՟W<~`;۹v0Ŵi%mx} %rǘ as9jj=7{L`e R5:%.Z;}Q`O#6Zm/u؞{݌VlEݥ Te е/iVқbX1\G.t욱k.l{]Z쇰V+#]Lb Y:1~6ktv 5bׄE g?RX a2)snM?ӳٮ:e05&9(Fd}{\,XH.&=Fڍc~t!셱ۦv,n/f:z43UaKH}$A+oX&fp:9/:jQ6LC8JdRruaĉc;ǗN8NvlDZs:M$m״ K֭bBJAVSV1Dm0؀A h*h6&.ZQPG'e=:3Hì1V*f젗 c%Xz>A4lsGX 㰔gKH ;;Ѩ$:u42to>.& zg=;6%ʯc³x/U|8fwcniL".|5ը\nsL]:Yuv0-WxZ(m٣fA,ǔVr vM{RaG^{jSWKVZliDҸZJJ[;lWʺPɲ1%(n۬mjS" ۧ:\G8N 6 CC7]'caVDY]-vJ~%uJأjw)UԱ@ 1E(llVG!~*h<G W^k[KBzNUy9-粼u7 ;\MZL3v@gi%r1O5m ջ+rW]'OWT]HU+ީJ.Uq}\Kryr{oj'荓@.pm4$x#FE[תסץjWU DJ[զ~UT㟐ۿA |EFpJ偋rPOtk#Z!kR]'D~vy*婩&.W0#gGڅ2j<4)Gh/òRYcm݆]h44O#"YePP\u9rWɨUy}4t'[d"kdlUidJ%#DN *\d ԿEسA,$!=P ˀ91B4B6Lֺ"og4t@ mM@mݍ>T𚱮ib8d6cLll&qc|-0'3/<~w4\|tzFaɪ{Yנ6t-#Hb3ı8VjXCc1dOT 3oce}~z.hE75L\=5-Ch,I5$so%{sIFMı817v0&;XTVfH3׆A!s++z ))"ö[/:@ndwt/ ıv?~ޗ}S) kyR{꣯s"!Rt{^sk^nh Ƃz8K!Lt?I!q8feep#TxplCN.a0UXR|e>oH])a0K$SgX'0ٟq%=y2ղ1@ۏk#VR+{ @^y3xޔT'Y{.o?$ %KE&<{ŋsgW ml}y`}ò{ސ͚:Lm`VKs%O,~ccl:W {ś4썓dŧpO/yC/s /d"oGG,~~ͤyIKLWW^/}_%Կ,jg'ހ Ufyw?6sZ) :2qӺ{Esxq~&̳gcۼ8m~v|;׉8iM鑶뵵)F=Cݠ$@cL ILHCC􏩈C$PP}~{<$% ݜ73 0(_fѯ=MgP^ O߰y ކ!$=~7V!Rd cse e:#h$>+xyK+Dgt*sB?Lm* у_u]S25t,v#Wȑq?>2S{R#aCdC/6k*< 3ϋJ\;-[Cw6Н@wY4:0 Gt7)T 2d V9-hm[=c0g!X=GG xl'[p3=ѲЄqQϰǦ![[-&v؉c'vة`;fL$GS\VY<:ށ(Na |ayjiȓ*ʝʕ3ݔ=$[愬epf(Hicc{SP2(:x$!(*n?/UK/w6$gGL*)r F%O9s* rg}-ckl@%!4 AhߌM-]N9K-uma*$MG+],ljj@iCePPo)CН$PnNS!6J@e4U6]?MS'hu>[w4qu:@zJʱ{-hAz<2Lrr®Y~ΚE~A!ah66@A<0ǀfq&m&А ឦ ]` ta/)q ĮQaE{HYaNaV6 3]Qg6{9d7l[ Pb F *e(P*SS J/Pʥj-2 ʴ:ڱj 3Hm-ɞt;oel?V~YpYKbr5 c̉ջc,NY{&Μ&38]p~ᣴX,k:gHL6}?ѯ' v ?mI[-~x;gr!q68wsΕΒmQQ]·˨#rs[ 7c?}&{vdVĻH"8sIKi&xA;.Gd##h^e~WN0?HH3(qe3~VpNEj'[ٜ;nG<$H9X< WU~H<^W^ef\. euqDINۿ^p᳹ϏU6K<`,D$+5>>ɿJKb&>f- | Ol.>IQAaM2z 2zQ{u΢k~8 p ޿z]uq-l$.%~u9Gem~~|?D~bz":'~BiUh ^VXe]SNڟ&hq48Zj%v؝lj~>^n.NC)u}v!~D_v<mv\pǝ;vd`IЈ"v;;eZu&v;#bl/"Vc(p< 4z"%kЙcp_/;muiG:ў؊ @ENA{;ӱ;arXeQÛ rW+b f8S a@䩾";=}ll>B~ *YoaT1v|*8=ط{Lcz\cQlz+۱ݍ>l`o6 ;s:>GNU QuCt~1lEоkپ Tc ~o~;@VdjYdg:YG-e:5c_ ;~σaWuMC,lr2ژT2c^y;u£)TE G7Y.wmkUh9WJ4fy$;B5ur%X| EΊ}ṗs&o/E̻,HK}ܥx#+iժDb񠂉jO˓˝lSMG;lqf܆i I|HbxSGdQh- ϻ|Iy"QX+3SD~ & y24Xr5 9gϢ)K{caq+X³Yφ$/"\Cedj(fsI>'ݲ=&=#U0?;ӼMvū_nF5#\O&~mXflؒ! ||e6;A+h9/)>O&d\25 r73D V:HJW xmǶAlcoC%K"K+>|pN+=`hiy׀)ޅ~F5}faX5 ZZ" nUƱ3h:Z+neJ;=HYB6BIH@P !Ѻ/NT;նK2x:ɇ0p=!?}f^LRpφ`@Vr@G Aw"0<A!\ŜԪX<71 1 '#hGw_C0" 5m ṫ` ",B",BPGbP !BpS/ t3Ϟߧ"$/0` %:BrXa`F6;XApٕVb\r>i:_PK -:G/Ґ9c+.q|h"|X ~5.5uбFl 0a|x=u04.zE4)x C$Hl- yױ;'jn i\ W8tl-бk؎nA pNlEMlaY6{ר` Y;y80_w97=Ecg@Ҁ= бQR$Ή {P1j` B΃Vݕ Yk`Õ(,7U U+'F|` ^EMB@n/+iQ'B/ paT/D;C!XB"0cr>Q88/l0݊M?xy~n07|cǎ0q)SMs^(d^^2l/WYn_zWl۾ܵ{"ވ־o|#G?>3L6ğ=w>1)BY"D-U5ڂ¢CiTSźƦffpvv]|nܼu}ŗ_o~OD%}y1<\'_ gK"0X8d$ D0QPp)#`@L6-F8n#mO@zH(=&c̾dݽz~x FEyy = % G X'$`(,K?W-=C o"[ ;=Qo;p0ȱ4Ï?!Idr -bXwAWM1 0 z޻}_>xo=z;xɓOkMuDT__ba~CٖsJ:CR Z G#e&\WfHKi h0a@À 4 w|kfdKeUh_ݯAųs94HASe *g)AxӀ n_ToO*HSoTb.W]ޠZA Р%4(ײ3n膆>nE$YL!`*_mԝ/QsР 4y"ySIfuaƹgc,i0,5pCu~S9Ѡriȇ۝+]xWY"Z:ӸdM3^Dv 97V0N6CC4N۝#>1tdBG*@C'ie$5hͥotРUrS!\ʖrz$N:Ҡ#{脆ƒn#Hi КʷkJ A˱)sNy6K"cwgI=q:E+6 Zg Uo-/4CTРa;rV(ՕБu9'_4qbf՚ *ʶ̅ڸ|5ǢT۳,8Ȅ#Eƾt^鎗{<6XjwУ-VZzQQYkF}QLVנϋIh4X$&}49߻w?cW{YE˫}?Q ˱lpWDL|rV\`ƉмVmӰi4l6 m{Pdžg0|ǐ0aV]ց灡F!ʺ[Kn۹l{`?)`oh@lǧ"sf\޼-RtɌ)Nm-në= 5e'#1=0htHh#EAg"F Vh•Ibm0;;6 7`2>A :SvIQĢU]1W B% OXoL[n` `Q/c×hޫF'Jcs_+!DtU3(˗vjYy`xN+1™-x[VJf AƻC),ȗfjkۭTkëK/ck$fLGz(6lj;^i<)7m}Uɰw>&t%4aS&Hsĉe!e;l[԰0ݸ/WioƮOW}/>{cI_ᜲks,p!m,g9@Ov.Rgu6A$Ⱥ[5X=ښWǖͯslwrl$&";$&,aqJ'=ʲ[_vwMæaӰi7X?ښc˖9_ 0tJddD'%x:,&rA>'>\0EEh`NӽGWpkz^`x +Wc"R,Bq&<$Lci7_uA[=kV};Ǘ/ b$fǢ* ˱\PW@i.wEfx΁HmjiHW#-]`0(̩ IHL` HwEĴϙqrxsvB@E͌:yn8~ ^I3mfځ6MmҔK IJ qCwI֣yGﻭѾobKl˖%[^ p(t4uU}\?ɩk3Xb?<1{B1 )ʠ)u e;5+jK״4Œ^S5x{z~q_=a8 ie/ŴxXj(Q@ӨʨVf =[rSPԤtuEhx{~ {/ͩ0/!=k[8P&ڪY V $7yMRULMogn`##4n%ubD@tPf*haTIȚ^ʸ,oe>OUq x -"8g3h.PԗMЬ] U,*WPW2M~K(d+\+x{ڍ^o_=NioYz!pg'ئb Z(e^ik{dEDUۆa}B{_k_ӜB3sޔJ(6y %<$iCPMAcqd"mnf:p~0HA\^0K Ì*QJ 82Eg`*)=P3؏6r[h/w`}o羣=\[u᣻nj:|ͶoZp7ȗ|ImKu:mlB%a50as5ޱwDGI^{Ivx\/$ٝh cD,IFIdB#mZ47"TՁ>m3V?1Yiޯ-:B}Ky/eN(^, юd,A#$9Z6mtoJZmio=aqS5ݾ|OӂSacO0.v8hx'#TQ*LIHLʆt ޜYޖ~0˪a аm=ć“!A)# xB1B 3QFg2R!@ R`, }owYr6[iì+auc71'R 9#lD}qNܱqZӝNUzuuk@zWEAAP I\Bx $F$@BȅpAEVԺ9;m-ʶ?*9M8bɢv:jh"(VV@ߠTei4EJtLpavwk}n䅜4~1+=n*(NU <L;sYINiBx6 _sZfFGܰZ)HB':!TUr_JDot$ H\$\VQ"Fa]|VaG ^j2#(Q6"*r*&!i"$]0 k A]0ݺ4!>DZр/rz[IV-9~`qL45z]ECmdULDD](ՀOICVt^DA$"C V[+{$SL:Q 1hG 5M|CF^kʇZx3UAPi/  n҄di=ۊ~i+zd%C6@>k\OX["d>Еq]iB6gx;iذ% gd9 $*MM//uxUakfR2ȕ\o`*X( 0,OƤAq.<1*; O[T{j8lQƒ .3&Ba:A8/ W=hS g4IC΢/}ڐ:=kJ]* *8l]Kh-nH6j &_ciS 3Ҁir`xaؚDy]Mݧ 1M&o Zr-s.j)kjTAAdGO۸7`pHGܤM$Հ!o?f*wm2~\?h2b۩z2lnʯK @1'TYY0FG)2UhӲ4`^2nK֬f{}Vm&pҁ-ZwZܥ5UUz(ԦMjJ m3GrA A%h4 `Z ЭlVy1>g~ |y؟~uG? ӷmHozޯ'|%:WS 8#^87Ѐ`SӏT]=r{L&u~C*gN{i%8 dp?3 x \aheeh jOy`~RMOU!KrUh>Du38lj,J0pzT~ޡ{&`jmյk˦t˸("R(HɼX&QoAqq˓2,ah6EeX=7eNަ ;63e0uOɧ4]jnH"QRĀvߌ帶la,/1 G#Œaܔ>ehi3~1k<ʞ1tȧiPQ'5D^LRMl)l8q(˛G| 0#xeX+)z 9Ys{xJ1?o'ud^H2kq2,9ʄq00|hahe>o옵fϘ+&;jpQNj$ %h>鵐ifqfb5\Éߊys&``1k{ڦ4vTᢁ/AɩYL"2B5=+ v:̂*;\q`r!=\= ycʚqOZO:ᢉ/),duPbM97Fz\Wjz{Be7&H΋ ( un̬uyP>8Z?]'[E(fjY1)QUoh"^jN^l^$oGs4o-Ҁ28>u9Ƚyhlu^sKO3;(jzIyD. As\5KT1E7w>u>3mu *].NQ!iWcZDX ޲=7B^UtpQ+.hD2-hM;[l'Apd:d;,{OHgpj]<5jT:hCjJ ]QI%d@ [[ߎA;.}߆w[|pRB\G;A-٤}SKUT*K0)!D=eRoh`2xo.cxk{wt#;]ds=c?bv> k6`B:EM{MDZ"VE Ӽgwo2oM{ ireӇŢ#3PS }fj;8wym>3tE`uÅzAQlnwG6{xϫkE7]HH ~5_8ɯs뜀gq+>~?>].Lm`=acܜ>"ˑ~RJaiVUXaS/%(\bxa@ @Յ e nH\tzK?Y)ƶX f#fHvuqҨFą^DJ +a]XH:$?y.d_Y«ѶOo~~ZJ^]rrj[Eۛb.A\Ԓwͽ xYbN8ww`{-CplInF'LǬ/F>-/,zTB^O>{.V~1vtnYHI׽{Bc{C: >gώP:}$%_z^US~nˢeϪq%kҔIe?R˒6^L|,Oxri' ޥ^y/ >9}Ǿ+22AnB:@$dPɈğ?Ǐ۠d~u9;3'ܝd}/Ds;d~>O`?T.@WY4v,dG$xPt2\11 ЧO| @<(1>0nN\x??G )eUMuƥ6-k8b#S͢v횮馐J~Ү*`wo2`i(`!8):W@KD|Ъj){g3Wzǫqdq 1>, Ay-"8YhfNS%o_%B)X7oǶ;LyeT;- DA  p[ZT ͷ4zS>KkL7tDa 3fY`l^{j{~8 &x@ ?= R7 EUne2^dQDLr9I[M#D%@P؆~?VN8 o @A$o @ (pM@/6,qkًxդfu㍼*d %vk\Cn\ӂ9Xgh ?)lń(9 R7DkPPqKf9T$Y?. c(w 5A3xی{6gsv` ;llHklԪa *,ђY.I38aOr791fkpoui6ٶ0 ( KJlK-Xo;_*%/K8 P*cK3\iaY< r|^|ǐk2L=>_USI;İ 6mNH OHT$+U=Td웒rl+Z3! 6?9(zI!73`zѯP^e-'ڜ2a@d#LҖ*1:HFמӼ(/J pEHy,pWt:;7 ^)m.3ȷ '=Zs&6qg 6q[ͷOG$$_py"!hgT6! !E f_+Rl.[buũ@36.}"~'>]W6SL 1f񌒢Su<*qOhfuqi6gAm8%h?w=Oe4Ĕ=1a$P[k匭sH_g7)hv!oFVϷ0&96gtdul`5( _YT8PG]s߉5{4;~elH&{aL0Ejm<,P2|sszl e1- ?N٭s׏oPʝ~w8 JW14Gu'C0VЮ#ԫ%JFWV]R-fE`%la*2 & 7Ym((C U5XB~dgr[7h~ }hč87w*A?:Lڞ64^or]҆Xѝ&jL/RiYvCA)Tu6Ae} {48=?pkbPVg(3]BGiK{hnzicgXeTCP T!١} փNt[>59w#;vމ)/)+F $ev+Ӥ(󻒔.RPtSj]Τ eGrJc(D 5f&P}j-~&swl&n.Yh)YQtвE~Nkbr[iWra;=VCjRic.TڄjP E &P)46_.K{OkVW<>D:Ewa>r:lHd(qm6r[uKT[|ks+AutpP.0Vhaf' ,լR:!]: sep1"@L)FK%tەYݑ@ 29!kZb.zۖ7.nޭY["B>ߝ1cEGC z)?"WWc{5: DUՄ/ jDA?iW7lZ7ʷ;[%NJd&Dr'IY\hR60r-ʺ6WC`}UI$P,1oDAÖ/V:eņ-`,oY/ݱ)|! 1iTܽشDιt^73h0!-/]6(֣5~c#턉ӗR05nl:CLy! a1Q_sOq!)%5#03g!0̃T2^6:ע4C_XW L: ip='>sCa@Ci4kP z#T=saTؽ;`fVg  ;`xN@vvG! R\!pJCPy8Otغ.̾߄?m?.N8BpDt=~8+[Z!H[Ck#`X 0- - "dl2.b" >c @gaЫ\BXK&=ה%?}*_Ŗ͐iŢIbhX<" JFA0(&~> C e Cfpc/شLVbJ-?k.A7_"NDˊǣ%cƒ1;;AͲ^bYgT2Cb!,OK= yЫ7DvZC&3O&L%Hq1|4JYqZy->i':OJ|C> 1d#LĐ3ѫorٔTÛcM'M$cؚr]0IU=uf# ȮZT!΢<0ZOsjӞqkuQj-"eA` @XB$d%!@VI %$lj@AA VG;ߙuzݼ٦$DbRfw9WiQ^cUT-U3f5URmJ*0P 5ṗƝK@ޱ C?  ;61|3$-!xUF1x&(bJfX,tf(FނOg5p}o1(f|Sv/%V})$;͚F.MeםuEmvC'hQCݢYаsh],^trx77n97Lw@,Ddu,B %k{=eե:uS.uܥʐt*ڿB۷/7&V,tOmx} o*<^DAxbyލ0>P,8OkĸDT6.HO:{9F#OV{xAW~%=3ϭ/?ulmWۂ%/=J=:U|?HdeP2дpy7g3w{jd8⇃ȀX <&(Gdl1?Ƞʨ13?3vjjqBn8J:j`G'`21| ;7`&oPh1G a}C )ȁedD#O/6 P{]䈪F (䠀Kc.#KqgKhpu?ŀ׊@ؿtAC}"c_zAW;(v@ہ;\BPn  :w#-ya~ C'z6 UC_ B 9t ;{p?*NN& n nlw p?8_QC< Lq;FVk)+>eRƜ%Y8ωgz4Q0kMa?M47q1콌!} Xu;1pC:b`!7Ey!%x„LiRK33oT-"֋2$+Ill2_;$'I$ʻ厐7Fz, \ GN-M"EǚT`R%~BL&6.dN(&pG~H988l' +]mE P7ȌE2&GrpI/9iγ"Szx2*}L|DjP'^81Nh~ʾ}8K ii1U vp9l Z$N0gy4x2L6AT'f=$7< Kl#&s)' /S՗@ A N*1hb d| Q&O%xΗL(Ɠ+jU) QS4w75}M{Ҁ6D6%h'h ĈADA pm|("F-lTže 'Z88kaVmFwII7 i~~~}FY;A2 Πq@PB ^WfΔT! sF.JsѯzJrИk8W\+e^_4 1b ,oB! APw}A"NUqSJxBrR9aC۴s%Ime]+nnYfSV)) !cHɽ_oCP% I/ ֔J zP*5aniԚ>Z*|a98fkz.7q{ʹ=O@dA (F0aDY0H R'uJP ;-ִWSXmzNf+2~D]nt1k%~fo2 0~Py]܊?K ՉLMeQkj\rU[kתKmVHaыLzqWb1CO@s0 &߷uasQOԑLe-ZyUqR+ Ygԕ[j2ZkkU6NQt.bA&b#VgL{BPz7CF7}V3GvHwVeU+mŲ.5[4my6kR-4UN#rH|jx>A2 91PRo<݂x.NW@Ʋ5΅ʃvz!0$lŜ KHH"N_Ԥy=Hzg04Ay,Ey٬,G} "}bg}OXeeK'!vD _0Yǩo"ȋąs^kJ86׍z99`t2~@2ȓCByvK߿靐E?)ԯ&X׺5\L^sv:F"ed? ƿK \⇻)t{]ue5yn4nq2ueI 1@&d tGeɍRR؞Z`nvb, S!O" Hu rK}*e:.װ~vxcOѥ$Z"oieLMoʲ@[ F{^ ؙΜ.zD{@,D۵rZ ?8rD݁A bfL6lL0V;f`Kdp3% d 7 l+Gq@#[8ko G-x ,=j] bOrT!H4dT2-pSbj'tC>ZMISs?Ç k LDFr$j@#H$C!ױAU&46Aw'(vGUNkp+o5SB!JbD}ӃP*CD}qIE3 aQ*qGt7Z#`&gV[VpV0wEJz@٦ }}/DІ.ݐr%`U 0j(6 pUa/S 1f-u%o/&|E@j R|iA ~9_y" -c>CzϐBT0Bh2@EjpB e(;`uzP/R e@SWI-A+vw>o/e<{g@|˚]b={ǖ lMi24kp/70D'^' RʚBka~mg}#|%#3a&ϰ&5==-:+ZQԣuTD+ʅuBf! H,'$!Ҡ("e(U(Lx@e(λO}s7i /l>BG/`X/Ш[ DՄ.3#6'=0] 3ĉjқ:kci!i{JFӚ0#NI@Z ݀xr 9{"=qH{\v[laSBzYF Hz1|`D>e1̦X 5Q5P7y7@?H @O< qzܻ,\>5F})b_d < y`ۣpnapE?tݦ,p89 ٹi$,~'<=E3ch/qǘcӬ*h䥄gx=?1x~M\!_;_[ 8> yȷ/5 Yt Ac|bIo#e\=;0 cÑ͢GV\_͘>؇:Cɹ>q%y?h] zjPo4L A f~ 'J8=leC5Q QI^M|or=񁬊@vܛ|ܛ,`:jp!ul,Ap#@䐏bv/f<#|`l \QރR܎V^N9OJtQ'i= G,`Ow& iנ8 `ڹ} 3 ѻkJ&DD0 GMIT: wc;rjޑnct3:S ])lG en G `2w, oo~g1Ag[$KiPyRT'5kkCWlǷiYjl|(9Uѱrfr% 503o':M,s&[W8nR)UK]^6a֖ 6X~%dgEl|AWIg)E b K1F|q B̳(V=1mxCY0;̂c&εk\,č `rlLjxcWʴ|Yu6NQaK:|a6.ݮX:ҝbMf*7CIC<\:W{}w/<صSS~ՍuquDPQT(bIl$$,D*0:ŒZ;NZ:nǵZP*2)UdK9}m^|^K.7VzaZjBK5}F_\c<\mzGiafӛ0ܻ=|j|4쳨Ǟ$MW?l{I]voqf"k[եm+UnzZh|:^Eh[m[?QIT"bŋxFR.p\T*m?;1te!WrΉDyjx,k#]!ԳQ>ňX&gk *Y>cȎcd%rQ)#5Ңq+QhG3bwF-!?&H#!EjZQq_qY_iRH #ܰ8΋ŊhM\ sp1nq9fG!~%d͠3Y /RLtFkӡ\Ob ICo2 : Ʃ:KayU4c&ϜBp,4? #G2_%dBR+>a.| sxF=qs@ ݄Y0)։AXISQ-~bOqp?;"s;TR4HH6•%t0 `Hp\"b4GvnM-13Vw_,Q1_@? `g]!gCzztPh á.r=3'CM*${yCBEXtY m Rw26MV/z/钼vH?i3 lhS`¨DFf(Ь\_ܜvCrH1D%3O ;r,jߥh@aEvy7;S0 A1lz, 8HA6 MPnK|bH- z9DWUB𘂠z'~٨]BfoU A %@ǰlr2p`^cI<BW(w8 V)%$uWT5!zJ _6+_(ltrH e&f|U7h2}`t06 cP2A J$7?OCj!L0lSAG~DuAYgV\7?QtR6?I:?K 94d0 \`Qr$TOCl6Vh%o eLpq__ӫڣI7?k~"-ցjWuDd !I 2 hQP(ThI ǭ{{̋yy~y$A'b*37EmJO%\OŚx4C  b'iݑ/f F}KF-%:v22vfAi:Oǡs=_H`0Z:*J?,m: 20% qqChmݨ6foT?'j݆49u NU<*А^ _b`406YAP24]f2e\w|D x~j&TxXp%=6s@4j rѐǓ ) [`bc1` i,p<f;/_ |A;sT!5஘I 7X- eI$->CX?\Ij(cO3 4#76N0 Zd{߽\ml׷m#šC.9 !ƶ˜LV]Q[j6,KeDŽ =<Àd0 x9h@ZjKf{p?pjw˓S?+<ڕߡcSX8Z-PKj~!Bl0{R2Y:=,VGr=/mDP\s`z[k sBfjv,t^<{ j]7wZu@E מVET$xb%Rν)S $"B˸D5ŕhڷxHGz,߾ோ;^5YovYcS%]7+Îj~jrXUPPl,S.)Du2qrgH\&餢aH8, DO7"@@*,XSiy}-z.h umǟѨ1yHJ%e+f% b~jږʑ!K餈tXHFy1_d 9i9%FWa`FN֏oU6>\w1ҧ"6TU"Oe!<32%Q*f<%Ii#b|TȖ 8)GjD́dtm-,_tmkŃ]_t_w]|`eDAmLpfV"tnKR%q)yI㲇%dՈznLHK B@ 6X֬6c7WG0}wv]:֋5-a9AZRNV T#$Jđ%"\hrLǟ7J#rn<[%/sڥY-xg ~5=?Xt,S~gZxB/sI$4IŎ gj/C5z*4 F.!gCȚ0 -Em-xlۀl@З}pƁ}U7ܭ>"Ϳ{IŒ81k5Rji`MK vXQdbF0 v<[_o7l@陣UeEmz]~?hn/$%8vC2]$ow/4WԀWKկh!Ab;,å` tYk24cGfMcݬ?Q }#ف!'Gz6⼆pq^o 7}:Y0y!`XNKg j,eUL9or^!p]/?4$BQ.X=㴞0&+Am;2]>0GzbL;Z hk ,A}kPdk-[me{Vg]1f=Ϝt{jx&{9:jo|}{׉ϾGt~;߁pF:0Yc>:̓|ޖy9ӡ7Fy:-p.]gQMy? q .,* l!!!{ I 7kKGwKU#-X+:uA=zL[8 B|潚|w]=hil*5{.]0wp3GN RqU"֘[>asbOn"){>G6bڸ-Gx}HY|HC4ЄaX(AQ> a@TNq Gq2͓$ߡ(2)*%`8z dE!; qL.}6D3e|4|Es262'aqh/Ȣhf3 2* (\GAi,; <As Ru t:3ALd> 1y J ' JCʀÄF KTaP-!DXK/ldAV'ɺ.g Ivg|[xbd=xM4d'ѡ`1IgB'^9pGCI<ے!ٟ tNf@x&v.Ywg!>Y/yB t&xCȀ. &E [D(@/8nBܖ>BE<C!ρ ُQx /(#hPy#o1&BPPCUꓠ4 ʝ =GBH#3 KGR9 &'}HNJ1&QOn=[}KAݝ <Ϡ#4>(:qLT}å A1(Iy -|v{8TgP^RWhʟk4Owyw:?.)4½a#*}P23L}*QhAd$?ҵj}jzoW ˦QӅQ9g0"7x&XśU@|e渱jGʰs)wtuV+neEc88ᑾx_~aKyrpf.l=tГ|{]Ċ:&N'ؐ=ա#1+mWU]GF&K_ n[nZd(0[mmECSC-_zl/yAo"ؔ-Y#zY[|%+p2\+9TcqK?gK:-;,J/Y_8Z4h 8NJ),9yL~#d+ȷ.ͱLlK2ȟ9( vmpo]_JSMk{As_%Q{k7%γfGpYeM>'( dȾWOz4̣a[4;Yp؛=n[m .ѕ++ۗn)ztAGd9׉+eU|Yy+׾ʾݮ~.'0FfQC5&2%?1Ad袻[~mC?h9|{ɉǪ]]mK:j\]Etm_Wly8yƟ8H%CESf_˖889v!5dl!ҴeFiK4L^XYA@3AZ6]MDj+.;fw9&G7%ƞgTF.8M$, %tIIlb樒I^֥N{:+vxof:4 kRe i"anH^lYXVt/#\Ԉ 5=/%z*"9z&,9j649j>$)j%=֓0{"_B4{YS.uEp@ k%Y5_qOfKf|Pw .F &BWLxYN\;.v% #<{+UͤHߴzrLNM~jK ODdg%222YI„)x䇑 ~d7*a:<:~7ǎ.DDaDrxY~nSћjᮽ&ʷmZ_s2P"wZ~ܙ *d 8ᇧOq#Rgy)~[& `A O_B'=q/n&yd,@؆%`mY`Yn`ug=w4{@7|I:H5 ?BHI t`{R"n>|bf/s/m!?삐OV"xF`'!,ɹ 0z}OX ҂Ag,7{Ɇ_g"D.ǃ QvGlYMtBt"s+]*W5Fh+ !:i__#;?=G+b `>7ҁO=3@$fAb"h%[WWGmtp:f}6aי D @+5zq$X?r'j"Du"֕ S g8@> JdHJ[Q+<: D3q,]bk,d;2{!8?Ds3듀UHXAPAK },N&-*unH2 _x+lƴEwÆ؃Q7Q9/9}pŀw3Wq>&!?{ԯZ{d>@V#֊ArArUU=,7J$6^Z^%s^[%*7!q+C;Q 8/DN&A-d_Ɠ|Ň-֑{@w. …lٲt[R["WQT;KRgIO{[7c! qe#C1$WLhb- #G4g _4egy?YH_κs[+▲%kҞ+o.J{IEeW@ܩj$>đ|)֑6UTN-g7G8/yZ\ИNn}%7,ܫQ=V!Jy27ңv[V-@g_Bidg'=6M%sz_e_- ~6K]nt^7 r 9戞;O?O9$w&8|[ٮ]ٖ2h[ͩ㲦ԷƴwI dgQ@zlZhRjwZOkCf>VEuv$ٳ!}*$\KlWv#Ir8}`ZjMk귚}#ꆵVE}Ƹ|{[)!yDmH@6o<l&} ԭmݣFyN$,P}U.+*wWdS6g4e6d\Kٙ٫NQdsqYUDH$[G dΥ‘2VrG6O]m5n6;^.{vW6g?h䷙6 [ +eyU; jks?լ}0RiN0-1VU0.{$mJ l޲T͡ p<߽Vԫ{58xthWflYWf6nIY\#-lTWO0vZn|Z^03 iMqTU?(˷y{)L|28k݃(7x_h {YGՌF6Z Ě*yeNfSkʦԒ4Sb:ST41L a&.&{S͠|>rǔmݭ%"J};uʍbBf\.1M),,ոLZ^ُĀ>ӐX:)(UƔLV&Bٜ3(CU沧iFuh:'ʿ۝j[W[Ģx=rzSS nW&./fkIiViqUX٬5X9SY׺-CuyTe4\ѪuMBXEAaIXE@0qWzZD REAPAܵEܗ#n=3v cNUԞ,gg|~zy}?ѐf͂1=ŧoA4ӵV+ok2?mW{$QRYk+;.b}˶S"{qIyy%w,>{I@m˶\6E~у*!ݮ3FtmuM原Tյh'ly}OqOj# Ǭ;&a)*>K_X?+w᜜}md}=@V^`O2w  Y٧DN6 u1ֳ.3&sՒ"/jT6慮;TnuÛf=,=sӪo2/ UYeCswFRևD"_IUǧ M%S,\RU\,=㰽CQ>wݩy'G,iY5-yc\vSѬc{SkRNo / Æ/?R>*FGRGCo#zTFtb=tG_]ҡkT%^ 1MmDd+/d/>08g6;>'^:1U>>f6#9(TѰ臝Dw]۽j/qTyÈM{\]ۑފ_q3m,k |VS\1s6zڌ1יӣ vyŴ#>3D]!h`?Utr뮈ӖO}[8:>˼&<ت};hVFByCx]DFvAu:yDgD7#jnfʯӖ"kNkzżr =ZkCO]JOxVcz>Fȵ=U͊t2T8w(C@u752ω.4>/N͈V/y/eTFWfɯfOxdחa3/N׷!oc.܂M |{FD7$/!5Z!Dul+Xvv'_=7-)_3{p~jZxY4C UClw~d5IJAlbY?hGXaD|K#Q;#JÎ7n:Z(3 BHc?d`l.ATVK\_0l_Lj*P5˿C)EpVCԿ.4YEjE( "A% #@#r A("HM׫XVG+VWZ]gߝ/g|g]ך$i VcjD0!D hzG[Cq n@=_\r}As}F} ns[x ϫAy9*Φ9|f9DY@DB(KD*׌F!.mz?2a4;Na1vk ZC狰oR # ~H{/px*ٽ_ LJjٰb׻ͷ=o:~y_#!|\qw| $|ÃQ>P@)wusW`Qn2#5hyR/ף5n3Q-߇/5uM  N :!x\$hB6&P(APo8.S3)mOEHd`\iXf6iK'Ed Rtv阽';' :>|$l*@zg!U 4S V, =vS^jR \g [ͨ.Ǭ="w99)xOHKU|%i t D0^y(ewE&:bh F 0$@@)=Į%Ωs?A şS~+[ovlLqɥgr"2.GRIZYEࡄc|;+#vl6Knsc$SA j)0@7b-ǮȳCcSSfz3%쥓a㹱.#->J ;,3*o&e=d}06ߐp]PW%n 8r r`d0q-=-@Ѝ}M>*g./.qL'꒮O+IX") ]E7!=*nFgfONTF*=ERώ\>fP陕}z;D/*'Dˡ9a~5i(akRe -D}/ =˷Duz|o.5-Bg7߿f6x@ wqo]GSI:mu~nG߶a6޲z1hQoge!̩R^[.*KחkUM/+(L U~P^^Z6j`0pXWwT hu:yMt52-&bEKh}]m[UM6]e_Q*P+K+njQ@ɵgCe"y;B;9S w!!tC}fh@nj ՔUOguUMbW]CVm7ϐNԱu/ D{X[~|pL[V)DBwNc=fh rͲ]5gm[Gn˞YʆܠRzBNQH~T Ș Ht@ĖZYpـp{C |i/CC._-+aNn݉[S;mŴݭՌV"0G)js23^;B|3$toL>,u'{RFj+E^O?dr7 N07]X!@*Bw]Ad Bc _ݤt{+k/7ZT_ks76mDna-r[;~cx|D_|J>KˎEћԂEG->v8T)Nв@]n|;)T{s%35q0Ͷm@yW5;dd&GyS-<D6zvc_֍Yco,dYbjmt"\8\ۅHMkD Ds;^ ,4㹼~ocd 8= TxV{ .\;vhH5mL¯.CwC׏ma3>^gsX~G[BQ(e>*  MCraxayFc xGaw$xKp' l`3vog&_$*BM# |Ʉ@CBZ(( *.\,\ xH` X&c ࠇW!fpU3+l?D"\" Hų: Ix C =q?/8T 籎簝'c??g5|M˾Erb(xS(b DZDhĒT /j!8K"f5SdZm$=m2] { -HEbfy"z} ];ҏ|!iү 9ꏨbD2wa1xd] ԠkyXzLVG'zB9 q h( F|?b2 ?ɜgfn3~_r B,#dX,TzGPA}1a4{W#"f2ς友#; @vȨAKH?0q}5HpvE,UO ɯ)cI n e@t 1W͈1Ҵʀ﫧4OmbEۄ?+[+M:VHiPv}>dj3q]3r57`g0o/iK9XߎM9#sdkQ5nBN y\8 <; ?QB+ y#p!uNxʶ [Ÿ] X&wg<%ݫ:0/<8S6|n:9@틼H뉸Axh|KD~F!ZS4.y} |&t3I l}#fr+Ȧ0k4f,9nD$s& J{jUwQ1k n$o<.x:rVȖQF"vIv$5 Jst0k울 NeNEOU{JX( Z0D] (ަi0E&pJהFߍyǷ ʣl2v2&%ݵI ť3ɵD K%)^U / Es !Bh`/ {o. c2{WTKEV}9{[I rU:]M/6 %}_7[͖7[|ĒC_dD[ :U7JHu!ܪ5*5LNe莖˜=jС&K<\YH)ʨ+d nQnz 1!Y*bRSv10x{J.7[$5; לvU< uSTbt<%7GEϒ׳dYa$8̯~Lđd"412D Xp;O눠kXMaщԭq-5ǷUWFRW%TVzeRkYE;')O'̝{/!s[Y)(J"j& pk0hkZ1i8f .ZU*+{H˔Ԥj<|/_|b +.1]$[=gp{W#vVvYB{>bc'ٸQ9jU#'!@jYR.:S%񫚙'+|*'88|"*;R%S"h5[KLqf`34&w3T1Lz-#6-.Y(l5+ȼ&WdC#- n Va#FpV#ZX+*_ͿE{Wp ``#6ფ!ly +@N{Ss\»JC:՞A=q;mAԣ͈zL(Auy{oq`w0@-vвuq1Q -q/xl#GN *v:s9>Վiq\r@ o/"s;ٿ}52GpsgN kdӻ iWRX0o39jUmW;'2w(tێLݒc} 9. ra ut 4|$@MH3v;b=IQ>as7[MΦ[sf fjvg:`Kږ:duȎ1{\E+WwA'@?@ίXΟH m!f[Bਞ_l쫏^'1)i}g6Ky+wVn|8x8]Mh_ο-3'pC"HvY(9yѡY&/J9hZru3W/~,=A}ny;P gD.~gЗL{(m# a!: 5px7?ՙSa20 f`FP"JQ,X"q%Uc jtE=.Y{uƵG"%( !;O}}'~$~0Ofh#v^R+uBW e{; F;m_ x(6Q}اD֍"j)]5GPps`|(|H?-"")bϏ߈5X/v~nH>6J-߳* .C4'DD8?( А:H>0ZArCOY yJLX R`Ev%,M4/q-T{cDAD 38Ӆ㡽.Cw&]mqm{w'♯E^d֬QSzɫly]jyh'P=9]}GK4wV{Ju#qg|&xBSFӉПHD1v( Cjxm#TFtfNLPɮ+( }߆}fDTDDYaVePYM*X&FM0.59Ѵ1ihKs޼[ą3r { ʏ2hnڒ۪1Sb_ǯ*Ҫ=RDna_Y9sMF"",MB0R߯iPQt &VX) wj+\ټwIl徼Tʜl~Yv)(NBQj& S(Xlaᮔ^;4>#80Pk=uL{Ӽ/xE}ZhBg./c$18%#p0U$MK]O=O>d(NGQb. w`1JD}P:}'ih`A=hcZU4u kbMeՉV9iҊ~-FX_r'N>++D8E; QB`4ԃs5ԃz{vH[Cje-ZEM+c-$u))Y$TzU7 Uxm];xs6pk bJsS 5PH3@/*Ʌ.3rev.+k_ٶ0Ӥ{,wdh9(w辩KpBr_:lEX z.,^.Vô6T~GK5=Z)GvMw[n̳>\Q缮kD{xv;a="zNϤB 4MC rfh a]';m$gxF[bFl6_7 o7䴺)AU輺ɡQA5h8AzvV,Ns!eL83 Gx*NgLбB㐱Um kpooȱ>^AwP~1?OH1Łi=3LL{յ3OǨޥzZtnT!ACӷyFsh"D3\p-Ds8I?DMy`%6U" lBgE b eJ2L^U++fMOe?Y-k7g]ew+bG)F)O+a5Xs\3 )ς@x+܊f֟btRk(j/˔? 'ODT up~ `$lF򙔱xV2eы,?xO{*PuAo_t?_#?%7j`X~|0^@0WANx絔Ahieޞ`og?hΓ|9g|Ht7B|{`'  zh%hp440ppX%B0H1Bo FʗRQ>= X=Q[LɅCy+)hEˉH #[!`|E~\BAYpS8RB7(ˉ ro }bL x`B/Hb͇C<hƠ3̕A#z jAM,H`Z&)&5t>2L$U)}~D^ KK0hȠ ]̝ACo l`rI$! 2A%r|INeJvv :2hOZ1[•XB\RJj٨B: Bw,\'u}GEugqSFA"3u DPAd230 ",BK5ZWcM=hbY-b'su߻}9(zy'V&q_ Nq%]ev^Hihde-r8hQA:'hE"[|}mqBLb?ǖ( zŨ-,rw( e}ow?$kxo%7WCgҋ_w?=߷{'+E;oKQܒ(['e8s21E3fNPxpz]8oW.Z ?Y̬ Y 0/2]7\ g'\e /p@w$@/#@oZP/^z~>+]}A&ݙ;U'Eb;w>3_q)0JƧ(:@38]z~@Iw}҆<4{~ެ>;ܛs\Z&Uٳg7'dY>=x5qχ&G<ޚ~f

#z}b!\ C a ZdC_E yN68=qh~y&sL?ݢ?`xOn>A]gwd-MwN6]V@A`Wal-pM9G2p:ҋ},b>H.p ,ݨ?$Ev/6߹r{Z6A[K:K7]`'QkԱO/&f~e%<疈JGT؃q=ѱ{#4=]7nmtۯ6lM%YK#٪w͡hOPc8O7cq>_'d$8,d_۝P=>Ұ;.AԵ$lSlEGtmMֈ6eY˩1sC9z:N(#5hWұ0e7gRYp" S'g67c{g7'upKJFu=1Ŭ-![ܪYĕ6/Yn"UVѩ6̥2+yy]7Li :Ƣ8н}I ڍ0۔)oS1ņ,؛m ;s䬞l/^g\Pu1$U)&uMCR.־:acE|sejkQ)Wjvţ3q$2 ÍxAe Z!3|gVglnG^[΢ DY f itMuZ<ʾ$ɱHѩII'ܴI7r/Z52ĉȴI0.x82LcTe} AO)tX6eiʟPj=VٵuZaIBC]U(ReS*,˶I+-K5;w01E]#.BdSc PFF 9Pg?\Nay4;ʛfq+ Fuj,ĚqҘFYdNʊmLXŠKhLX9:RXU[<^H}ݍkW J8 (8g6NZ`jNmzN?f`afnMPEESkٺn]6eyZ(*X )JYYػہΞ;0}'MZB׋ǽ2-c$)nJjG%W?ō'=vpUB`J56<ցYki3d^S`gꪉ~E+߷bz + |NXc.tsȥձK,i)X,1$f=baoy-~KU^)5cFi(ޔmJצJGxiqoMnx$p̆; .X$lhIix^IUDnIcDܵZ"sVIdގ5^u+7r~v'l3`Jy*qEX[Qsl$S}Fna)kֹ9[V̭3ʮ؇-%$}0=5P-gťʁi\&TwWQXJ(W wݣwy2df3]/ӪKR\;-] lI6h )wHp8_\ɞ:P;`yVCNdQ7F׍j)3u{&կro7$1T(c1f`6ɝ.`2Wûùf6hXt$ G<gSFcwAUQ˴2-Z-~ˣQ;"ijro`R?PTY@Ƈ& cO!g|&_$#%;`?;}MCO"h-ݰ} `;+BgDi#3~n`k/b݅ F I'3@9=.ak[,m03Lv^NOй^6Am?tuނvU*3N5?evSO Hflo|oa1:w4;pPA7 -`s̟ɹ2;ك?e[V`'` x@7BdNqL9ćᇡ7\.,P.W/{rg̎ X>̽o,v$'ehB| CG{"$(C iJ0~OzJclr}jO][B 9 <9Sb(T/yf(ў:-TDA@'/R'yN[ߛ3?;nD$_}š-&¸P9U^x<~4^.0#;ߟi%G\ )PaI6Re١Ԫ֏ k괶MM6ѮAbN} :F9UrꧠǕiE`_PKufT :kA+i_ !7!q6Tt-? A$b@k"q$>ǫPZ%vٱDX}ب]ti;֨ڹS+D7Lj:##ݢ{-T3$88t%|t$ˉWӵ ki-Η=>wqڹ\wYsssy6%6{6&]jH`T$>5@| q4Ay@+#Wӝt[ZF⋴dډS5?gcb)+ )yLeKgMi4Hm5M'UvSUX*iIXgk{YjveVc5 Sհ|w cemyUWo5+ o" JbZE( K!@k@E(޸junkn۱vvt;ad?=s9s߰NJbMH k) ^ ك{x s%' 0!n%&,%^JR/5|ϹR3qS։ةPG2{4!xW!s΀e$ kg|¾Ct+J\V卵WI*9}V8=0MTL$[ƒۘI=!CCY=2/.H]r³ זDظTuYc繥ΕAt_fMMtfv<gTF0즎Їyj^]w!S[lϩ mn6gu4Caͤ&s>*Ie#YBCDHYCB>9Ήװ{^.p!g 0e b GP5&0z ޝ,}`k~ I_Zȭusf털\;')Yh?P[xJ$  |s×jߢ7 A R7 `LRʢܺKeM "]`Ȭ3VVs͆v~YQaIH?+)/n(|+)1"4#Ucpу. {F[UQyнŜX[W]_]j6BJj9%m|cqP4*Ht+rޠ5~#0t`aB 8Y0O0{Ͳny\VQS (2UXEj/-唞ה^dޗd3MD1AJ^W%fA=X4By#45Zѫ ޥ~E@C]S_kͭif!azSz;\Yu:\YHUITf"P _]AxkC?4 `Cz'f,@w ;kW j0\Ž-nؾ$mˉuY [uMeW/ة)ZxM* u]xpNA{&q38;p;@57h~D@t[ۛ NDn^>pW BCȃz`uP y2cc}8ܻy3itu` cOx>>ޏ;x}~lFຕ@Cq \֥)bJr:ɣP-g< <ܗ\;JܖᦼUp8^E' 霽:'8^vMm -,U)Q٬jifM~/-߿-4˩ŸS۟*p-lQ犓|P:Ma(UOUϰfRn1MPm6MWf7 l0Ԭ7m\keYb׭Vh %? Z+jslgXgzj~:J[EJ,6PnLW . )lڜk\]n^bԼfy\d\h,7W9aSs\ Nq+H eu-??;w WtX1QcJejtȴ* OY4KTh;7h.?~vP}^P}n#~zБ]N-:3.mKvʺ{:+=TFiXCEqYZX, SvfU6zY_L.4W:~Frǜ !{vziBЏdO%⹷7ubM7gjHwP,,ΏL떢u͌lsdvq);|a\NwYo _G=97Y#Y.{{3~,K`E=^&W{^VocvJ4yRp }بR=9$A_ٍCf =s c;eH~kZLtNr"}zpppc-4CJbe6%%ppj\&#}YI %)֘ꌉ!;_3T#R4b JIOde7 1P,,.V:,UHA@*`-k1Xb]QQD#UѱrԊ:k+ڙs@wŤ,F/(GFWύ8;jSxTQWc(a>_# }xk+$|dm8IZ%BN(If4-yYrR"!1ba\eLBUt|M,9"V6:p kv A>0^舶Kgųf] ޹>-)9;r=$eѹ~Ȝ9aّʰ4$Khz: w=}lIV|(fYb.sFx <%!e3˦˂KQ~-'-Vy[M(Yc^IWؒSڎ]*lH!)6=g;ؖm^!I.I}*$BP# `hKWjlҪP3yU UeXxUYRzVnQyTWW+>j a^c{s2|s@鎭WU[` |7q8P3kH̐ Y I{6+1n2w55w1lmxk:VXX\s;}FZ:K+* <moԪYG]׏[\?Mx,i+q1K6HVȆjdCLN2T+䃶^7τ={tW MDofm]2 kPO  3CwǀPosc6.C}$NKE%q\[Hv l#z,za ˞u?0 &5M:0h`<c=F`ӒrXBz\U3X>"$d382;s `. 00(лв]:!e mv0o E2 N?!kvN}'5) i{M'܋HDrA..iT5/Z\/_\JyC2h/`pB/뭐yO33OW:赦;X_*8kx!v7\[cی@77,]N)KOgͣp4x0mځ=jz/ȏI~"r~T<</qC.נ(++7&F,(,ȲܖEvvrY˂+  ".!xCEh&Fmc6If:i:MSM[vڴ}z<_9y>|e >X6e7pmŕOK\@$ dXqu,xFVe *U-])[kkݵMp={aj1drrr_w~ko7CfC $r"CkKGmoWkqKp/4 nRZ.GRZpP9E;}VC)g~֬(b}Bq}Lq==WΑHH둄CHW ׇG17r}G͛`!:)3aNi(-)>)wfi^Qg2z{88w}Hca kl!Mw07ߟWЧ>(U Qϊ귙.=CӞOQ[2 $<%b޿{?@ωlsc9ʅ49Lføv33 @fkזs5ތF~OF-L/jOJ[>})iNؕND"BWO_zp}b0L &tRݱp@Gt>ի/`wg[]6^g@ێ֬@wV?Ӓt3Fݼ^wKZVw#ơ#"$9p7\G߷`=` ci`@J0C1)Q0󊸞<+ߝ[ВrE 9{NÈaޒWޕ m'2H1D>O1wW9K(D}7 A) iN3X&{m.,5V4 ZE5=!8)Ae_HSGD瘃[xqz~\__z_ΒhlViI]lvcI>Yb9Jl5N-,+̃RaYLPZIXn6iH; \>b';(}-ügyQۼxQ}z ?jXxc^.=.vv)jdҐ0@+w(RV, Ư\2ZBm6^V{Nr1糨{{i'҈ߕ>j@k<ɃȣP]S!> kjX?7vy@E}eaOp}P, (q]ՠƂADET,NPXh{,G$1qu]{Xۏ{@xgygΑڛ%_>`Q2l]f(2C/)멷4y赌A.| b38~Z9P rxë;<+"Q1ír\\p4éUp,2!9V3yLYǻH?RO VF*gS݀cju#`WDak261ZCcIڲ*K%\@]+!=bԝC݉Eݸr6ԯ_ȠAVh6#GdeYPV: S^ jO-Pwm.߃k=?CIl3Yw8ߕF6eل\dikbR5љ&+"CV!V`zmDQ7+|; R@.Wtll]> 7 Lb|II}g'&w!h!y6N(F{;Q׋]# DuOrLhv/C?[7lO 1yI#_ҐWhv<xռmּExD3=桍i<,`!Pqk6@kA? $#dYM6RDJvRK!u/+~xI!쨭PpW;H32$t䐍dur .2i.'WG ƙ5H?2|B>N"u9RkC:k%2SVo>~CG7A8RWm! GzjXjMf|tX@Tjds"@# ~I p'4q7F \hK_hZG9&ۇGx}Lԙ0&He%rM8O_ŠS 8tZ%#R9SThgG8A'5qU˲h%|:bN+qJ'98̃UYê 4jpHՀ&|W2cjAxQeNW^/'7~}6}pV7lGX3`?`8nsWu2:AC=84aT9F@YBz7ˈn.yJ\C;N;tQwðԹGT{$aL敃*|Tx{JHfKi IA3!!Z=k, `;孁Pg} lʎcPR(bdl HVJ TX)Iy'e~LY֐՝FRK03Ov@ol=P4[Gas8OgHy!s!) !!9!5!U!쐣eOKC"#TțY?]8iG,=c~3XP7la(<`G`q8AZc"[eLeʳƕLFEq2ݸS^~EX(\(I< ԝn_>|r8nU =+LXcFie%-7e&2Lt\E)EjZL1S-0FlSϏ8gj1=6 ,Pe s :W|j {Kھ>XX? #e&5E\F3+Pydvf>6#hE ()Tm(O|ǧJx bca@OdFwƒ0XiQGdcNR̎LNNγ]mMV71.!Fh*a`+"}ccbuX2qH &̏(͍͎)K#"q4!SR4VhuGEyafav .D&葨((("0 ̌ (qh]\Q0.cMh4rZ=&Ic\kmm&A;8}}yIirjIjI4j{'JxU?3~F[6a>(ѠԦ*CPnH t$=WV^PVOW5MߡYgMYHc֋*^TZRES.qaQؑlZVudD9TfCi*LiPlJN]Y(_Yeƕjq&˸KΘqZqC&#CT ҏ}mf`69x%RuԘTfbK0ʬcQbBA>dbJxyhI%){rs~0AZy(R+‘R9HLT I\E4L6-U]ު^WY>J"r,JB2`y)PK8]LWA߳H^FB@̯}a瞂hĺ0ǝ"ĸ3ndX宖Ns/nO}M><<P{ ~u@7hYGo ڥŠ$;Fc@G8;#\<өG]  <M hw=n];G;65+P`0^ہN``~ jCp(C!EAeaqC1}C"? 6je6րv1.Ao8]@8B{|a#hB>n~psynu󘈿+27ԝXg&Qs459=@{?0# pZM3lF{p3,?gyٟ!a{(pm>/д.d/`=fC70ԧ'J"H5K\~¿ƍ b^?EnD|B]k4RCIX= (z%-BR&kOm?rw޸p0>&?62j4hGLAIþxq1GxPR*Ǎ+GsMԝPS20l<@?F-5Aո޸5ZxWXwq+0"<⢤MT8UKƱs qW\ %uW7hZpYӉQ\ňv ¸C8? ΍3n&<ĉIdGoN~:G ӊx0n11W&%atrF&0- _NI~GH) ^?`ST!|:lG0V#ӝ84ߛш3۱j웹 Cv`p>ݳ10v%%U'8V? _LHjȹ{<3&̬)8>'$r&cp{T`: 5cgP'vö~ak?|^ .l >/څCք|/@܎FcyG92]ұcq6-.Rlw/# û º]bO~qui;X\/=R}F4XLk6c9 b r&G/Ė$W|ٱVW.jձ*]إ[/vI!-;*ޕb$7SjU=c;3Ҙ?ov$/޸ذ, Xn}+Ra%=W.H Ƅ'NQ?RjjWr^\ Ekp4riӊ 2)I~<'yNGWJVRn0͐/BBl4ԉC6 rUe8T.j* w4eߓ(N*;STu˯lU' j^,^h71nFȘyP"\ֹ-B-΂d,NJ`/( bAAdHyղ֯dۆ4fi,5L}2dZU%3_S11׫=W̽H;Xx:O#c㳪EpFIB81(rБ-6!Q"ګ{dwY>ey&& MCMZMZr4;ej\A+XEq 挄2r˲S/dSYlN)ݹINuVR55I4)I%)RCm|GiJ%i"ߋk$UNjr!ۥɕ,]]EBLHuW ]򲪣r|ը纯UUT U+Wg`/*!mMVXE] k#ݳFz}IEDŽdAyZ8Z1~SIOrYSZU!ϸ\R㻤Ž@H55 IFJd$LEb<[ðu ⽉f`ׂX.omBw{P ޻bh'bh*6FU {'Za'|/^@,%#k& jU8"W-EĪdĢn+ºKuG|qXYĖ,$&niTUk_p "$DԒPJ2UcLUjj:Jϕ:Gr#y<꒕Ȭ g*]FhI#tM#44B3`i M7-a *tfpY Sa*gC~mw@^dQbOE*<7Ps#)7Fay 믐  ̟j_v;\y)`jcmAv3yf.fN5`={e!/b򥈥Rpq/R?- T@iڔʿ4A~kS>jmVҾU^#_WOjYQx?Vv&gR\)"K/ʥk%O<Xp1Pom$5qQ cXFTޕe) SM4PIYhx>]B IϕR)51JjIb۶21 ocR P RCk(b Wovm7) ĚzrjE oTK;$]++>v۽ c~ǏZZ}-ͥbbjW#0Gi%oFɺUh$/5?(G ~ŏc0$~b9EQ:_|F^}I;l 5wKa MchJV0E:\:Ǣt%B{ KuL/gds2y4]!T=AOI.?H+XMXPܥq>gA*KczM#c/v?>>~_zNo:ptp0JSjc &C0&51II1/gה_q0ބ10fXP+` -6ПPOls&\wV6= 0a&~j [Z=W^u_:Rtzme.4+k4xƠF )O ίu/`@hȉ+f7r}!>w7%,gҹYn!Kktv> KP_ ٤4*3ZzCǪljjm3S/`R _Z- N!Mhon6\[b6R\wϑc*=Vc=?jCZyF+n{>@NZ5/bF*#r#7i{YQǍԨ+ƌG(HyNd7xg{=Ê6Wvg"7*l.an ZЭ跔=Js'jvLbR53fg̈YaT2c?5b/ScSbM#I̯\%gˌ\}2|))enE1>=*U)@=Da)fn$[IcuhuX&L;by7q3qFzWhD{o͌ qڽ]iVK4+>B =5#>4`%ۆ)6ZSmD{d[1ѶИ`+UXj,m\Fλݳ 1g$b>ã0{ KHe K"I&L2IfLB&$$C!"ITBR, @!(}cVVc] B_Hg3s9|/>X$E ҐcU8E5IsT@U-wdґ G@2#Xa:Ŏ;BGYn;[ycq9.YK$_mqg.j]L,kc acSUU TE<',ݩӣgFsQ3Lw[,q+'+yN+fNj?g8IK+MuJ,Ty]̈Qif3ȝ;KnEFk\mǽvo[Vr_\GF9ƱlMԀxꉧ,'r`fE8;J9SU3GK= qɔϛ\o@^o1Mfg<`9={4cVy+󱕒c}fCV?8+/n-xBRgT7\c_-or}'w*Q?_n0#b&w[I^+Z\xm&}$=o%PF0 7f|>xhA,BeVVQ2#*RzTVj|&)ԥ`- V(!x lc 4o2cؒbی-͸"ۈ+c/bO~o&j`C5o(]k(FӜUʥWj֪"ͬFnԴnM=ɵ(zۚ\16&gJm<h|Pu<شZՃ4>\3 i7ѴxMmthJcuC2Mjӄ6ii|qkzCz[Qk`mD#hl#Yy&-)tS4s!&E:TKXܗ.S p8.jkaR3нAWe4ހRbc‡/L>e~>g|A`fNmh5@8 q P`%:X>qBx_]}%~1%ޅ&V#7B%B70vޯեh>g^}~$%zEs`@}xËWbCaADA z,EL Fe;{v0-[nrt#Lqjh8Чm>GulꖀiEP0'oeX׈?L0?gpjJU^lbPx;w@x#F7b;&"awQ\r㑗#G~-QXM7gQ;O-SQp2"G#q$*q`i9-2 v/kΘV#cak6X.#/a86`Cj~c>11_Cqy,$Ȱ31;VcJlYi$+6%90HAOPKL=PISA&ze?Z#tI %UoW9R2yWP~XaJy;RU496*pz9֧1ڌv d?}ѓݙCM7!Y'KG=2%|'>KL!rl/碗͙s1  ec [Do=9 V8PxWtS9ڕ{QNUy^ g#?¡3m>K,;&Ygɸl`\*cїyŸ_΂j ([ OaZ p6¥jJ4 ꚰ>ªzB$a-@Sf4(cCO# 1.aV-EWQ|řh/΃D*.m^4aS$E0 u3J$a"?JE>Nśi^t!:Q%,r\pVhЬEv6VZk`n&AaԾ& EQH5咸Oͫz4KI='=駛qfܚ%piQ)CSU6UhԕêӣAgF&}F F@NZOIB[%*%qX'{j}񻋿UZLXj`-P:FC#j -1tBo Ag}Bcr:#w#K V5HA 5Їf$&"p|wHdꓰb | .&7P[M`븪oR#$32R$uHYjA\, iD"*cDAtH8MENLm]'{LwXǿ *pʐ%DqEׁ /BEyjMl`֓&8֪16Mn?H}~~=~_Y⦎%( )Dn(/WS:`ʖ@Φ%r2mKʡ|2LhLcx, W<$Rk3`\r2#s͡jgQ[ ٙek,3ƛvsZ+*Pb[嵅OΗg S3`VjeSˌ[ۑCh(u:.:.Xn0g<̙+[F_sa SyH1g`^.@Us$z 4fp'Eg  m=E'{xK4bX94s퉮j#MCd;srÎ]ر;ر;h(|Ful]pwr߇ {)5՜ ݌>4Ap&B4hΏ{Hc_N`G#I#ůKuX4`;1'-cٮqux-tɞ%CR[1Y~ւ}8694.HbU(Mm™&>v ~fتnc8!;ݪu.4@W 9| -Mywt{>Sӆ#I? {YrU nGL_M%݁{ց 0=&&OVۃAcYp drXw@0C̄9P eP`~aY̍;ټ' K==⭇܁uޔ_8 l4r9 scxƎi )>s]u ~˯| | \K68ش +/cHgi? ؂.c*Zkl7ң49Y}]ZZ9flAMOŢ:#WϚdDeo{g)Q~hAN^Z0UiEUUnE&herU|w+Wrm]w?<5nk0I!vßWÕ_n/*}cJ;U *4X;<1*J,{T\,POfӌov?)E]C)!*mU2a.mTAE5k)7Vy~7L9ɚ?^3kz7P2VkJ6Ҥ3J &=UjE7%gaz<+Ŗ7fn^ jzM9X=G(eJSF,BW(5x&k\A yOcB+%FXZ(.EQ6XU<+Ė|l%69i!]552{+w >4)l&MPjX&и /SJ ج%E҈ CE#\ 06C9,{rhaVᮚɑJ쭉}5 5D㢒46jR'ktQ@#bjxFOCcNjH, Q-נ\ZZ#mPGjRRc<5>_b5&.R)qo%jd%ŧix|4,ޤ5^JأNh`'P-?<*?we1 $n "" 2,0QNHAA(MqZ5q4զM6mzĸ&ƚXa9}"ΡlX?m _fK1SU@Y(/ir'+; ,E&C2 2UZJRSdHPR>%RBNJO %$HrT#,g= 3 boeȜ6RpeE+#=ItsjLJ26(\MG'qA;Nw(4bS:F @QU5IVcwU^56=VS5Y!r>><ekzP )iluOy-P0yڇ>+7{4>]5o_pS$l7SO7=ϡ~z&j"9Ff3A(h ܚ4K}i~i<[dZ8ZL-P kygຈmlyh*^/|3Xs"kĚC 7IÚ%%m,1ϵxXE# C N01ҾCP"p8iFjz͚ 5Jc{Jj}?@?6f p뤰;YT':ppzybFcI7xZZ+ow^BmxBP\wFzw>{pbGs֏ ŜC9VM(gU8@xuq?Nx;AEquO/Nj[9WuqN ?%wŗ̺75f/NLN>V 1,vb{%Ө;[|;xR>prWJU}s_DщTMNΨ@Ə7𣋼:~ŏZu[8}D|E Bm'|.85go-/(t"шZ:s_lخ|l6bsll29=قldsۮ"G'#$:D b]Pr\l.`w,$ ϓTVWUD̮r]9 ];A1B9 (hr4*Ѩf,Ry ZDd+G#r"pvrԾѿ+`ܵ^ Gk4:ıT-TiL\Yn0˰/2,3,31 $vcxKʭk7V괪*RRU~V.Q*Jc;R{;G: rq+YȦcn:JFd)ﱰG}VuWj폴~UeZr6f_T=/F|Tg"S8%S[K8]ͱlsrx[}嘽,Lr fÄce.vLg2=&> 1,wvi9Tk%?k5t2Y$Dq"nG9orj8`!E8\IL&1B(iK{SH9#3jJCq'_vDSyʝi%SK,'r %pj6iLU1݌2ьQfL4-0`tݙ2y_ d2LG_d}>'.zi{XdU˜jɌf*3Y&w/4i'p y-0ws_c=om)]Ɲo6t=&ezX✖.kߜ,ȔjٯZ͛ٗs J*fwa=V|En+x O=ūt?*%o^ΒVGaֺ"tQޓDY3%R=V =xz1{GN]a92k=c`~53tRLrH[(m $`H#Ϸ\_!9 }ue1ӿH4)$(~I$ =5XE_Z#_t ^}Wt,RT$k$S @:;I Th$9")Obp/ yvOL\Mb&&+#rrC|ǥĠp!ҮZjBVCq$Y!6BLaCSl aTdo1'"lgqHLݢէ9(Ji+"J_1uBp:ع DSbsMa}aܰnBywx fkf?T#VJ٭aH=Aa+\89JI_4)ҟMDZYXI׃(ORS_US[Ƕ\[U\=%=@vP5,O8"Y=%]6mzI0H_)K0l>.wR )ZL-vj5!/Cp'V54Xք,(z۩g C|D' z "9&5xZpT% -vz'57` BcㆎS}&Tyi0(:5 : HtRwKc)j<)^xrS긭Mz[95YiGcݲ9S OkI7e.5ӍB 2{2ceey(Kk]XXXv]`9DPEEE-}3Ѫ68ƨǚ&5UcըʹMG϶&iLL9l?qg~e}yG㣍 Y&FaV[O?r&4ݑ Cƹߢԩ~?pҪ 'Ki.g]l穋 LhݷS c)+C7`?vj $ur.{gxhV.37kznP7I7M;*D2f;y6U+6S|}.UXzM|;]jsrE5zH]< t9}" v@ Z3a,tS|=t}M>|\sOzO BVȆB}24FQG@Ǘ9 3ЕbA\Ru!u>}p?^0zݣ׽C.RC('~n>_~fb/%||% x6Otk?Sn)qG>H^WBԟqsϨسu8Mhl6uF*ާVc%>V2e e摍ϯilJfSQM49αͷhf x%{Z1p"ơ4-6o,P 4jИTmnq_x y-5+8{wn}W0zh%KdhVWfvWc!޽LӺR8MI~Tc&X[Us<1=/gjjb(Gˋla5øph?YCif5iJ_&U}M (Q]HѸ8C5 TFU[UWo<=ߏ2pFqZ#-93#gjҔ>(BlQmp֘~+~e_UC,dlְڪ!T~q >O ИUEktI"2¡9*PJ4@);҃i Vgd(͑TG9du(9YgdrF wAF2:)SB}ځγ$:P^ ,g3_Yٲ5(ۢt%ggWk̮*\Jp5fuoQeEຬ(]EgS WgђL1P%PR]e`Yr#+sY<9Sg<);S2Ez7+;y*sIaSDn[X,4&rP ^pV,o4 P!2WdU薡PE#Q4NE -ZE'̃>8dY]p9dj FEvǮ"!fRzD1j56$HӚ1ZsL5Gڴ4uSv~LLJ=}}}J,}Zҗe-=/kMي\!iZP[OhgJ(~ԏ0h.CM& lXoӈ`]~񣇋5顸{ ٽ ]k4N>brK $B])f:[`ki8`ogg~rr9H};¥{Ev$9P,z)YJ\BcU?t-=7L0cQq-)8ť|?ct$`]9sMxB@w~DŽ q` a2B5XXQfezE|^&WT_?xNDH x&@QGՠoLNי1]e ?>Ǐ?Y>c2D|oI9d 88>//w@<)3̤NL ?>ď0՝?{wgROyN9%x%cd5^ \{%e3)/&.lخlln应wEVوvϓ:^<@G!.b(?hDcy2ĶuDڄ]?Sm+_qх*?J&v%} (nC D:\fkmt*t3zs7]/Rk3ɰZ嶥jm\Lʤ"iʒUTZM8K[T`T}wj9ME$QnrvJˤ3i ƗR-gE)v8T:Lũ#5-u&0PiєA^MԬI_ ەO_ kx G҂Ҋ. `+ܔ9"T0k#Qi*7eyG(AuY`w]`e]]6xM0xD⠉hhԦ:M4=$ΤvI۴;^37{y{wiJ>SMM,)O"t]-)n~]6pDo}=׿%؃ M|!.oNP9M1#U3&_,UVSSE嶶i] u.XwzHb=xpgيlAS!|(^UEUY\QYM29m^a,-<ٗоY.e|9)-0pvӍ*-M0 &]*pĪ̑,Wi*-5,TRŮ:&5UW27j{/h*u]9rFc3e.KFB|P e;GYli*.RQyVe(S^&OF{f)ӡQ]FV>L+y>FG*^3T͑[|oF׸[SQ5SӨ|3kWo2|ەۯ4 \UZ FoTQ=Fh.& B }/P06Fk[yoHCY2uLRz` XmJ-ocB2)f(= &rkxȧPPɡf%*!BCC݊S\bo+6znڌ5]0Pp]W>mĤX6&*%p¹J[4,p(.ܨ0/6&|f,4b96Dx5ƌ@=|mA{D'Rb45AC[R@pDT#EMaP<0iBSBca<}P{{$7eh6ugrј?v6ʜMncښ 0mx9c8GXfH⽓1[s)V)m)nql( ".ɣ=åM$wc:<_O&(ӧ &⩒iX tSK(kRˆpp [eg%yt2'9drcN/8&s-[ֳji'7UjCm^0}ƛnr ]"W4y&걙ztG7B=V6,Ԣ\1ovaM]QD:Ro ig3tt:~͍[`+<(f"$#I̯e'{5N1bhof=Cc@~ Wad 0*r޸ΞqM&:$fϼɀ$`8dA>ؠAd,-=qB~#M][}wuO|ʯ~g ryAXzEa N n2.SY4yy]C4b9eh'{̻Ja,#tZ\S Z!}5}L>U3 xG;h^ms{V3]8 Je|INS4hTO[}?#ĞIybZg)W*7eƻjArz}}Fwㄧ ShGV4\ԭ~b&Tb n_}ث ѫmM-v,ϵ'`| />g,ƒ8B-^T*G_L|7{٢mӉ9:w [iɨ Fܤ`< W;k,ExNT2yg?fۈ_FtA7 Z9#9NZ֓I:Y' \9yv2È?#KBh&t0UjgBF5׏p6XfƱZtR'e]o;v.p8qNlp9&MNv-mvJWrT+[v h5[@QZXA\1&  !:'}<_+Qˌ7ъFQ4$M,c]OxaYEVW^eN{{J;Q>!ctM:^FݏNtf6R;Iha:fmMEQڣ^C")RQXs< uM!}*FjT tj"W5=dƲ7k 7,jpV7PE,+s_ܴb%4J{JCvJ.Ym\)Weʘ&+W*ߩd~ Z4ZHAD˜*@#S4hтk"6P:MAZ]ƴwRIJfa X<1ٔ0974dnҀ9~sb}kIieF˜, WrFAeY*]YzJ9ZM `<ĉeȖ" X-V(b ֣.:c 7(hߡ} Skj.7-}G\ܓ<:B %CYXc)O/;Qb-SOYrʫYVI6+^UrD~ǤZ[ث&xFNjr;^Ɋphƒ8$:j0.kQmRD5jq*P mZjj9Ffy|Bu|A5WU| qOPٍQ4` z=^0>Eü^P.Z\jvW]/ۧv5GT_?(g\.&9=A6Á23|43 #7964U_.4&ab1۸zsVW6t-ribAL"c+ǶDObIcN9TYPs46LJs;0c`w^@nwUf 5V1!a5&9f6Ԍn&لnތc+Z$_-xIL|1yyuz8c}:`?GgisyǼO& ٷ=0ۃ>9g4OdNi8)<|.[O+q8O^aX\ūÚRZ#u}g\"ӿ30+FHaW MqM7-:uqSu_qp?a`ә>^h^; s͌I.1_^ }C~w=ue|>r,!݆!ytVLX1K/W[e2c̦Z^ً@'~yy_=ͫ O8v?;NDZ%n;7zImvݺ6[E֪] Bҁ( ʠ*kT.T`@`m2sQS>w{y+8!hn X_8wp@7)82}]c^e?̫ <߅o79|NFb-COoc\#Wp9/|^u¹|<~KhM^#80lO1|e.c_ރw&2؉_3/^P'=C%i/pZO~|1!} "zARBLy,|>Osyx4c$csyy0;G{ W=hϳ<*wnY6e6NY]adZyN8K΋eT/·df }?edNaA{)tg"֣=Sqy9 ܯ3 OTnawj~ m+'`6@;vahO0y$>f{;{n2ŵSϰހa<_֜B~c7EE]TK2/{]B?J5hgI8Zrs̜y)u&x"<参 ǃ-hQt1"Eo2KnB>@6X=GRff}6CKc@ ZbKI~hyYE6VhF~ , )Y}E SQiT]ILkiS;,>Dj+>V%%9ib"6N&!ˀXf2ez˪cU99Ty:;QޣeJZV2V˼jQAE-\RrU!u9Eqs mohn0*]7t ԵTiU)CjꔴXSҤZnicƄYEyj0*h|JTgX>E:'?'n݅=XK۳|ý49u_;-s)(WaQV+TѦhEJgάkpnr*[yZsrW^Ru pSngN5pwoc-u@[>C )VB.1WljtU(r+RW:긂 ܫuonkUsJ5_#9ϫ}*s:Ļv|OA?tbqo&FxL y,j+P[ZޠMyu7)6U>(g9|'e="|Ruޜp-ĺV|e:^$Z"s~|KwF@܁rҪ d%"#O Y_%xQgTxSJ}NBw3h&hڡ{Pa\a.UF|rFBt-:'kt,=2GWY!D.5Wi8{ 5سly Cc~;7zUSr cN1d5OQy|Lj78SEc*hct U 9?ހڣس^V>7CPǵIrag+Z eʖʚpȒp1xiE%ɔL%I$1ILY( IpB'Po+h{$qh~\r߅uc H^"sʢ!Sʩ%) S jV `V4NaRRRl֝Iّ]hϠņd6h3//LH/S/9t5Hu i࿏{vw #A<0sqsc,1|rl7mF1f#+>i<>]s 4y%lH*P_rsN0+8t&ܧH()^b)e`.ɐц?:񣛜M'х.;q+\̎ ')'/aS} 0Pc7!g y?QK9d% .5u!}0klVO)^ތ6)`{`5=0XI}ƏuaK}u\kWr@nzcyGY<D^%-ći 5M7a&X90Os6&j>괟d+V곟Xl!y}K؟6Sϟ!s=U|R</hr뭁H(!0 XBqaC*5?+8plI>| L}_cuM;9`ͅ9x7Z}k -Ǹ(dD\,FN?#'')3q˥|xCulb3׻Z>W]yD&Qp$ U\0!Vs%q@ϓs ,QTg~)!ĻeW9IнFsƺFA}pC&k@&0@>r0u-ys% kTmr YWIe{1܏-S׀CX5ȵG6(пјwUH}r:~\eM! s?ΣijOZ{$U1#1J ]v[>_mpmu })'hЗQ* 8fy >=w$) t9Ïa|$љY;6f_)b 5خǶ&b{gbx O)5dt;mG/Q'*;)p XUf{&wѺИPn.NVjd ~E=Kx:\?דDtO`X >-`U2K@ +\gQQH/5?z ORz^Nl߰Ǩc~g;h$i= lYnl WP:l7`{'!n-n_%sŃtAzDwm_P|ت]>`tdJa7#u:IDQR-4,MGZYmbÛV͵ǐy,G1C,E'9 'F;5:KQL䥅L>f2H6lq~+93=\ssAOǾٚ5E^8BpDJ8jnV_D*P#ĸc7|8V3pw1wG6Q)pd‘GnRx੅M؟Ld4HR1è:g(UW^1DwAýxK#>6s13:mԐ`ˀ)𔰓U W\ᚈxC v~nw]Al}`hi`, Y̹ßI)&;U^U'4$yRTRLPij݊.V8uS_T(u)G9%RQ}_ι_m>@xV˻JP=Eՙa2åL2TYrEm5WEA{kߢ^y䶝UrF8Xʸ HjFJޗO4:Vđ,Y**U" 3X|WF\~96>>`b:ɧ20ہZyVJ)7WJI*vf*RRY N@9U*!k]S˵HNZe^+쮳9ALk=YHI;cQ5WR> BK?/M< *ϗ'';A׃AA?L pew^g;n ,$$\ T D8V^Bq2ZN6#2Ң >q;9oyn'[鐫%g+{ ]Il% e VP!d"Z "8<<]LpUq-@ԉhܛ_! c> ) $Uc֥ &Sa (Hw#)<as29C>q-JFP .~1͵~L{ MHi 4 -JG ll+@5c`*o >40E70cۭ +W/pdK,1!a7fF3bll m B&xjG؄;@ |Ro.<)> ?:cm9&'4^6O/3JκsܺbCg\o3@jiy\g6^g8 9@/}o1DNQCbwD&AzkN# -:Ncnx_`='d62!'#FW?r&eRR;㚅ͬU[uv ~&v6IZFPI`%XEnE㮥>yl>7 ,f=F5\3KTh\5!%>擤!s`1kD- ^[csX|0>CMlFY} s$A n–Z5d||X`5?b ߝ%b&&ϰo_`aM<~H{xy71RX:8{WYIň%@#_&A%WL$u8xWXQ>8B>0uUJ &^pKd|G|FwUV3]6KD_PLpoFp*%U~/N )ڇGNvSO8jQv85mjd+~Ɵ9D!Mǧ);Lr+jOU,U*.V_ZUbRmP*Q!y7^'q~&>@^gUcS;Y))*wzT0TjĞb{*tT(Ѭj-JsHOU/Zl( "Tr O%*HV^SSSI++5W0*7BMJ3:eK1VmlxRS4Na\ɑJb1ǐ' A9J@!%7=A9$e(ϗP&#}cr?8ʫ o6$,fwI6l~vIHBH&@J$ $AkJJJRZjŢXZdZQt:0VvږaV;0/۽=s}o |ӷCyd}Ke+{y3݌slP⼫`M2|ey*(!Uh+ت`>9ò7RN-F 6`|KZi |A|lr :)wr(4KP Q~RpBpNˆ/B׏܆hDѲ!|PNc%|a#hpJF0ߕKżbxLq㤸Sn~ǐ Ѐ (%]%\a8g|JHlHOq4di X65|ՆoexhE0W!Д./n{y೎Y|< scZlŏv0 :rEE0&u٦0k@3nIk%e o!ya|HsvB!'KA#KYd>`]*Y Ճr\tuL-1GlkKx_ o8I/9kA!h.\c 2ꄯMS~w9Xeqrđ&fNjn q/X6,ao=puV?&kyGC&g3dL(9!Qjgky?ۇG>-})wžk) !#6ko,c\ɊA(fC~yCv&ړ{OK߹F*JyW=烀% qe#3pH\΀j<9y{@&/|N:gT "bc|'ku4Jg-_-__߃?[mrrz{ҿrGQ -@t%"}v̨N|StLF8$P3\PEM/3y^b}"3ɹ#LV92l+C 3l3ԑ)eX%x?<>j* -tL4&qXsh^x_xONjqJtR{L(P&˽v+p^Z!3Ne8qY Squ sa(C2M~] {mf{Lm5:'`6?)=|w|_APŎL籟.Li$_y=Bz?"kzDZ}p_!B%}'] J)(<5kn tb#BŅ9!:NwpCȎn$|_)nSV"xfO*xlyxH%k7xxSspd;I쯇o9r8+[@ ԁ8cҕhC|E\ ;{Tn6ٻ4wX܍*ɝyyrgEo/(3?do%3$$`BH@ Ud(Q"EED TPM(Ȗ-Z""Kw;=4s3_sg}ߖ6(M@rAk&Ь%vJ^ ; KgM@ úZ|u9I<9v,}l+팸 O8:C_ mk<b$J.!)A-A&.~OHtOHZsѴѪŭ$NVi%M["VxsRܢx:{u>4 gqYBzt}N}.ѽzDEģgq%+ġ~ŢNy}d8/aKbrg*bNE} A3A "M~K[4[<~M [[%VA[rNj?]༆ey|1G@(h`*]S@K!M>b Gs)4 N_(| SC,u%7$ђ4ų `6уv-dwCaآļb1a11NSaȤϋ8!5F -ESw':{U!<\>y0?*>⎤3&C̙",\&57K?GӚ 4JC96g! -dSCI23!rm3A{Z"%I cfqdZ$-*<|6xcw!^"0Å("qkNƤ5!96"M%3 Cso#:24s4/%RLZJkM[f ESjhrٓ\gRGB %xPEWjI],-VI^T0 GFZќ^IRkA#VN,c.'ZϕW:g/\hL1$iRUkkuRG[bNڱEAΚh˺نTIn}Rɻ@S3$( 4[f\" h /\4DSGwΆ݊+yލCF3gDv6gTT a[>u 4UFhF4B@?hI| baX_MbHДt%0>BS .z$f*|ըj@8:FF0'YPyH`pΪ4M LH9:KFf T{|jHh#OS4puddq'qm*i~RRB7 ೛%ljۛ ZoIq@>CRM}jP~D&%x8(D笚|9*Ŭvh֘Ws/wQqN2,AI5F(SB)RV$M׍luxUyd./(ǘn+ДЬB݆j>׍l[ {T38؂r99<cBvOUdN[`(Y9y 6izEqe-Z^Yqխ暶U_WݱSv7٫w8vC 1r17~¤Snco5{gκos~?.x?.|EO<䩥˖xz3ϮZ k^Z~Ɨ7ymn߱s[{o{>Og𑯎~}Ϝ=ϟ.\JJ]IYWQdg+/RKrR+kAݔ7) nƃe-ʅpa2b"NLUV܉w+3~ܘP~< y G+K<Ô+/b:&e+8fMy[sP>| T}<:I?().^J>\ͻ%~__b2lvǣaO G8#1<\|LҚ7?3' t뮶;f[mq&O6}ƽfϝ7 [xe+.j[ȤƟILiLT*Nhj~o'G~83gϞ;w?]pƶehbm֮-;zW_5a3Жj꩛sӲZdOG. 54PCC 54PCC w +u%^]/9 _ԏ-~kwe ܝVOѢ'~HPG VFծ=Ͽ1}C&|ww>/n{y /Mٵzo.Ѳ{_d'װ6Rk]/޳̾{ttp|gvzffgi;fiNд2/AoF)TLP. E["-)'-߶g/yޘᎀN"_ )Uka"a>W~ՓĢ ?J!&vezzc-̣>$CkSFkCe\ )j3J-)|ʉ鱶d(;nZs>w'C71}fDmX4 >J6 3O;F.^hW}F]υ {E"f(/c`4Ѭ7h^!}w>85KhʙHAΡ 5.-F\ |{Gq{im=/ZtUppdK*8+#KD0 3{717@AoPa.57d0~DK2qH9yBCOmHLU1tՔl2"8dX2, K%e( %6@du= םj^A\ˎ*$,!2.KGv[=ZP $A=]+#zw^ XaF*bZ*SRD &^\4h`C͏@v~'x<\վAGi]8^@(WI<}IXA-edYÍDVa( e Zg:8QCHz,I^PQ%xI-02,탡2Ad jk.s[g-HQ$Xi}yJ&E|Ne2@ZFO AF# zw/؄9Ќވ0RYeJ($9J;C`M􂜇}0 P/69&Il됼:y*LYT~?W@lͥt%SYBfaC*Pn;ӑW_ހ}]M*'(bN)%O2qbzȅ)}^KgX $'mo N_u_q y[r=P"fUdVp=!:qܴ.K``ZJ s^9z5-&i *ઑ9u(I#ObDQHnƖP VKE2jVwn '\G&ǼԲ֠m0NJ\ɰuUH Z %4Y@" 5Pog1ip`䉳ߦq/g(MEɱZ,T"V $KM2TjA})Ï9;g/(Ė>Ȝf+Z5b m @92v~ jl̆q'G%7B#~̇ސt& n磛#XB. xю?S]1a^‹w>LpP8:H"Ol@H4@D E> Eߧh x 3{ =p~@bIb)y`o%65~) }OztGr( yĆ_ x {L|@mT+5s7*Nȁ3GR]xڅ)|9x^d\ \dyb.pPdmkkm_"8'q*)c{&B?P|5 b} \hXL35j1|%/h`?b!4У( ^@9 Sa6r%'Pb 5A(=)|FIS|F!'AcIn#V4jBkn    {C.bE aԞ=ag*"tVP*GhHLf)sUQ͚H%PY~5[y6V!zgkhpwK Ly}\DM3 3]WdkijJ$#d=U$yA 7B-P%P_6`ׅ3$}N+5AIL62U`#%yWFSE E[V\Ks2[nh`ԱCbx. 蕽|Đ Cű-NV>ߊ=jVy& ޠe=ή0ۯk@G *h\̰O^LA m(U42fwO'pxa0|YPa47(t%1 Ο;\0^vwvgԟg oB l;e^cdUd ~Pb07(PfG?^;87rzĸ~_|)8Wх5SSrITdC!b@ As/=s߼tD[gnyQAA$LN'3 c8FBm}.)u#=g4b4~noUc[Q8ܾMYBy͇fBHOI8t8:K |H{ȠLdT}ūoݸ\7gMӫ[e`Gp=ϡnO"@EdYs@\4yjlflV/o.=ٴBj:*n%}lNmg[SeJKn/T^P@QQQ@@PA/],YinmyRؽ e[ C>yE@)H;a#ssEfKϖ?,?_V3|~lEfAx8䌃XH?Br_({Jh3[^^0_S 3`p^AkOot7$磐dmÐА P+6/ f^ Gp1~)$T1|RB.玦TMI千.YoA777SCkCɦC ?#4wPO?Nfo0qZbNYLn~(VbOKmkZeu8MB ̵Օ??#Ȏ,kNDs:#:'>V\9Oe t̚R2'L掞8Nhmנ镡1!?mb#~GPqEfV 7UO$K.R+ \f9\cLu%uMXyߪoNhkGWF 5Ak(9ԁZ$)93Ε4RfiNb]6*MZInAӉW2v -&Ġڷ6[ɐiuL Ye>3YK@e6rU/"4 SjbMCb"5b@ ЇIUBEI*w:SW.+Է[i>9Eߔ+UKr7Se@p^*6A3x!Y!,!*y-vANEM&ACӫ cuԆnvC$e^X_/.bm[rĠyb g \)ƴ&} IQRVmz;hgyn46,bhغ ;WB;b>tv/KWt:A`jNmg\}CEŴ6NΠ7Ҥ}4E111t"/,1AaO\4FٴC AJd2ȫ(8Um3R HaD ذ$[n+A? cSΙ# ͺvUD֜Zא )F/ (F;Lj! 14! rfס^w Y]1|6QHUU5gvŹ=utsԚSͳe׈2xRKFEMP81H|ZOgk15zq4`.dzXFPV(3Kd&Z/asbP+KVPBCǎOf{~4]=|RPIZ-` I-|M)z圾ЂxME os?߻IocA?c)ґ]쉗RtIZbAe򺣕EHE)B)2*AW8/1/o\#=s#ǒF#l{t%/NՓ % ʸtM~aB4|}MG 5 qtl^44ra8((>' ) 1tIDIz*5+ @};XpgӻG\^km'#!_ٴ_DTXrR,-s4A8K`qqY9UX[~M6®QUA۠]tw \ԮUGg<6`**9{".#u 7 '8́j');m{k&h ho''DX_A!NW1K)LY[FfZy on: L㆚ P 5ۗ@+@t =  򆶤YIVS~AƷST*e\W;^^'cF:/n΢wt@s[\d FPEt$H3>eOsJ0)/(kh@>Ӭn fvhN1{vgo'h9_ >u6EgZcin=aqWu7h4(N~ ="l'h0SFI721MGMl/ 4d`B mȠ84'<@sgV;5Q9Ts ny*rQ(FRiھ,&#{ZsJgK|ݶ ۷6@|ftgB&'=TeH[H}U{˚6˪Zs}I/S9K 'h߷ T7P1!O I=;scPcƪQm%WY.(IM7ـ Ad|LgGX"nJVx+9J%rS}Zd5LV%THdHm/6%^AfdP] ={}-*[[|SJј*9(#6a"[R)|Υt9Xe*\of{{8 o@eЅ փos{Ȑ選 WtEi2ȕMe*icAfa<&ZOki*QCP:gZd`"/zn߽ʯ'mytSqф̚t^s4{g%wQ5g,lmEڬJgd୛ m?gz݋NP*|3I;! RʼnC䖸 5mkey_goMi#֊NǺ_ъbZԊ"( D K! ـ!!@BB "ua(nXQHU^h?ܿʪ@-g{~o٦w7iaݯ'^ EQG TŶȟEa|1Hx]&]-E"͚`^?eܡaWtLmqu~)~?;I _)OԄi_hY=A.3+ݑq+rnW-n/^2禰gl}'=$qϛ2 &[ftC2.L?+N z*)ShSes s )[+,vU%8Zyps T z;v6ُ.3 -#0l&. . x D ꞏ|ces`"5^Y{JOD'"E5 2p!8 ;Bq(7n\v{>F+,Uyv.5ก .I- vA@Dl 8p}!:.uXb,15(`ռbYȅK2Uw ׇ _ yC7^R@qX;o;w]8|6s\FV[a4,/Aqp[k=;\ȯ f+7@!H26:C6 pm mlO +8{q\ׁD!P@rԣag BdIR&ԉqMYϢhc.ƓޜG{a87Nso5dX݋`J#o;A ccx⇿LNHVvL7(I sU g F3LcL.SITS󞞹's1{.bXܛ|mz^y3-9D^鮒d L4T ~m8d{嘳@_h[;V'(PJIki)%F'\WTonuwWIeU'z+fjol/c}I6K m+ΨU\f\VnFeoÅwE*I> fh:֥ݰ˧֚.n&(袔[1Z(>D$h $k+{*%KGuS[o{d<5mq|셽qj??gpzB9(RF/oeV[׃ZE-M]5rI@.i' 7crk]:_Szp؜q봋sd 2hD Ӌ>n_ҧʫW\[1(\Ax*P& e~Qaўw5rr,` )||dh2e"1!>LpW1CBzmM><\( WyPzѿdf--hxomP1^R#g¦iIIVD6)/D~R:.rЬ,N/TV ֭],[y )u߃'/RBHoƒHgyQ0 L=ED] DI(>݂]+Q[W_M[f1-cC\ÿDa)5:6`5\,+E$Eq$rV7z߂jZ'W ۄpN%4X`E3@D߅P Y &( Nv /Wm FI,ˣF9"/*J~ ?*\8 'C| X d}51RL܁i k|s'Z8B$1"۳ uod8:;r8 8DC+D8CN@;)/S~l ZCDݑA5"*{&#Ud8p@>3Nl ]80 {`ma CVsX@s`5Qd3c&?.n)TC*בֿ$\)/]N`,w[V6/SW1F@g JUTC4$"1 Bg $*AHP ' `jAj9H7Z $d;A, Q^jC>Ak6*8$l(|g<59jCo_j@nEDioK 0W, `{kX3_*yBJZJEZ n $/F.D>y;5?5HoCIH>,1Sd{jC<, 5ujS h5<:y)!j@Ky4@ݿ4$ig>3MM$" q:y;*CaӇ,.1ҽ?'qL.\|Q&$NzEseP ONM%O_P@<Ґֻ<eh@!Z jYu&o5C\D.S^GU$ͅ`̐n1p=pS4\:9x Va dYˤ~Hg/$'gK'd= iN%  t=n?e5&S74!i HCJ9@ї^\Z;=z4C1O#  FI%>aOЀ~9x,&i<4А͛lG68`H7K ANmtaLs)JM .QY2%Y")u"bb] q@$8@50Eڿp0̿bv9YCu7DrV,8dI6Rr<ĵH i(ߴ׵G>trÛV/,أO[C0L]5SI =V E fKt XBkUSjOL~Wi_  鶅 ^9k>=퓝#ۃ͑QqMzZA(VIXb>Yʙ,uIr- RzV]@j 齒B  dW'`#g! ƽßo=UǹC;|{Z#"[o]MIjRE6') oTWV(VX5֝U[++h(\Aj|l>m/^7K>fs,ؐ'NYJdXʮK2_f dzh F<ߪ!zA=P4;A%r@Esw]kЙM? _p8#,-:Ym+jQYņ<YK G*hez}I$jp^ixo\GJ9t[ivO=W{y{7QUmqYd ݄/4s b)R$Ī8V}pKsةUu_8t#Tov4t_6=sꋈw]`X ҊsdU4a|S$$E#LMaT! LdN)σM~kcK_o}vvo8~,x8<⻘4j̒byƉ_Qy"Z4`k0mz{i4hހ&ǁqܵy 9O"n|@F 'gR> ݈6fYM\d2m&Vp73pp,gnWA8vx2 5c/OOp>D962{"1>m"S^gEYQϸĐ҂z6 v|yl@jGr j`bCo+ o=]ޜ3a93WgC3"㧉1ԸkxI!/)uJTm sE7Cj?EXzf?l^s_);xًٳa'fKf`cfKʂCgy!$a~W}g{e(]P;# Q7la 8 ` xd( yBr&gp>;~`}juBR*G!lu))6<קix A;/CԞPH i =H1= bPz\Qoh<-^(eCUM-tZ':-"%,X8.λی-~^m灴\qJw֮ udO~q|2PG( ac>lpNj2[Ke8vGEłH "BH)$${$!H*(( X.l"(3{9W?p.Y{ofF0  dI_}Rb/Wx"xW]^ <|s8ųq0}<Nb8!cVx} sw[1,b]YHLelQuҬ`ZdY-IVQ¾guDY@< ␋ _x:[9pˣ!5Q-e'& 㤞-Pq$FDk (ܚ|9ǻenkxn1P` #|"Ȝ̍j]w{MEP[[L('1F:רgKjJPER+.4ŧ3M7XN-Kt_>kDP"ga^c'qqK>˞^=SgsוGŜ*OJ)*JS9ZSXW tr]:ǐ,ȣ+*,4EC>UuӜХKe"[q`/j, IgMk@76޺|tŦڳ1ѥ|~y M_La˭LQM-àͥXL$}9UBȹn&;t$=)Y-0epD`anj{9vZkgoaGQudC g Kv1[F?!RS zdH4%Y0aN8u)H d9s8g[lIJŴ\u]I㚚G1hhjsP+]ռ\}xn~sDr^G{TAPI =uz:ڬ5>tk7ͤ﾿Mw/uk zDs7u#)y)6YAO9e;푷T֦P{@!AsSwZCRs?U O>Rj&;ߨ}M[Z W}^w76MUK,Ց=8RAbyڰsԁ ֫ uTqZV"D '(`A^Iyݿ20duQ琯UPi5w["I^OjfƵ<ɕawY9*y;zZ]k^wiT4لݔxwg 10dBVI۰ՙ!NG|=xa~iw\p7?W^)m,m*m+w4XƋk/ TA!GRpn .q.qst [q3c>VFn=RRL{ e"Ibw:C/8hΎCBh$3b\PpJx֮CyK2c~q_vdrT]ptInpF"Sp},t66!l"FMl I3Ff9X!AN{H+RƍQgSwy*wlHڨTG= cpsdX"[,G\Z $7@t6KH  /im>MKH{ D6XkBA2]d (["O@~bN{@i 9Z F?x9 ϙaciǩF9ݬۜ{1HH@?!i&Ri#g.Qi@sTnBz!<y1v> eJ ?Vެ#Cbhw/e=(}z,~L:%|HŞcdA@6}GnRŨj=˱j*n_J2}rcf32gҎ$MIٔqQ~7לG᜻ vfOJsE]Y*HPkPNaZnZweCI~T~%c"7*kHNT$Kc͢ܧEw/ sGxvt'g@B6$7ϰ&5oT#G:i)E edY$oH I؄ld)C@+R>}/Ç}07H^0iƟRO~O$,i,K0)QN|BȢ`z@`/A\$%%!5v_k]7t 7S.lt9nF f=ް|܁Uǵ6[B!ڐgiznT[$߮sڀxoʐ8dgWos0f3iApZ@bڢ2Mq? n.a~DX+"UP"  "d&R0 w~T]sJ/)h k0x QbF-&*E jQQDkbaĠ8?R9Q_3kỵ@` ܦO_,Z_t86]aɿe?'#a dëcV[L:@?}b#o$`W{tC 5@; A_m@%kPkj~CfeK0Jjn@A((g4:I?|kXyI*x $%Rtfffjj3Q*jS$bZ\uab'q(\} Tp0zSs( 2A hBmT‰c4탱!]~^qD:M"!#M)Xag 'd&n,D#fa$ȋO0K!G>(B'j m6s+.\I9MD*9N` (7Fx!$fツ^kx]2_K,GT-t@B{,Z_]$$)\Na8XE= Ìzs\2Nl숄^ RMVBd2ePڠfV*`u}P\\cB瀿<JmQۂG0ց~Ӯ^ 7Pz<^O$B°7yi}>Ǎhc'|>B':8<WC𼍑2M0,؀oNXׂ䣮wvkʯHH|;čWH^: 4.x#=h1, -GrR:" `q'yq~=@$= &j ڐw c!o& 0 *r4bY0CFsȒ,!M[t=NU")3`^D`0~폰I𱤡-YI|89H  #D:#eDN3afȎ\E%+!_q U7xw܎ pN}!kH) 'c-uh&W؁/1("B`p7Yke9⬐˶ETxATGLroc?KO~K RSS?{i_c#:u6ᐼJUOjoSp 'r"Rqΐ1QcM#)'XkF/%mG{~B?d%KD.vX5u3Qi`slBE|q볢0H+z/}+K~?Hcd`v1n O ?dh=L-6kq=NƙLR =d,GJfb *`[%ƶh>U^ذl`=>ԧٝG0odg>$nޤ__I\2s)pFn[lu4v?5c5vwֿ) eG+ ˙%5oDH:2p~LξɹΧ}⏰O2t.KC 7:y, TzdVG[ʾ=VF9Pis.)/w"`8P#~}bC:1J"n!ȼ=sSbMsF])c~.SPnrn(W%3ʓNcžQ[=T ,BBxyɮht9e5hp[Ԋ˓vja̭J9jsT}vi.|oC#$ $Z-2dAC.q {'i:&C D,{ږ^;2(+r9gJ' *GUYs[eu-FvAdOse}N6V i(&A;}_;c䰛p­s}Vt*YIVe˯W6嵨~[TsdJiujejekq@H[2YD,%!iAGF>s:jh[i~W#J:Q#gW *J-eٍŻuMj*UgirYB?uz@Q5B];sk:~#-4)A)ԡZ I - *HDP]@?8*~Yѳ}ssv: {:,{~'ŠBzjZƲԨ3Y i%9ՙp0W(D/D)췉y@4!M?a{g6-—KR.~4qj4h^\:Y]_^+(.*N/gd)ŒԌ 񟱒@:mCySn~c+ǯx`q_8ΩZAd ёTaiEfFajŜ¾#E%/KiG $I;8-88 w>\/~e*=3rpAO^?۶[cK8!)LjFU^Y\Q/?//[>_LRZbٛ$8I rԫ⾶oý؁{q{nvh䘽a^k]gOhV0qјĴdL^M0TWõO5Ki1oxU+q@6\ET)I}QFˣ{*޴!ݖ17ݶa LjiO$3#>$Mr,ȅ#q)MU2Cu6d7m\N ;~8I jTDfl\o,jo: {FeDzS{“zbb#; WקjHjNgv̦_ -8$t%diF4;$ݑFSh䑎T^Ŗ86_p& ׄ!q쁊D$߁!c`V761=/{5JqP)^^ >;JBf6gdtmB᱃F՜ACƾ,ǴPOhޝ6wBš(whñԉ9mb%~cPI _}8-ۤН /οQKrk{5.T@%uR=w1щXE_R^K>KC  />/iE%FoZgaAլ HkU-ɫV"WCW9FHՔ}B[Z~Z/9})gOrveNfB82GuRbE| |#5lYwT [`wi} ӣ}x={ɏPcMeC0cy^a[I2ކP_B-7:=P&\hΆ80dWPh' bpN't/}hc{6m@]Ĭ Pet7||ϔA$י T%OX黀 >]4.#`\5ƨ LϬ_9,P-R ,?S@5"Ib-adVp'EBP>0O]QM^[TzYuQ Ɛ9! I@ @ A@(rUZPE *Ȱw;9]笇ظm@X  o#D/a$vla,|Fk~`We0;xۜ{!p .B i+n hkrx[6?nǹQ'q-[FÖ8āh=н0 D Aq1O#pR=%~h@m 3@ ҵ@ez$|e[IZ؀ ws*CfV=zG%v?&W0e 'waO"w6x   Æ9~/ϸnl$;C8 T7[ځ|فa䮛 N!F#{4i!U!_ٔ>oA%W;9-<þ$`ODfhl<%n|TQG wN::>r~u.;Zm`.W&<AȍԄȾD WA3JJb;D|IoKIyO%^H>J3*dS 4p1:?,y7s_pyP]yW~1GyFԦЎ'XGE6&Z,L( %;Hi{I 2+F,,jB&)&:Wn*J.eW{;i4IsȒVIT|(0g-$Z.UíN2 +TU% iC nE>rSiT՟՟y z ߾C7u27ۉZ5/[|ٲ[WjʙN[QM*jmU-M-4cR<7U>42_%di> 35LA,ty ]lrxOgwۂ_;CO=aCAֶ2fS<֨ThX%B}0/D=$קUR:U)?RHӎ1thkuNf Gkf,ںkyWS:s-=hUR*S Y#0deIU+*"0$N%ǘq5@:g6t1f_Km^t?p#`:Ἇ7R4ԲwVW e2raS(hr+F$!ˬeHP<3Sd[X15@ cbfq݉Ř]K0W4t QrFVXY_aS֗pRK qb\&-O+=JA]4_8̗-,qi O 1P= f<^g̍Kv;φڻp;iSe #ݓ &ZJMr`:/2O_^*yNi7.*a^\W<ƴH=;af~.al̽s0W0}Wu8/l_t.ҳWl:j~IH (" ;BBB@aG(Vԩ#.uSw ,0EtVEq=c= bʎϼO;~|}&GPnj'Stbo~~́ՍҴ껥? eUe>6 S9Gg?2ɃVEnvK7rk. ^H /usYq[[ 7sbMFuaӶ9Y k U E┆u9&NMit tIn3 .3^9w^SǰVՑ|פЭ37\X%XQ"L{~:ܮԶʬymdmC9TeZl7$chI-if+ qA3$MScCV{n Э _}#/zq|εIJŕJ*-A#HOr{kJxBrA7좑ܭt~NZn2I##rߒwYQ۞7<{7ú{cDfknNS2KR2LH.$ &zrX艨Y? ^3C \?bY>.Ԉd#hݐky˰qooLlqd)jMlp-:2{-O)zIH8!J"HX>--t?x9g#0 ee:@i5 !e96̰p\C8hՇ" `Bʂ,R)!*Bk ;[s@\#/x7){4<ǃ.fqq!cBE1"ST,B%W"=U^jo3v+w)n࿡) >HmW] f{!և‡ T\cMPCj1de6C!>Q DHhu«)5QʤL @JM 0&jTًH CָCR6 Qrq Zلq鄏 gLQغ|AACil2} fl)2HϠY_8!e+<8!vCKľāIp1\h"G$wH .HpAFڕLw8(XahS-^dltf',rw6&`FQ4%oL::!Az;׈Qɛo%Cҹ7I{-GK+ D4ȝP*yLa5%B )mP1oL6Ɍ=~iޫԆ&7rGQo1IyCWW/dclLg)BCBt!ő,:飔c}!"LPƷ:̚ bϱMr6s_`kcN8MEqkKXܪ {H @ b B-@"D@D A^VPֶ^u9ߞ3)1 ŌyD>$ < {>p}n0 1[ n32+$lw} b:XۯQ)GrU`0kq&LxO1 Q f#@O[ a#O}kTm=0}ډ}Bs"oףX}i$6hWѰV0+ s~1e9XET2K^Q9A~E6fLH@S@V@((C^ d!o5n3aNKǪ]/wt9Q~uqXN-Q1J8yj^NB03S?*?g$z$ {s羚P?llew]O~{GI=VkȉŔe&tir:NfQJ8Y9$Q)JRR^y:m<$HX|\^ԯsv-K.O}ݪ7rV>VANfgf1ӋjMOu^>/NPJԷ$?IIeH\@\k X :G.5yionm>KWg(Kɔ4m#%']ƍϬfeiƴ$:7<-3.#%. lb$ zob0[=\&:7;/j;E W_v_U*є(ɧB-K^P•Djω^H;)ʋ*|˔|J d!"5.7 Eg0ri={vUM-ݥ :gv_cĄr5-4uFxb$[ܒ\A?LQGl2d=iv'poٻǩѕ7w6qiD>YP|]>&Q*4qw mWB-PA;?k#t{h5h0phUw-uHy^/;,1 0idҌ,M6ɍOhoht#$1a-0 pF;0r]m3`fouw)^lw+{/J#E] J ˒B'Q:*(v#-3>xJ÷!a m̝`,߷A ,hrO-i~%s0ɇv9-t9(ax@!p`9 l ,n0aߌ@v;(ݎ[G%];1MοÞOʾ\O%(wƁfdlfGmrޟ~n^BL Ѿ"4 I\dLCpfbc!Ń5RlOh0P¡Ej9Nh8b#MN dBBgCbrDd9CVI;hdFo۸O@p꣞Sc>k ᳐ENCP@^ᆌE gސlB@|<:S!RԨ/Do/G [1|l hf;U:A=*$(j='os背f2N/d~~C]'^OaM)^Rq|m$ y$ rȋACrr]3CS2.TkyP~@ȏA~6dJ |:a9z[ gBƄ>c8i80 :W=79>Эvc4ۂnAPAu,lȗQ!ѿ)^E*T'* d#d@G4LX( aaV4D{%1K튢|O"Ə y%~Gnwv?DsdڐT ߳`F5}E=z&L`dcn= '\y0.+\2lZb憘gMOsN=ɪHӞK{*+y&O\0TAtLi/vNuĂ 7ucżsJ>?.\0s}Իym9,?-wnog\?]}oD|$u0R.`ḁS.͇=/4[/[$ɿ(*n)1wƎKNw=Rv<[7E)F$z".5,uL,Xo?T48˽oҐ17*fhiHRRF酒EMs-3ԧL4'L]c;ڣϳۋd)!J~r}EoY{|_y"űo2ksk._YB|Ʋ.͊c/5K9P|>wϹ%VKedZ n)J{4/#/x b}_`߻FܽR|~vLU k,WTy|zߜ_);qc2i@Vs%dM}Q ỐOsڷYVp3? c> tF}i1\Ci`mrkU{*7iw<狹_(o3~n9h2m:oHXնf>L0?I8XUA)ғ`B(@( =jjA@P((2눸zQ 3{f{vV|>_NnMF*1&8xxot~ |NΌъXQuTY٭9.}|gWF>UVJoO&51/'&Tſ NZ 4D#/C +2TVkrRtLgve뢰%1Gz ;ryr)R~1)ܿ>YƪLa&KEļus->TC"{٘p#W7 ưnA:hO6zIw VzE':J 9U*%IeQ'Nt=h/L@ TP![ ד`]tk 5]Rwҗ]&ok7BۣKq-IM79'LWBȎr0yL, M1e?0Y~rD#CdUV&z 0_@]=hxVr⸁pD0`ƿޟ:esZdjJh*dAC1b)VO(P T{kn~x{oeFgC5='ݼios~)wC,D쏹k5t$9ǐ27zO17ml36E|blՋ6<ȕ~WNP0- 7HP5 #(^C}lgIqLO΅sd?8{ &`V`ǘ9f32g̠촋#:JR%n+Wq gC5(~/r!Z Ɯ% Ygf~,"/|&x6dtmGUnߣCnO6p`sY9P@ -HUY.B )RyLR7*71[hP),SOeNwen6sew,~^p\O;Cde.|-{2!aYb3V]5+ꊟJJMWӌV}(>o;6kb6ە/a+~*p<@k:> }Kې_|4kC:(r:k!T 5C^pZ>}w <H[_Hh \~:L:IvMQ" ְD{P9Jڍrw2Iu|u &9+m8)@ g)kHE vȜ` dYTg;Av5&@ $$$6!)67,E*n8RA[EQ}k=ťӊ֭Uq3_ۙx;}srpig0 bɴA$ ZH2E1ʴ JYec'6PT9I~(“Fp [83ؘǰ' hiCzu%icj&v&ON߃Ѓ`O B Jπ_.xzǂ6p0~b8A\4uxg3O>C|x\-,@0Yï {M;H3)W;=%wÔ/x0ȃ&|<BDd,H:τ(} Xict `)$- ?&^[?i >Th\H>D,Ku YB !2m@½V"i EknٓWB_ a5W\R'H#ݘZXc!F](#,2S֛CMʆd͔dpG#vg&W߉ڏux!px.S lH`8G!ք`gr{Qv4bgمD)t01&*4 _c3fE;v7{^u~%;4 sI\I>{7s~c RV$4ePͦ24/-!E: >&ϵ|3So"j9O=w60G=/xߑI;vM +3 " D[1`@*&D3>+ߤL_$~YT|?V.z}nFs#b{=bwUywTyߥ7 Q> v&c a$7d;3,!7#ўL {g c NrPչ_Khȹ&v߅s1D <}Ip"Xˀ|ăs8Ép'4!ιtl2K %dsobɬ&?$3K/w)|*Ι=G :Pui㟈&LUw( dx CIb̀B R2 {ƛ*WI5GneЌeJѢDNgN˽^w05@rp_Rhhɠj_Ȁ꘴?lww}Kop[b RH~6[EFVQlƯuNV+.Y*Ns:v(@Vo?,r=K%};;RC ˷W$VCؓ/M7&wУ(#Qo̩G06NX'3ZȖgaks&%C>_GT䷫I+&gRVRZfQ6Qmv>-"{9צU[^RZ*^Q$ސA.o9wGxS#VD5\j}\?!m,DPSO;!oQzR[3~:7SohUڻR]\Qo+/]%n.Y'k*ڤXUMYW0Y?U)aDm{gՕAP_&(TLf ֦CnAlMU``|wBmMIs2<;?n-_[])XSY/^],+oWԖ~*鏬(9]VrUQ.rՕT iiQohjl5M]_M:4:-p|澮PѶ[ZT.kzlXпBаliTW}" aQ(B @ؑm( ""PYdY(.Pjg: eLm 8ȢTEgǙ3=a>~s>9 f?pfތ=!)B3&w7- :íT~!3߷1 ײ~\btqjZVWdx,ҬdX]~at,^}w:}.();x{Br%FeTA:']Hx uE:L8˄M|j2$Z%&EŹ;itK+L)(I:Z㟘75Qp|o~ ^BD&}8jh]π4\nAG byэWYoP|&lmM95qU;U.puVnTUy?? Ȫ=us5:r%j8Of.-lHa^ttz/Z}=b]Zfx;:ƞ͒G7(=:}B|BF:V7^:{Nx ۵W:?yO^T]ׇ^+F5);ǃѽAOﺴ4BU\ۘ{>ȔF|rT^^v=#}#mJ6'jEVH]r.;hHO2pl`)0?cWh-KjэcǚD&Zn*Q<ZG+2[2Q)'9O7^F;uߑ.> g_E̟d+?Āp{߆L3Npp~; ơwRL2,X kmb>E !T*ք!>8^LI dlT,q*+N׶>~LW4Ӡg3s'|:Dx ꩻDa5`ɿ | 9_!(_SW"y֑vuc8aڽ԰ye=c\\tm2YYpO'-Ba -|P&(Pq%HђBW=iS `0F3 1 Ә+{XY2kY|uS}.?@O߁2``Aa1 5ZJTP+Л^4#h=up,08XKt0Ļ75LU$;x #0%uj}4d/K P@領F)AWJ) (t" EƖF;R!"Jh`8 AhyǵHsq'*.Zoω7r,ɖXD8(g?E,A660G \ QJ\ Y ?ψrȝ/j:YB(>\E t1QB0MƲ!Y 2Pͺ(EQK  gijoĨ;Kx,(RfBҜ0SD% ݂5%;_t߸Jkx(i ZG>b9 z }z3u< qz:O|I~`V=.h` t "7N qQTM ֆAH$2Ī3l5c ~[>`-c5Sfe~ #Ɯ}Ƃٽ0L ƋBF cJjH}1@LIJQz#r߇zVM#ٳn'AF}xiۻnzЂL0X^W6!``U8ߐ4|3-5.!q1GQkG,7[޸VNa{rq&ՐΗB;_ y4F=֧#TX`̿6M{W"H7Bd]沼5_g.}ʎ{fk"f|*k1vWZ~޴b.#" t?>1>Kg O.Qx,ŀ^ `38xػ,|+>Iq峜DKm%8opks=}2f43J>}pIʡ^~3G 4@x{;W`2@_VBkcڝ"_!y٦9zw,;XýȒp>IdY>--\!BEݔjoBWhN(Ԏ}ɂWD+,z*2m;xBa"4hR~/C);ªțfc?]Y뫊]H[@Y1BVaߩSGB:j&Z4y/#g$H;$l61ױTW*H}$B%M\(/,  nOY xb - ;jp:DUʎ0\2ckY,ͦ&k\wUEbʊ:NFQ _r*(VP~[|(B0l5g>BU t]*щvutc%߱0Nkc,l 3R5n^Ԑb]P+uHd|&3e#30x=KvHU=ki;m_0ptn.>'n_Zm}W >H[4@oƤ`GLspf=1Ze_LRs`6`a(nQ5 S≧3JӾU_zk;qolcoLc9a91 5Rk)C:{PWX\(nvW(hdDzs۵ DQ:8[3.O08ĵ}ݶYٶG1ֻ5]ƶD\"ΡKԼ */= 0"&\Bֿl!:!#ԑufq:': ;#;?:kXݵ&$F$W1h|~z=}?o ? n3b{˜XFӛ̊VsBs>)Kk ~ׅBy yV?Kv@x D? ŸBG0qLd0%c Mc{ xgu7v+{u+}u+5=Jp_A_F9\w`l7@0JttTa4F1ned8 Y8ebIeI 52@cs'?25P@` EԔP\ 1l1 l01LF>ba c/jwJRC,Hn!? ۞ Fz0EYf&\TOal>/r* QD('UDE 尢O\\DEM‘0Qn ƹ28_BX=&P3] ^"°O,ߨ[VeJڤRUUG/Tgs⧪+⇪n}Sq[{jVwF@/eP`}\zi=u\Ԏc|p<˘VtS~U*~QV@do}v5uv^ͥQw5y2FkHWɕ(az{tGh.R0#3{g$inuD;nݽov%n=N7coK;bOIǶˮޖ]}$7,5ƣSk<:OQ0-mH8&dհd'dXdYIgs3e]~õ5NW7HL4\rA׭][ަm}^9U3~fݐ{S"6&d2:HF'6Q7t̓МЏyTbq~t[]͙i{iBέ\ΥM8t2&}w }q_GRJEϺ4tKGtfmL,+zwNq›NxLdnG*/ZN~I[rMuG5}qIK@H &8L 5! !!!!B-D~AumγMzvqwHEӒԫ|90;Fzx5OռQQBgC$kP|sKMgZ;> .=w$e@q<;eb6tU!ŕFQ=.Q#U"tGr VMN|D#2fo+) ;i Dokvpa2v\wz`Ys:P{qG2ˬ6d:jH343!ZHXi\:!$;D0ut [8?^|WA ,9ai;d8У;^rji&F7Q*Vnbh CJdCJ,K!).R.>H_RT DQ!5({AW ie$J/wwT_ZIqae-Q(w=|kXhރk}twKfWvzoUk%ƜyTe7J| EueTam5-hftd֌W RUXz͏eDL5;hϴ`!@[+{} =L۪_9w^ܧHr+pڸVwU9)ECi6P3&4l6m&lbB&fBdk*=[\?ޅ;`@Iv0ʾd Qџ\ЛvPԓ}-bnV>h0-<m[8u{\r#?Z_#3M/eȐoewbp8S-]YrNaUy,"_M|Tn'UԐZ\&MaSހׯT%=Oz{U z9gIO1!E41C׹z. 銌hԯ-iw {=k aC,CRDNئC GgsYg./1n_nߘ7wϰ_d8"i46[4X\3 嵄 37%_A_Kn^ ,Pisc ?\tN B`hDSEoOu̐&ʡ'Q <8H1&FTȅ?G|&^(=7ت.Dv6ltvS!{lOVԆ!aP~`*ZpӄqtL:R͠LCsR|I_EuqӱKO,^&?u-Ñ#w6N/►*♺2jw*vEME4ʈhn ҵПƃL##Z3p'S2'2h,ď,Q ;mu\ݾU{w+igaˣlnsۧ.eqhWD>F` }lAmstl6+Bx4sPzd\yʔŊBb5e Λ]7w+w_cmBKI"KPUvv4 t6L睦y 4,B8,pc7p5aFrD{̔=jG|Ŗ6\!uSiz)kN>*ve]]q+aMLtX*b72):F[\B:qP?Y@PU/bT5?F37Y-gUYv|cVtbYk25X2}ۗiӾ-K;4NҌA^6 ru КHW?w|98/#j8g> ̛fM -KeKr?R|Z9E5.fo/u$F!@n ulJA@5@XYE#.`ǕxZjUlF2Z;sng.8g>>&u)1$~*2~DV]Y$ILLl'bopk9@[D;W"!+H^૫QMmG3ӭ>ȵNSWV:u.NLVH:.K$Mr"91{b7P.8EC`{Jm]inTśXVʳmʲ Y咢LSAFK^z:kQ;kiZ2E]\PUnZV=CU`QJV$YNM.)g')v'(ds8]ٚ&3&I*`Fga4g˨}=@W:Eh[+WV(DVerی"ԒJiRqì5Mh'*o{DZŜb'z|K}jpvAH{WALl:O^UniCan4:vfGɖiY6I55تzv++ETuQOL9DU0DR/i?WS (l BԶ۠rW~>oJn 㬖u1D mRUjNaug}Pw5n|5s U3b7%zCt}v=7[*J5PjfqoEz S:BL6ψiO3ڐk6V*Y%]ֺ)s`7΁-Zòf&^l'~L !߽PvK'^e.=ӑ#Af'OЏl=R-4+Y֕mYdbkufM_Osak%[F~mf6zP(hU((H"y5E/_fm7A|oi=3zj,}{=e{g7>=f>yz LwoTy#@D rH!O.tȇe|5r B<x GhfL{'0yZLA8 c< 0~2$o򏁜a?O@ ([@z0F=7 30z ׋z9cQ- 7ö́1j5򄌑+)?W $ïK(ۍ(0` 2=1 |f Lmo08qLJ8 ƍcGg 0H YG6.Yc \#'+q/?dyTSWK¾!/@ Z*,ʾHHXHԸТH݊8mک^ENw~NrOqw¢)^/  (sHlCbh&M+_<8 xKKO>Nctf' HbGZdAC6=|Gwѽ8}|K ߑgcr?F>c!SMA\=iOcOg#SbH5|'.5ԘhZz%BSE]3QDtNSEWG-M1fO u?Ax}aM>nۓO_)S 'zRC*}I d+d[}̛~?$'7$XW<.z60s;pv*f} τp-#k ,IK`btV`Y.u˻w52U&߽6]n|ѳMF<My~ozIfC޿Ʀ76# uAmaG-Ƽ\%9Zy%FjM0=favo}OOՀ)c>׬>~?l\Ȃ aha߿~}'l_o0'([wb+`50@hlFcYqeF9 3Йۨ(֑p< u}ֽK{BVq nn +ogY^G-=w[k [?0^c_t-ě:aqFbe=-V؝՜vkNo o ;(61'ǖg;͑ض9 |/=7SЅt>LCO!l/5ѓc;)մ31bGں=[n[cm\L_&X'\=* 1X쁭! Bwa0$Ѱѡ 1&T,ҨCh-Mfٚޔ$7'V94%6ҫVovZC,nKCQQ}܈.K]¸c]"0Iiq' AR :Jm(sEM^ğPи(Ƭ Ų\+gjm܂RZW#P BUQVW-Su=#*x!Tc' jLޤQ8' •\CT" RFM.P1ha, 1(6-+Id,[MQPSV ;ej׻ȵe=nRq4ew8],X\iP%28Z2 XNvQSK髂X& Z:\Q-Qg9(J+FuiWIcn(YS üIwypB{a4ܷ 7XFU7(oE42 ÍbrkS,klEV^UM*U.$W4 *\ݢXq04k 3!A4(ADqpU֩Z X+ 8"8KlUk+.D:Zu}_Z?y}r?hL1+'Ǫ$;LZ_3~Pec^:A?iÖ8g~&h;+Wƒ&^I>7AR9{u{d*`}¬4=f15x/j\jѫ;|v G X{EwϔLmn5l%$ ݓWoy?8lJeҁ529ega:__qڋQq=C89NwnXۚ]2xuj8QgCls4و<+al܃?/ b, q=0DGcr504/"~}Ts{re.r,EvܜGD7H}zQI;q-ri9Ѩ }>mmV ⭱5^tWtSYNq̟Xbߢm_6*m管;k莿+gs' v}8 .B- 8Dz 6PF mmmmdۤ}hͮnyc!xP:շn+9 d ;H΢l@@ѺEA0[TV%=вdKƠE4++JDuIU>%Kſ+ T Oﳿ&3{_3[_ wE .R.uCKɗ"ۡrAWY E ] ombj/e?fSXhf? rh^U?mwfpػ>pbP٭P؋!vI/3xG@S` j'hjXU5@¨#񥤆5kxk ^]zB/Hf,d~Љٖ@ˀO&|P:t^;5o @] a\:$dwXNR]% RJ:RpUu~ߜ%Hx]/dϦ{̽j  ~O9^D.Ue纍.O<Otc BTPwk`w%襸MtlVGKf#d<3#Kwa5,Ն!]jr}va2v7Ἰ}[S-.R\ @!nӀ\!Cu~a/ZlEY`<7"{n\$n q͸Ah?J ŀ2EyuŹf)4S6b*B:Ul| 2ۚ0#Zŭ i4UT$wT9Si̴MuڴWUb*PԅJc~ 2W :b\Qq}nE%󖱢2YQjPYl:e^Ɯ>iNs8ar8.hvO820|aj|tmGF8BF"xY;ը&(n1PO|3Bq"zQt8/ǃKGhE2 jĪ}Eb'{c\jl!B!$K@$6Ibر@ 8X$vl'Y&vL=i&I:Mm433{y9^+b?uUL$L(8/~?b.JϤTJ> FI l |,Ki #ޖ_LAYB e"dDG_ŞvQe sIZOKB/yȝK3kFJ0}n3уL̽{T rr\9fW 9eAEEr5 z!֜l=+;ŝ\2S cr0GY)kXP!JEBlkdJ'+RRD.0ԓy 5LG aŸ!5Gh@h@DЯ$a!0\̜/񨻍(#AḦ́˚Ͱy 4iӥr)uQL6WlzUDQs=\,+ {xw/\: >ulG<>G~=<𞍄r98 z1iVIEזƌ3SZPJ\ܞx"Y|RԡZoS'&>Ij){|K !hQ< 0*A-3^d hE0cJ!MaCqG_NU{ʭ.m#۩mv4BfFԤYJh,]KNi~ɦ[ڴ߮%'7؇1wޭF0w]żcX[kN&U&VfG TF4nQZjFn5r]FЮk/'Yt6~5F_EO,g50_.|\}DW1y+Zu/iВFEtUG9*=QYhc5T4sm&Z@bbR&# ӏJ!@xU&K>zpu6͘79o=Flc 61]ASF4[˩ ʪnX;恸Jqʟp|&]ՇȗIz"CG/_p3u8mx 8لǚyRHG"^mQlFY]gTֵL}qq:46ZGHX#*qe_k%xa>}g6ּ::1wvw ҠMζm֖Ljn=LnhG; -Zeijg[nAYè>_b9Qe5^Rs|^b;Gxa}x&ּ+?1s [ܮhhw~{I6W*֕IvFVvǘ:˩ zy{-ns[ [gDdZ$E,,siJg|XHCBr<(ds r뀯hf'07!_R:WƊ2B_}(VM* 6U M Me0?;ϋgnse@@Ӏs%`-TMP^q7W;AT(ĉff>XxkU@c^_ c?\p/0Qz:Ue@+ n:ԤnZpC͐7݀3!/o)ca؉?DZڏCKswُM>0U﵀&Ѓ)yocܤQ}E.>o9G윸x~Q`:ϞWXx}ͼ{~⦆5i`M󞬉"CFQl`.~ <_ @]Q }Fi ͦIٴ66*TL';1E;w<;A&W E8>UQ1=H?y,NxdJ<2uQ-R.iOeEBvWjz/+/ x=K{+~rK NX2Z*L-!Kel%]ϒ%#/X |* })v\UlSl}Mbc#?4esZ 4tU\q/Q]}IEcdOΔﰦ)[+ZW(7[sUͪ #s5oPtU]*60>kt&T Q?wQ=F*Nm %4N)h"/_WfWdkr6hvج o"nYo̠6ABmАc̿B$Q~<)p0EaWHiCxڰܰъ_({NV ^ ]dLk$d>=H(aAha^S}ZO#=vn4ݛjfWpj/s'Ϡ?FJ׀7GbCdr#H91Pf蛤^'Ygi3lz2 h8;8R}J_#6{܎~f췏l:lvژȉ醕1aRVtYFtbaʅ&-jiّ" )+G7Niq4%CrcG ;ғ=FYcP'pFnXoEF|O v"-6Q͠hfLΈIM=ߐe41zWCR[c@a [5{砚}>)8 |`BV `)-,5!Z>ʔULM7]?1nݗbWq\>r{c ;ғm|/#Y.h=?goÌX<5/e GAkТ!#@ Az@TBt]OZa]-3umn~L _|?~i扫t$))2k89ǹ0ՒJT2k7gk[=LڃYSL^&3iH$%QS{ Krٻ>5`:d1UKkR$iAzc~97⚣[XVu'4i^ԛ4#uNpK J?sYIjeC?14LӱظP\!?kԜsr2\ VAZwmꔌ5I^Z Iz-Y/(bkی8(bq1;¬Ay¤c> xc&;b|G:1SYQ1#:As9|ҩw X=|}鄓2v q~ x́GO4=ˠ5½ PBEE(z<(O=޷z]ɸ-w "N! t;< Ji7N}7PHI2$9CԿp;7qBƝIS0"@!tIeKo4pe" WX0/#tpL.#?o05w1cbzx;~~ 3 'MJpT,=/^`Q|9Y0y\t$o>r|O~|F!Dϵg/PdcE]cAnArKĂܑlX Y,?`/G|b‡hEE>{F)[6SDϣ̘.c x6o>&w -C}1<%ă=&YEyCp m49q42,&$ Ud=LZțNr qO?/ z%qx:)$D-"d% d+APg?u1q xk%w~AE?4tN"|G҉Xy8&>y;uvQ ?uR8ۃo>?pnA+r7Fx@qnT\9C41$[1jlf4h:Ӆ/u<;HT}Pem:X5$p 1$$"B"QmCToB ~ZC j]FҊ6\lU~\_qQBYOU"1J F* !zR}/&4w|kuWa\QƗ#.hVs|يs=1|Nw'#k"uqb  $?-2zp۸%Wb7;>ŹU8ӽz4Þ8ٳ'z^m8k:CO`kO]"_ǘ٧1-O$.E&꟏Q8ÑEOg`f_BfOr2lav lpxixm71Fd7w_AB> ' ]8\Q|L|4h9'6{6`ٮf:S-ڙLv.Yݤ]nnbkwrܺ!g5CV_>T-ÈG<&w銿6ZY=[|0,Ga_pҍ6 [tyجs0t%zmu:vMl*[/m[bJ,ѝ.ݒ6x,m!J? O?$[FM|@380J]b^q!ވ,fM\2]WʶUqKiB}YHҤ_%o5OW̸񢔐O%RkL!jy{Io$('ClH&$%IfQmNpM$2BZ P )Ҟs=n#ڌ2tŪh1hNMaf3sRNaC1,36 K5e0j*` G11E٫`Sg~+Ofz^b)K29sG1sӐc 7_k*ԘҐi:A/OL_LoWUPQ*L,Ch>rp:>iBzeE6l r1M4侍>'d[PJYҪ2 ܤW(6uy8ƓuE^W(6ҜN`g!XK- 5?OY=1#?ov` UyvΟ-R%(ZBe“LUQݭqZ>8,;9,?y™'ʝQxɷTd8GڳX@~*P`ڢQ3a6=$fb+ rٲWZPėX}5 + .ka][׫m]NVM_jUTXE gܤ:![G-^]4:u&rDiי; ^Q%k}j_ooUwj,\ub3^wY Gr`C3}Qye1LȸfnowKlE~F/zGn)\)\*ܮ6,x2Js KtNRS*4~$'j+텒x|Q䋃7q2 t7畖Kr!Yw]Q{;TiޣTďQV"_ <3:S P4vNO~%npUFQ9FXҘlRir* J$?IRF*ErVe*IXPT!*E9!{:;)`Tҝui />aB0H1șldBLf(5\ZO N$I2Cp0]<^PU T$ QSo&7h"i4L#UOs: {\?a0G!=p:c 066)a ~nL>\yTƟ3, ʦ0 '-Dk$F5O465"eE 8Hpj%&*.TӨ(1> &y{E 9^٬IθI&9]hBm^]u KY+ǢVwdX'!-'Y00g#YT:Gaf)r /lV&TƜҘXe\*T%R=PC_7f1&yeVr dia=H>}BR8Ο,$}oɽX{c?&ؾc~RĬvywR@Դ`5GQk׋WI%0PCi4K+MA/@t Cc4b嘆HG;rX/usRغv)XHk}/q ;z8x@Mi3_pz"©G3*ViDhe B*"r8*Ǣk$T͆U[U}VRS0\$1θلyY&7Vlc<.=c6$z =08WO] Թԩy$&ߓBwp_F;~v[.vB-ӎxJd"%"SB ԩN 5j{q|˿C?N?D_/b"Od fRg>u p6Q)\s;SU[whWp}+\D ZBӅ9 H^!M?Ө3m&SǎXC56sjnݸX|8%:Uj- @oX ^zXHo2L77Z3X Ȧ 󸮥F5*phf,Nc'Y@*o1zuAS;hvcGbl ^;CQ T6`sQl n?Jp!! "',Y<8}hHBmcj"G:rĦ lZDB4zT픊51n(T{GUHOic{WT^o}kd4hg7Pih2X8 PbxņiuBT#'Ib9/a2a"axFq-ENcEv:Y=k=ן@|U߶^pĦXcBIXcզQ74QZek!0}$-3-rPe*S,1mU,65*N*$Pf)盅"JCơqs5>}{`%v,iȵ2j/e[&IK-Ŗ兖 y%[a)-%yjťeyޙ{D K] qDpFf`fD 5.Kq-5zXTkĜ4mz5m<96ij4Iۓd1w= |zemA6G#ulI1kLslJFɄU&3-X,VUZMI[a(wcm<+1Vl y+6"SH"?7wg:xuH?6#<MXmE%4X2EZ S,7{2 ۼZ[b~^*6o]BeKa?LK^Ze}%s4kahEI٦*t۲mPj+KlbͫqֵRul:lsm/ԬkCzu]˸9Dq-빮l-#QW eʔ$#JLHY"8Xr]+~)W$/U~Q)ʅpEy'<[!܃Yż1t7|ۊQBRu&T@j:\L5IRԀXݭRYVxO^YՐLܢߗuJ@o/K} J#Pdc:9pHG#KPX&.q5َ,Gjo2;uq.,q3l>P/^0GO4l^\NGV G3 w><\$丌X]9bCJLWcqҦ6H&gltҥ^եOuo4gH꣰+y|'{X[rzTB^i$1qO➉ŞdyRaX,|!S$.TFO&ͽNkpoRrFIII>KB^ޠgS@-H zdW BVHX+' ; <)XTeʆUVU(ebNL,n{OKqޫ)ڸʐ6'.S8\>84ʕ] \n ~OFo }HYSs >Ź͚پSX[hbBڟ8tf`5 |?` 4HnX< S1?$0o.f0fi8Ycc 1Qu@fύC PD3I&s[1efƌhLoiqڪ3fL ((@Lс<؈ =x*)`|W ~KwQ{s+=o^[6 Q1LLjۢ0m,&MSX<`*30`1FkZن;aX"FԎG=a֐Qe۩BFT'%`^ v>ۣ0} ڣ1}t'i;w,ǠF ؂ h?[?CAzdݛX'$b_f1G Dqrº+RW,] Lz?]  |d8paD8vs 0CK77[7E. ̹3_oI}^3vi=EWGA a:-Dr:0 3G_l]BG>Z{#=`7ԧ__ DQԾI@!j{r aCя =aOpaȞߓ{G{]E Ybj٬5{#|Dc1=GO>g`|C x/y=dO4 rjbE 20*;o!"\>'ug_KH2kDT} ** EZnnhYDQA@B"2bM01rRV&NRV8ff\*5qܢo~T{=缤O~ld!Hu'3enDٍ^ӉYDdd"d3AvtS"oq?xW?" ~ 1 1tKlF3`'5ڨqssg#>mj O9z<&ȿ?eg7N&qdOT@EꬤF5j8s#5P{8g;V!}i_2:2G;C5ķQĝL%_AԌ3sӨCBjF%5jH-_'QB//} Moq~$7 /DÁc 9}r]*|=c\| urQDUԨF-5>V9wd4o鋫˴wi0Z"6;ٙ0eG'\;kBq5JN&gͣp y]U Dh9YВSG|kwqlCyeÆo$O^17x Ұ,\p9bu,ǙU85|z6S 9G#qGF^Qߠ1] sh!ȓx吻|!+ȍpy~.)DpM1lt-C[ :jtmD6toO$xm}qoc<6WL7OfRߛ70L.Ot%wW􎝆|=^ }`M.Ůk:-ScJ O9Sylv M=D+4xB y4O3 : ]&s6L*gsf2ϴaR4{bW*UY[Q?kP7S+}]s_\uS^})ZO.;v{{bs%}4h1' >VlDoj|P[*BoηUX3P>G\=X6rޏb|Y,yP<\{-]~tS\ `*aRJ=ʔXLAҎ"eBY$,W ˔br+-]--YtI#e?!,CG߈.10vƲ1-Zָ. Uc6C}PUT:(PLy!E_H^X 1cx@k[Hb[fB+:q#1&.헥{Rh2q<3I+s#kvxa>Y=DlvBP&-~,"d%ĞXVjI 5bԴc1ZiCvZ3\o1\r{y{lb>Kz 4&Vq.]#4"!RhX0&>'dӀ~M}̽5G%]3G%>4G%VhdeT>` 38E<gTJ&;iHbR48%LSh@jT6Q}Ҧ+:mҲ+3m),)tUShShdArCc#˰ Jsz2gکOzguStV_ٱ ώS ˙МSPE9kS+c͹,2L/RXݲ|އB}0 f8*]A , V@a Zƨe|,3mIU7"ue<-\GacFgWA+%r:!-;klql}Q3dcMW2UP #[yL@^RE7_W?7Hq؃R)`+5okTg/S |!adg,@PՑXuw\ xº2s/)kS ܍>iޖloaHa1~R=Ci}_CP o,^Ç<OXI-A GhFoz<^ÒsdwT2GvNI8Eag0?:Ǚg hrM@-H| -/:'֣?<ŕldllj֟%hMFg&9GEq\#dG(+t|+e`؛=vEHrsh@:st4CjQNFi-9c֋]DNg:ЙCGaoA:N:K(gJm5b>i-mP՝ U|ǴUl';cWC(NzM=~WO2|u{7W ?w1ԄZY?T}40VEq*  zM f*7h+;8WYEYy!GsC+-)%)a_ڸŵ7+x(0fl#Yik͊P- %,@=# ^+eOiJWZxR#2Q>_ h- ZE%Hy!@$ $BТmN!Zҭ͵{3nu;֞vNZ!~>Ͻ`͊O= S&',V iw$uLs0^5K>[R)G{Z 6g-=Xaڌ pŸQ ?|mX o^:"YDX\f!U<ຒX`d?|lΞH)EkӰ:;9:rLh)GCN9u]Q-\ʰQjIY̡TP/*IT80Tf?گ>8b팣E5yhV-O j Q`e<y [v&*w _4#2]Y&H4cO79rZM;렂Ʊ _39j&c6.N:tpQæ_/'EYQZ' ̆wd%["G+ ?Xu ;i& }60(Ӱ9lT4 a+,ƕ(5`1h(.z^ɊLC2iTVh#HEc[LyB~'Z$[s8ܦIpf bLa5eXX0QRBq*[`4(0zOd:yc/"ɴfIJG=L+s3Y&Pa0JR si:K0PTf̊ʽЗ?]yX}"z\loTBe(me-rA/{"z`-]c,Mb{,KQhO|+UA[YJ*WC][:l1pYUD+~g9 ۀ}M.G}\fN*KqC0TGB_]"hj!&y5*P9P:+ZlW3 tu WH=*gDjUO!wIBFs/QwZǀ'Ɇ5y0(Ȑ_{8CAGL V;V߈Vx2oR/#{Z$y HDGqKU(=C$ s[*e^ Oo*2}QHGZ"țRڔM*,o6`YUHj"ѿK['?m$4CB$!s;ڹ'Zg[#cR3 Hi@R$bi,i]G[Xܪ ;u Fl 11man% ¼"EB̺1q}~ux@s `3]9 ;v#%L-[Jpmcr60%&^JI$"|HL8x˥^ȩI @@ \*""^b2T@W=j>gmt]36v[NvݦsT|?D~;K NH#H3i#ϑm%1|I1G,Cy|G3y~g_2)ѐ,O"ƯgFCldbOajWL#>[_0o69aOƒ #5 &$dP/:jTι_72~w1N.~vp:kߤ0ڍ>$%qαRgrragaoj^ԓ24jZ}\ q>)tvpgp//^_ğYopjG708=]O͙xԓ3I<87+]Jjbf@FRcn)C\vV{k4Wy? C~9wyD)B8%3/ DQU^jM]c:ut='ye&I-`SGch"x^Qy1H}^Y:9?"56qj66LubTZGKB<kW)hVub]X1eG;Kf ?6I:E1g ~s7ڧmFeV 5f4`Up>V.X6!QҌ%!X50<_EugxG|Lw d*g> Iǚl)X>#"BTGP\,SEsajTϭCFTmCyTG@Y̋ Qo O}؂ձ!|u iKd煕Q~X=u1cQl2jPkDe qN̏,Q⟠Hn (D •>.SL >{Hh%kS'F$ $Ơ\*C4 z$d(OB܉(L\|2dp:F87`O9Ia0x'29gIigk譞>'B>e`H![BIFlp&9H*F^r%K))w"KyUȢ(S`n:ظv``볎>VG-}+Ǣ$t(#R#O J٪\Rݰ#+F¤QsDyUd _Ads6x:ْ>(}T"O :X5)hĄLm6KaLAn6tۑ? HcNAF?V'.w/Zd=F.V}0,9ԋa+`ԧ!Ð }Bk\q=LH5|Q4@A4 " F'Aj?xK1#MQ2gLdL3a Yt ZL ԙyH!RU2d"9k^>d{|~y0Bc{?wp$(^ J5ři h!Pۢf"Ֆ UlRHqCSyRHoԾsGBl$va3#{/u+9Tq/𹼜<\z1:EPyCYH΋D# rGd $:m:!qAEk-b]g|A#% 9i?wQ{">9*VK!G%=B$A ;y @TQ `NQ#"7#xŠO!m9B!H@+9Κ~/;9_ 4s]QQXWeueߑE=-fQ(̸ `T 0q8QU bզAlVMM`L6{bCRc4how{ xmcb-fJM`PW`ŘՔhSE(4\ldZR[_yE`oجloCkiYΧ6B}3UXO|)uF(6VvЫ dά<Ȇ3D$ͭlJabWS2mzAWڄf_0'xni]' )vba'luPC!d|R[Yp156v)40wIwvjQ:jXG .@Z.Z}-Kbna14,ttN_tb\KK34@ o/uahj!j6pENc$\bq'-%r?= kgY,zA&Z@q.IX4iÁ=9]lix3o'3#MF{- ~FK.wuNĐv>Q@$M1p2 u1(}\4׸7qț|m‘3}ldIƿ>_{[4Ү)yWP(]%| [6]?>FC#c61qF./l~ `0)`(bJzآ~d|isY;}/\pedZ AwH0Ŵ}k1˰_}- :55u]|gu N|OCx̹7T} c ضa{.0.S0I v͏C8 Zנ"ZIJa/`߈"ih~1/Ƕ \M?Ч<~b*-a8k7刦NƠABc")}gcfcߪ^N*ȎSD2P-T+nKK_ϡ1L4ʓIg#?EhXrc;YvO^Ö}51%;JUhi#:cFg1v՜\; keҧ.]:6k 8qW:Dy{+ePvw9] ƧimZqGiV9hsV8s\ eJ]*TNuA2_T=z6k\FXᷔaw͆SUnZ=̣U9R%3EiI *4,\JhX|~C9>5fSvVfspN_FъpuQ7N :sh@ h;3bʹvK| ]9ʎ UVd21fF ֌=Vi)=MSf)kRb5)\c7+9Zh|qݚy};`sآ#;EXojz\kj|MV*%~&unS5Qr5.at_7W=hTbF&6jdѳm/uT@T@S2 0 ]`H䲨1 `y ^K$Zf*hY)=Zֶɶv:k%ִܓ?>y}}˚ƎL}%q4bb\9\0 -_EUG$+7ª\eGڔYQ5ʌ5EJTjl,5?NܛEra #NJ + q-z )?zrX͎1*#&U,*-ήԸjYR)JNإ2%Șx~)S'FNm[q88GE9^2LTaJ3D)Ր KB JI,Pr\%ͪiV'4˸Q2ː.;?^b911AaaV٦0QG%#dɔ$cRf%*1D ɏȐRfřE[*| w)<@75؇~gא2jSHdd8̓d4*yS~NC@SKoޖt/*zXlȤ,bI&XP,cR4QE *(M+NTV) M-Ճ%4CJɧ䔼K>yC6&35‹JzYQ΅Zz-X҉oya+>J+)5I0=hD{&3SV$_VqOjlyʳ<˳:8e ,\~Zʹ4\SHl2y1!P&JOոJ? HyU%ʳ*UcQe{"n[FVKիUF.wZVmhȠF΅ǩzr@LI1Z(7T:B(GFe遺 : ;лX_mQg?ߎI~%g#=Rb|J cʥUÛйM\\k1>$mIgiໝSQ;vMG'$]0P`C@uQN w+ }|7[ًO FwJ]#y‘PRa#> eԥ8 t4v71qzjiW|?-/҃ ܏WO1xNA^SIAN$'gR,Yhmy׵u/`ͅ35b%Ұ>Z ҅\Opn!p8>c"5ec,ýKKf+ų`ߐoO!|z-Kp\uCѫ 7RnWosܦHv;; PeP hfh(MEyEևb7:󺮢gKp>5HCax$q`\,?Yu !yaMZ`{!`{9)E h̏Qh;:.iofp^'Ѻ7/}J3G~1`9U~ YKm@k6Ӣ?ڵzGOѺѩlS$8AQn<r_ w_pYX;|r"𓈏4-"el ֱc X:V;؎t^*ׅ5h 9$ V,a߆};plՐZ| -]ɳ|kyF;lݘ؀m@an_L b -M&kk^5SWUv6ҤjTiViӤݴnUNC}>}}.Wy%z"Y/_{Ob> ۻ3>wiJ>EOOUE79𓣛}!\+q~F6e;K 0"WҽMyޑ`HRsxx/Yڱ8]c~9Xze TtOҢQB|c29wxz8-RLSγhqyi'Ooi=lff1s c`4!F?јop4Vc:Wy,=|`oŔ>1 D`1*u`6ƎjLza"ΏnhF0pC LÒ{_CI"%M{MlbdK II%LTc,QcI%:0,APڀ!i H;0 EldcdsI^EwUtmDG{+3wLYfV 37C;1"##) /ՆCГք6tw`z?:GϘ2іyYwz ^ω?9B x6`uKlfiq'L) (R‚@v9NgѦUGޜ!4LE4?-xo s@Ïy uQD\, Nݿ{xmtMc[:oCxhdj2q@FV Z' ܨ-ZKg1TΡRav+(7~@N<_&-7p%~X Rud h,LGz}jTpp2Ԣ؄ c;E즣(3@y6uX-/>K%"Y=r`wps:T:&9&*Mp a7Qn.CŅRKlm$iXga]GQ"}opKcm*q-$ RG7u2VP֊&E&.wm  li&IX9㡭BS5uv۠T!ӆ^(Fp Ho"!R䳈=%.p$[;xuwIE덂99r(ݬ«CׂL:|Hu!7 yI$lBr ҖHlI-_Y̷۴?77s, ijڥZ Qn Y8H!ůܟd2pAф;! !3 OqF_|g|AfY㼓#VA}FK=J} io{eD$ B D !L`0!J{e7#bɽ6ɼ0Xa,L|qzJ] PSSm$;8D'!b8 -,FI> d0 1y7ȹf{5"Iq[\9 N98|_%~ / .) ._\Z!,8 ]u'0B(5wN FO3朜>dPg\Ҥ}jCtrt\\ȯkK8D??8{=<<wrx\O &5y vh}q- t=! P Fj0ؔf/TdV [=v]Ku_}K7펝ץc+ XASZQvg+tB-l7?ckncgX>Ntho+|+{n* ^k踂?t\B{lum29wtt"w71pyG\Vx塿ۏa ]x: k %^i optDoq>!;p(cv;i w|-88,~>^rlWaد@Z=ZAXf8Z_m&:-D`kwp~ >szK?"'f)X~vcN^F[4Eт&tl2!'*,42"^q6Q{rר_\1a#bP Gcᨆc2pӜ.E(>;Fvf|¤n 3a#<H#8 -F"t)rkKwմZ)eZTmjKU}*{lVEσF]W=x2undy>уnOun5W&h{j3T힫qCU1Bc=U9^= y.RJxh~Km**qtS>TgYB*ݨ|V {Sy+0w^s6|;:rT ?Oj_J#5ߤb*ꛪa}sTw+?\Co50hv++2*3䞲B#u jv}L$7TA* 2 (F588CB)7P9!_) t21RJq%ڕP xwۜC^_IqD7g C"De(#<[JԈ DNRRl٣Zw}L֘Kp(щCp`<9k6d>FBr<̨~J2(-*F)QJ+):C ׀r%j"ǭٴ]&gzWq2}61dZʧyo":*1CБTCd3F*'k\T%b.TLje΁kJJ%QC|`jK0~a||}XzfXd/,`0oJfJj_5 TE WQ%+@3T.¤Vބ;@_Kڕ|VKH F7D`aLr_hvȣ<ȣ<iFF6wh es-**12eXI3b3Ism2Q"@zcn^NVN$)I&O/\T ypײ ~ h x Nw 8 ^o7h:9ϚQL3xm\|pZ+>V4X9np 9 %pb]79E|Fk.=tqߣp_ ~ @z! 8d %8b&qO, 7G;[s}F7}#8>oDX׏xobE.!}F'W\G8?#} y 7{//x8xB/?xxd!]ʥ?8 Jqq`2ϓ9cʚv鷈uXi<^^G~_['228}@-1/i z]@"b#v91::f)d̲%8 )=`A}`7x#vL*%x[fEA>Nlb=Ӊe2į~xVav];aA-63ڧamFnf:iyZG1cW6!~>gbE,C %F3QVXn8ױwl=>t 3mIB6wh=X)p1b8{V e5YЕ(އq#%Y/>`ݍ.F($ p< G 68jȣZӴ<G UJ\ #J7á{6h^b{?v[!{8v !J$D @2-Dʂ xPW`k,@9GY?[ԟ0G^m8rК.5~a_\0A O:YT W*N.gd m$VM{Mn+rޓ+}GXo|/DA]U9fy;kfTW5-hr,lSNCݚ;d\%X mh#aǕ~Iww[~8:ZڲE7*HFyb=41\ T3f(8NYɲGNWfd2"+Y&YMj:.,/>R+цhkknтҖQ|k9T(ƛm,S/My2̣d3[n\F)%fĬШW#^wh 8ӂ%mhY y>̠NSikTF.+_l# 0 3ΰl (0.D4Dwq;hc9&٬i&VLlkXSi&=iZcܲUt=}kPqQE! 0ԩ,+7lFSNx1WUJ3nUK)rF7r+%.^nrn-d߂Y?=N#_<&0ҧzs+&OQA1#RVg&),3]Y *հI2dPp<(0C9?(8/<39AM֪lTi&Sy?;pMgq$*rkPHnȐP`~˿̖qHA>+#C *B ܼg9G0s%\*(EYX'btTP%b_qq-OI,WWҍ1 %gحNՠ:iV4x i|U<}/!㤀A+ Р2|ˌ)h`yr\rYX 0嘵rCƠSW.jB豉4/Ɩd%ӛ BM 0wE=\.BD."c'1!Mdb61;-s8KpG`O+yɇK*a@ȡ3$x \ \5\t5\@5д!`u+-M_M;"88Lum6{&P\ U jbibh[6ҋP@/DG=lyC2D-\X:` XX G} 35ã9p5XᲈXĢ.$ml||<[\ nm 5ʡ]ֱ@!H]/Y@ & VxҏVx£%RZq.|j&UL+q4+ZOX9HfF$|6K[w+(݋ < d۹xvzю(8r965]@:r;zgAK2>Ab{婋t} A===uh $߽V3u"o%9KɓFbvI9V#= u̐ǜc@E?eb(Ea.^zCU>_Z>QA\%!Կ_p55AGy1~ [/ g?>q&8Ǣ%Yzq]9@"g 57<Ǽ=f/΀w9Q|P5Xr*.S 8yP  q-M\׸p@E~_).: x~B>G"QUmpA0ҷx̯5c=U K+<.$;?1?R>@k?eέx ^?ni 53|5ezqA#_L ^.{8 3w𗿂8#=C=:n$2y?t,Y?8VrEr?أ8G:rXD^]M2m~A馲.= ݠ&救GZq+YȑLLV8DDRKX%_"6cvv'iP6Դl_+u:~G-rE.9ϢB1į DWc Ğ2 YNy: ߰Z_j%yWx=19v-{E'{Cf$Ilq1 BjrԑdkL76`0`n&&`CbH'@B(HB[Fi.K@%Ye (mfi6AZN]5mӺ}m6MӦM۪}ؤjڥ4G.S =z?y99『w f 8$7el{W('ߡܿ$xqÖ8 1Ua#f<ߦg3q;cX5#Df= MSw)h5졅p$v1iL.x 8K)gYBDim` $]v>NK<n'2LY%u )tY='e*\v/q~J M5+ɢmIښQ{rڒ˵9%M)aES՜USj61m"Z~D XR(j ?R/1~ b:m:r"8+GS IږVQQU6`(VBZ7֫޸Qu6Mݪ5Ri3)yNU VUX>T3SKH'bCطEȓ&K"L3TgU\Z_5ZjUm(hک_Qgͪ,mUb{Sg;>S#{Lo&Yg{(C$;I!Qk,ekͭ*[*m媰W^2GJ[SI39OQsWޜw6 %33IcuKZ~vlF9{IW3SNʜ.*8'"WH>涩 Gyv?ʬQ5` Q)-[J&RVj0vƟ^Dw;X҃][K> 'dMSfI,kr@ ʨVz(PRB=J )1N0uR;HfbM ~f/w_ዾKax e"'q!a$|:xĞqbMG#a{i{sp mx AY2`͐ѐb: }0q8k]A(nbL4n"LvLavL"&i0bK4A<&?åC){1ǎJw ցJ9>c;cܘɋ9.?7FҳB_Hx| :;_ U:G;0\|Hv,bb,R(2 $y{8G^~;?oسEi㗩WH*_%p p Ǎ' 67%X,e 2X&8ҫ>_{Ŵna"r܄*_a |n]M>gVcB~PW Iʊt9c/ggTW6\ۏ_ݛ¸oo=^I/G!R6\{tƟ6%inmzK4IIKKEZ.E\1AAȠ ás)`e2q2&sӝYiOs~/<Yz,GG>ۇ;h {mf5*c?,ks51#ꋚ b԰>_8?@}^Gnx7u6v̀/b@2(CAw6ڦq-gҿu7g8?R<7{{BGeER?.jK?wvT=:uч踂89,C%tz gz@{཮kz _>/߈M_p귪һܷtɜGG8qyqa6WqR6K'Hz0v]_p|ܟ>ݛ,::)tGsc88#8Zܬ}d/ _R@m!B#_y \b3e'"֯MzGek=:Bt5JR=pt±nѽ(\Sݰt*O.r?b̘C"f'Q~mmIG<4vPAo ɠy#ynsmEo  8,OUB$P]*,Od_ 2\G{?vX-s^tSsd+\x )c:h_P ~/k$?fOyF>OqmrѺ!.sSc>;\䱧"p᪇pMdptvZf^w@dG\ȝ -a4uAL&cjHָA9ʂ͞*P}LHuª4Z59_'`K0\RE-U$Fp+mw_ղqlI&&cqjHNQ8:CjU`b+4$JUI $5ȗ4VH%oUqOxBwU`BSDEOƮGm%#P1i(bPɨ!Ft94y4T*Rjܤbs *HW5r[)\ʱ\zD $#F#ϯw泥8!7#kȍߚ YJ-*RBK UX):Jn[rm3/T}RcxGi3-»[1nŌsJnFS'R*U`cO۞<{r%r9|I );AY㕙>MNgҝ+*{^2^5MlkH=Sl-~@ Fy24+iSө̌\P 93*=+4L={l]< K7#L_O̔zvx75RxeXՅ|vꤖz P#6(e3Ǣ49\#L*Yek.{LddHO*sLIs#>|o #c`;3 mcHrSCn|Ĥ* Y|vY ke,K)EmJ.+x U\Qy|;rȻ chiCG3#t27^RL%VJe,u) % VRYH 2*ۡXxK^n"/˴2K-pg]9]m jF_-CF2֓b$&@>*-JLx_b}^ SH~gCcc ~cUEp>4q*=NsaXFh11+)`bA MhPi`0MA C?Vj)x6{LzӐأVBV7q7 $K%l\xa0t\x ǸcBHuhcC걓zCON0yy@0"dF\1RkRivHMdM4pġӄ&45GoLLk.Khhh k\ni)![ 9<h#;?;: 6+Xy#tp 30hs1 ; 9tG7&4nrхU]Gy,AUEpܳ:^J<a<2h6ƺ gGI'M/uE賏FG.Y'ṿ; 1pa0p{Lߐ {%W@Ca!WқO c *r1@_RqpfLtLRl`ut^o$6hVӐq -8.sfp>rFqخR+_W.0Y āt0Rοgjs;pH}A#GGs"^@ aG>|Tp!X4T |pƲ~kg88K8G<N]zS'u/ >z:=E;N*ңn<7U#` :._ORܠԍp/h=k!G!^7YJgz\hDt*bn 6^ 489x,؋h2GM>:p6Nv4#ԥY EfUR0we mXu8# teDt2!Ue/Z"\B.j(fmV]O{ jȭ7\~t \χc9)2xYŮC-Z@泳R\ ,F}9(48ĵ5xW:EiU5YJϨ.&j$ n1 BxS(fYjC(i>'{ogG;k}+l$n9C5rxxK;\p%'/\p k4\5hr#{#PN. idgqedY1@3zMaL$?r2C&X5>ȡ1A.%jTPFgiD a!w+'tCV:7)5C)O( 1|!OwDt.Xm)1PANO!ǁ紆*dT^Ur .eGxGRZySbdSd{< =ZQ1]!2YQ,jLN\r,rNi 9~LSeLȄ*W*,qB=9  NUHO]pwL,Xߕ|VLl)f9#'CNPEyLxl2{2yeLJUD0(-U3Ui0v|:ɮL1v ͥB+tr)D]᥊y ݸ~0)\*ָɽû{Xfmհ2V|ߵ=růĔTMT۩jEZWj^vqq*B˄ΆKZ[µo5c[_U`8,G bK^2ٓ:hh5i|1/jZVXA>ך_,N7Ѧ _\[=_iu`xD@yy_2%ʹx>r؏{Թr`jf>+Te$9 `cU: I ~%ٱ/袁/h _s)qqlK3[j ML_>7\;ֲc4QkTT((kx[w ሕKk4U@{.J1P╢4 ŗqE`ƎUn\ɼEi]l'${.yǵ1Ja} !Ϛ:mfG3m4I3]4E35q^'$;i츎[u r@ 1T<ȸѹm a-߉MKvǀz(j-|BL9~3p.Q3 xԭGn߶dN;|ܛ}6'Ѷ$3'qR<%&4S|qJ~DzR>ދx/9f |ʸ'yj= kâٱ ]0!,ڣp~ӳq0rN<Qٗc;ޥ`|<\^\e>PF<?WOcq|xiorM_a{ u| =&RK忚6W$dv}*1?X߶i{#_\Y3Nmc} 6>|d)];__/9Գ 3%OlOI' 3d,mB=E;bW8{; ,g_^U*IltBtl x( $/g :{'iv6l`gv;8hûCQO)͠s'I=. \x)9)#+yJ9ۉxs'5ۆ Tx>)3tSI/ WB)t~-vk~ƻFvNZMsEp]z>Dk;ddI8,ybi|ENbWVf{crVրco5(Xe1/sSG j+GYvꎣ7b%8pTȊ*J3LJY–ٲ_h9 ukTz.?.7i<%oD,!`R8\)`. .jȥHB@H1%폎@TXb/&f:.cK4#1wsb=8|LfҖxxCCxt $2N(mt 5&j0T?CpmG2aEh9K(U/0q&{@AkX = =Y&zfͺ uЭ>HV^iPfPwމЋlxH9,4ٲ5f` ,x808!qM٠)]I l"10BTI##P$Ccba܍2Sc5#&F&G;Τ-gҖH#D >[3F5b( Ab${izз9&l^}p"F;b2!{asE D&x#8j$,byb!p,dLY]ّ!1CHlp\q .U%NLH-Rdch ^@D3Hvgxq|Dp*жhcHu}67jʌ ?R#3I3< PS,> ؞Eq\=-R'6;9IAzɆٜI6|XdA,@W־+Y?[ړC iBF-(ӊ -A[(oq@j ȡ^s8j$,AE$h~?Xhڊ>ǁ-•a0|!St+R)5D@*zmahCFnlV7qm͐pnyQњ+{O#Ok R>5y]Nbs0 ;P^84~EJcil)%dtUY#Wq€rFtGz](9dj_8`]భKJ7HKwsؗ1TT..(rۮѵ}4f>z{ϟࣵLAϻsƌzfzkfL(քC ~h?j}CJ3E%/c_TVJ*pT_xEy\_^Hڨ;Wi YA"ҭ[l!Iv^يR9$Vd2nqy>=/<y;s+Nw $ ӟmWy0\*c<0gלuN@B! +G[Yu?R|^rrH/坑,~$K]Kn`l=Z5[7q|gUnr"~F8ߛ-cY đ\ೖ-K1Es)`[>zyH]PF(볫ܤ;dqFV Lk-zPߔJK{wWy~P'C8d,ߴ. :J@7 dzqF@` V" 6X ##  ZeWŔԃN~a~qfu#E".lйy.?Xϊ ;m HK=`(tu4G!gn_:^!B@zhCLZ8l$@ + @ e!OAx C8~ⷎNs]=/I֣3ѡM*{q6ljK~!}9Ym!!_7Hlް(Qppj`0GXs,D`+/xGF@ҚSШ s=t##URuMT?|zq+[:sMnִ䂹33o\P7.B *OEtO1o,N4GO\ٞ~pc݌)GR0XQAl(f4 M)h@<׹L"]NJYsr,'%hݹv  ݆/U)|JnPW x kFEQ`0|=t[ 1x}fpc3A&ŽpJ ~ 7%1,۰PRND,^HU0uf>7웻ñ]zQZVq6 S d`0XA#GVJ[(9 RWvHo^0x3 bx p`+gQ(^1ױ>9ږ騬*^x#qb ,Y2aHwcVMOb/f=-ȁ/} - `=瀾}k) 4`" C!)p3:mu@XoQv ngn3w:s+*qBV- M$NreO{}v R` 83JyMO4)XZGyQj{DM {_πY ̸Ӻ|)weUefᨈ.A]]dciI~\w<8/t Pg+e >*7E`S# 3\GHpχHn aKS[K 5uk;mɶcVރ iEHD_+߾U\'9GVXJ¬9M<~̨փI+qijL9%A0pcF"((`77Q#'q h[:-H,n#*Z_YXO =Vy!pLYzY*K;x2}{"w7er"Iw:GSy\V[<6'Rչn%:溬'5mDtbZL\&$ ܾ~vן{}߻<%E&gINDHJ"NƄdD] Q!c@ d *>7 8PW% \ h`3^l:93cM|;egA :܂8XJ[7XI|0|N7w[{EkvcJȬi%J-Q#u|FBѵ<~ԠVTw|_JvV{J,͓ɯ)l/` R|Vxfm 96pL1c3Y0ߜ,/NP[@Qt+eKTe9ۏ-p Ȯ|BpW$ %IHO޿y:~0?_(gD,rE}KcШ+)J_*=I,?!4l=Å[Pծ=Ğ [ }g OZO$o!xL=5dbBC) Oմ>RIr\r"#;@V2[kclzi5a#*Xm?;62.#:ĉ֙Li_8L+ endstream endobj 152 0 obj <>/ExtGState<>>>/BBox[166.755 173.82 381.352 109.953]>>stream q /GS0 gs /Fm0 Do Q q /GS0 gs /Fm1 Do Q endstream endobj 145 0 obj <> endobj 149 0 obj <>/ExtGState<>>>/BBox[166.755 149.0 345.301 135.0]>>stream /CS0 cs 0 0 0 0.7 scn 1 i /GS0 gs q 1 0 0 1 173.5264 142 cm 0 0 m 165.003 0 l f Q q 1 0 0 1 173.5264 135 cm 0 0 m 148.853 0 l 165.003 0 l 174.031 0 174.031 14 165.003 14 c 16.151 14 l 0 14 l -9.028 14 -9.028 0 0 0 c f Q endstream endobj 151 0 obj <>/ExtGState<>>>/BBox[324.234 173.82 381.352 109.953]>>stream /CS0 cs 0 0 0 0.7 scn 1 i /GS0 gs q 1 0 0 1 331.2344 116.9922 cm 0 0 m 43.179 24.93 l 0 49.859 l h f Q q 1 0 0 1 334.7676 110.9482 cm 0 0 m 14.393 8.31 28.785 16.619 43.179 24.93 c 47.72 27.552 47.72 34.396 43.179 37.018 c 28.785 45.328 14.393 53.637 0 61.947 c -4.593 64.599 -10.533 61.23 -10.533 55.903 c -10.533 6.044 l -10.533 -2.984 3.467 -2.984 3.467 6.044 c 3.467 55.903 l -0.044 53.888 -3.556 51.874 -7.066 49.858 c 7.326 41.549 21.72 33.239 36.112 24.93 c 36.112 37.018 l 21.72 28.708 7.326 20.398 -7.066 12.088 c -14.88 7.577 -7.833 -4.522 0 0 c f Q endstream endobj 150 0 obj <> endobj 146 0 obj <> endobj 161 0 obj [/Indexed/DeviceRGB 255 162 0 R] endobj 162 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 123 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.2 %%For: (Christoph Schmidt-Hieber) () %%Title: (dmg.ai) %%CreationDate: 10/20/09 3:23 PM %%BoundingBox: -1 -1 547 323 %%HiResBoundingBox: -1 -1 547 322.0005 %%DocumentProcessColors: Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 434 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_TemplateBox: 273.5 160.5 273.5 160.5 %AI3_TileBox: -15 -195.5 561 538.5 %AI3_DocumentPreview: None %AI5_ArtSize: 546 321 %AI5_RulerUnits: 2 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -562.3677 375.3989 0.6667 1345 819 18 0 0 54 75 0 0 1 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 135 0 obj <>stream .+|%@OP Rw -B fK).fj߂ioF~~GC#&KWhO kKF)ʛ=B>6Dg|[Pp*?|fo[UBϗb$E~2z#i? "+/2aua>B?zD$z h}_n]m# ĵ[Wr2\mv~JW_($|6SB#.#f;JW;$sx.ܗ䎸3wk\u/JV\b-S0L|1 /|[,N&Vqd#O2xK5・AEv򒡴K5M;gSG<'pR}߭#6m}ym=3aBqXDU"@^m/mKF͡͵޶+}Ҝ!)ZqzC᷏Y5oWkV"/LXOw^|y~;,<80EbJ:ː^o^ <8G#L٨Uєwo:#&b|r_iF~GyMu;ĭ^ 3{ː=HV`GЙm7;'q:0v=*Iiv~r<|aL('Z}k>y=шC!䭕|xv~W %hO6OX&rG rN=W ]ㅠi^_;*z.5 >GƁs?3#QpKg˙aB:WwBLetr^iv^sGYLήkG=G/X`o޲^'F=[c"U>%&fuٙUGe>ZKN>[[mXQ }Q?>x1ah\ʭl6/vYh1rx=Fy_`f;K'⹽cG{S@.:Hk-28)M6Wˮ95m%]aXX6y75cm-~1<jˍ Qo 'FCn<xmMʌn&Eרr)~w[V-V?{E:4ՐBź:՚ּs*#F9ܪiI۩l_Ȣ _֡-o$Ae\gt~Pf:YƟ5yڴMgn7>?9j]jD&5*@] Wi>FXQӌ젳q>synyϞ~W')bhO|wYi(rSgfJLQmk|+wj\*{_>nK!&y~ q5O7u=!@ÍtJia vZd|6—dPaNgyҊ HyMZ$&W݀V]B:V|bl}̌{ƖF/nz(>KQ"{*Ԑ.Û.W@]NcVZbŨƪR?,3~4j W^&\X\-ɲ D6D+'=cg.P3/b0Qi6/@ӓ=g~?p3VͲ}|>ڝ_% -'Fy.)9E0!]1K%/u?L fQ<*O srqgVH>^G#9Y[!> f;ѹ[9p^j[ؠ&;WC-.Bl6$OYm/}E ']ypf sØN!g)c^dY+vb? ~9 e#y~un鉙*SφdM, H^❦ ɴ0*?A^_<+k fgv@ͯ-4.Vt[]!t} }]i/ CMOcǖ؏f|lU"#ޣ]ЊFYސ8W)*f2MxlLBf ^bYi u42y{\I*DOJ^IO^ǟh0T+=^o4Pj O=4JUG #yy*`W ´9x tR54 kgd>HA EZK}㣉PG쥏6qM6(zx@ &sx"da:I} By0tPiHތ*C=+x:&1dXW5i67 +cF"b.<ӡTrW)5]?1ڞN[Z[rԗop{敊+qo{\/o|h P !fWFjYT9Γž'}sLl*9E\,^.c;=|::\ נ [IL6e% KUlKNU+W`%^ C`8t43>w2o\-hMOp;ѯ  ~>#1m/! {x?Nk(b*7m ؅ʹ6aphKvYC^咬Y)ްuxPAoݺIQ.j:Q;)k(gFD&"|O x塍؇s?gS "Ő,TKpUet?jH1[-)Oj+eXJq{xʷ:3zj`'",~`Mp~y;n$j8.S\m^9 xigV<(_OE#ݜW>#nδ(^P.Fv9#+:Z:3X%CϪlJrGl.nr;5[nA@o"ƀX@ >MqA@R?.cy-Q ek:]i!{-,t?fvL-}OW ȿuJn>XWz@2 33u7l:ȷ(' @!0P$^Nk?GqQʋҙ-FƝ,m kUno W yTjlAh4|ML}Mr~muB=-jw%IJƿc߇zue} mJ2V6v $D1S '6{nȴߢ%.ߢگz8կŷrVgkfiK?rJO?'W ~Dxyltn=׷?^rrq![/̜t~ΙqZ~گ:G +ji˚ZJf9Aw+k9p݋RJUa&|Vϝ)y8i;G@|3vWkG_P槾bk=߱k7+NbP'q:Bq; 쭇v8mP7q/uZ󻢰 HQ_&nTBO<輒92hYF$.wk_HdoFgGwIn)X_޸wW_=\Ldy97s$LQ-fr=Ö:%21q W_b3W)JPd$Yj{^+;8)"F7.WzLZ<sddlY+7mJn-ެu||I?j yT!,7VҢMN>/z{>| huf|Rrg'o2e{<%?ʏt_&>]GP@3EPD:J  +PvQZG~wԻ'R ʙqM +^gZ_.:,*6`ˌӧ<۸l$K{S CI7@QP;twdpQw;w9/ Oh7xW¼ xmaA=9n FJ[Ekj:޸E0#*Co>oe\{Z1Fg!poBuuly]OaWfvk7Y;;ީ6vQc4afxkglnf>%W>KQ's@\l{b>3hG Uld{%su*fMuourn Y}.;;/{6$rZY *tr:FVy|ZU5Pp-V-}q2\n@T^̸Hi~ ~6Jڸ͆va jYa\3Hj^bmkUX#P&՚%+[Q+8b[:{6'X,0RI ϿOV Uz(~6kaӢj bί#hv1V0J3ެɭ6ɻ̮L7<[e_WLu+e*)QLRM_oAslBqWVڟIcb\\R^VUPjjʇ{_-wE3=}L[Ij4ƣhGg=LWr%qImv x/8Y]frz=|jeWqf^X6{䢕b7#I̵/30I|Dr/~j\L6ˬΜUYgVdJc> ZˢeS)Ŧ Q{MnnE&['Ul$tc-^4G 3 ?W)ηO_4pWn)cO._Ò[+w󥧙М}Uv9"SٕC(RnR<sG>kgXFu-͙dENIqD?JIsv`d&=8k%68aVwaViBAn- O*e Kvf遙~Z|t{zLnc`i^YIctU'o4T<[) ~Y9D0 \ ֭wqmN1#Zei͐W0CL{bG 'V 4ń^C`{e'5kpIWPBs*2BQ{QBtG3xu&.?^iiuo0?_9<1Iq.`d0"8ˬYmp!8A U/ʑT1Sw .SdC4{& $i|99D~.4 2_ͱ~.~b ۰{1(De0ʶz}"f";3$xcch J Hǿ8e Opa rU-;)n3@z }H,[{'.6SDeaqZTo&RtE]– sB^5 *4 -LL"=:4ī)u@gs5a*Iq|^Pbbj55_8!˶or"[iK^@_LbGʟ+N&ȍoMoK+"ASѩ}0w0j'i e&3ۀk,`W0"9E7T7w*6@_"͵1#=u Ȅ)g |2M!ˍ(J+:i׽zsy5&8Rף}1Z' pe pC{ʬ][Q"(9gQsОZ9lQ1j\{ 4-GT~sO%{9|S%P'Hiq@x+b G#҅OoE@b^┩Vo@rk u'sHBH;f=C|84&t&_QFi}*dg' @P&O4Zu@r=lvjuѬXPEr |CepA:6?Ϡ~uۯV;t~[ɶf:@ =>c1HtӡQB7+?Ǿ{:MmF E #DC_t/>斉.ܭc\#^gvߦ^?YM`OeJW~"&o7!5MF`G.T*ߧDø[O;RUniVY\Oe\:|Σc?D}}DnrRvPo;ۯ[^["8W>*;#x=yjDŽ"12Cz3[- "Ưu>4bZE誽*ԙ7moIN;mm_-/ⷻ~]IdD{u~i 醥 16*7!ml_O~+s[&sŨTgWNqrbۗ*wulOy-0 iŻ1uQf|ŭN7_-ra9]aLh~>n+´uV xv-^(μu+4ڇd wAY/2yck&Ո(_֥_cvZtyϨ;9H./Fbz4i>bAz6O={[Ԛ5YlLȔVR;h5N{]Ts=<\~+>~V9vTQɴ kfc~TVAo8םVR YoٶYǭk<v +EU=.%gD˻B`;MujYŝnwrn=Sek *9]*EQ\kmȪdѩV8l/C2#|_Qy,+p"AuOe˞&m-q6rLשr{2i65|ڷK(3opYklEySh.]}c9SΊ t's1"v1V/V:onop~*ktYFm-Z[{BkG"L>KZwތ 7|б{yUrzem.0T6g!ߜQb4blL2U"㶬ըXr.y=jSŋm/}~`ӏL3D^l閕/9y#=Dzfoec~*i8jU.Q)T?(m]~LmP&]GWKJf~2ykfii}n.^sVb1̒K g-oXNU&Y e9 T+~V` R^lB4"uR! /f^6>toL78?E<t7Ȝr(L+tLΕ֒3j )ʡ\b& {٘mKm"nqG]7Y%zCzzD% S&\Z鷲ШΫ - q [G4FcTfjP(y#fshH{LH9K+1 BF4)#@OxI NpRi5`|10d-F}\M Nj-.UP"Wڼ 1mcu nJPp32=gݻc: ѓa4ii@ +xq]ѣܲ^k~er{ժmi!K8i/K{ڜ/n[ғ3W~\6@ v18N4fl<Oh!ϴ .nhT(LTg*u9ɿѯa.&yK \55wFAgcv7R/l vղb)vditva-(K{ r^0%NjIiHHj\xyOab(U})_60tn1EC|ɍR~̛X2%5ʵGqE;L]t鳻m1}=zI#?MA$#apKܪ){6?I.fQ뮄#D-}.H˥ncyOJ|g,=;Tt#(:t% )[GqTz4`eVid@OLO:z{b ʝX}KmXw U:4140dLj=/;`{(QV_Z@<(|3Tߔ8㓹k=@0And}dM%萀l-d $YQ@:T{+ mK; rLz6)-dOhu$8j{h*{)%+5=YBf@9"M E Z,. +v2Ԯpg5؀/w('ݔ_ wNx7\ioztt:i|Y_ә{ vc :\$ kA* PHjk5[@o|Ho?wi{86LӁmnTIOm_9Nnߔۯ?omc 46sZZ<t]9π^@oZ?a߶^nY_7r xi»CF,~8A1T/wHsGm.^ |~M=UWQue'CR07f# ΏQ P%ELJ^Jj7מ.\i5ͪs8~}*'o5Z.LKm%#|xr?RX75/XؠaXN!}̞Q[ś5+2R՗b[hTi:zjУjM*VwA?~6ЗY6KLBCBgzuŀ;}m⚞Vkjz1- dUN0pSsѱ*}CnK'#R%(BٞʡMr_d*uogv'ڋE): WX7Yy=\zn-yy5/+nl8jjU:&ے%']Smrؐg8f~(M0Z*6*RqThZ댵kӭVU/~Ee[U9(eNp#qhӾQ)7G%?U5\QOG<=2oݪ[*|XK؋qh N'E/\ v NweGkVg7Tt\U8wJKK6kWa.TKv zmOHR:rxe4 3))éC#Y'֖O|w'IV:E*Ŵ&5U*VeN?ޟ(lϛ:ĔvvPqZs@HVfS{]JR)鵳IP}楎TJRsc+j-`Բ=+: tn؅=9^Ԇ2Ij[ȁٵ:1~!}S''*=c`J*i]d=b04% >k/80A7fۮ 6d'MuYj=Ą;@CraU0e9y_ZeՁ@䘼%˸R=M@اD%|\?wY{J , r~o%rDz)͂c~t+y:ZKiyWщuSD\ V :6)2|Tj D)9[rf +,`<[٭,R iFP^Ԥf/ztyCOصQsYr뱛62:VG4Oki䯑rۻUzq[ncjIB ]tP'P}?dk=KS%8s8L124(EϐdXLݳPo!bAv /Q{ˇf=:)MZ!\(үDs8R= [6 h)nZLjbgζi5 ⳕux *${ V)~q:lծ Ш*A{f6= s7-+j_woݸfj/5zGxy񜴱 =dNHZerIVOq~@Vi4o|T RzuFlRly Ȁe>h&{_X}]ErrYPC2{h~+>'N>_\ܗxIܹm$&hp g$vJ/Ҧn'ﶥ4}3Whh=WAI%V5A`1.x1Ĺ@&k1 6 & )UDIb ֺB y%so<ޠ7U[SA5|,8FQMFN !8g=(+U=@S-@T7& G@I|hECE lVkd>rVWT)gN\R &|ZvlH8*_$gj=]p~^BhzA|ǖ kBC ,T@/EЃy?%lq[+ՉhMk~jj] ֏U(r39@ffGU" X/6ߣOzv<GGr <iu`Mo pʀUh/3GYeMxyޖANOIm x=~{TYb3})־.+6o =$Ppk rO}JqONtv0 EMp+kz6sP^y*РCC׺7-tzaP2O/)zr5?ܯkI EUcS"7X\X@lhm^DϿqdbK~`%Szso+8bwn)c4%9T{ܟ1|O~_ +Up_&u= 2@a P4 Z&x @i@6CGlfSngqm <`|++'; g7'xw@xem`@Ў.О Y:&xMS@uWj_''w7o27#-OI amƉGڈr7(fs_W?l__MAj?Wq[M_yfuzᓇ>նq~VoQx_׼_^vE]EG&FMYMSݶ'=>?2'7c |IYWR En%fuͶڭ>G9wY(ûJO9G|C{xK M=JE[sKY,:WXR2LiVLWZW@3*5}E͸n;#!nvBYae@ˋG^]zs>z¨O_O\8-ʃ[ʅᣓC=k^kQ+ˠݵ@]bٲס/o/7'Hh#~M_ Ǽ4>w+B#9C&X u1lS4?6sE ^ cx鶌43ބ־ژV_꿬hmy:>hC(w"#\Z9LqT䠜s]b;uBq#6v)֥{^(#Tf- n&lS۾7ud֍#_ݵF.ܻ;~A,mGR0w~יS)2?;sAʻl+Ԫdsi4e5W/UU5XVw-Y/d\YUnسlr~ǒmRi4mRS%J /YA\.JɟRK{7d[;cR+NraR쮾c%j=ܖK;QpDQ q$\#oػdC[Z*bh"zi/-W>\ HF"5[;lIZZ麐AXmj+94'Pj 놕0'`,푭l(*'RQrK1a [Cw:ɷ| rcxo10zK#R f_,F3ǭ׵:vԙ`srۦ3hovq/֦^X7/4rynΦ@on˹S8,6^t)yV5g:O_#\+-vW-[11r}*>?ѬO[ZGzol-aHl.g_2Um|'ral H5[}¥Nz-ޚ3Zv&U*L&5N/r2b*?ԞԆR{Wy&1_Aj5? x-՚uz͞9ř)+xEmnoGf;hWC qN]lڠvT\*#-#E AKmBy F"˿/M0+cЙHܕ]n7Q+5\V>,낀\xYUtdTZUwz7tdJJbX}~VBa?`X(IJx-Yeiv#."PrNq# ݛֵZ#6zhnW22޿4l'1{ MbAQiGTLCxrjWPRyʏ7g3n"OnqҌ B ;\'&n "Rb(R<&R_ uc#vgke6J4 g]Rs7IPWX{pP }J}˜Cvfl%_޳8\1O2j4붇Yf#ʋ%юjgerYY40Y5;]J'gfX#sSvݼkt4nt.˰y % U-4 ULYӍ HNZy?0& 2>dG"^7DS*&T{y+7T>FKtչU)D-DYrRhT߯,>sUeE0P tVs Sm#סDPP"_mHvƃ^/WE-|xqD4cSY8T=z'WEs< 4Gf[ Z-6l'WO<DZٯFA"xQ=ɓ7`{pC==BWlơŦYc OܠeB1hX>C˅]tֿUҏIk~[|ܐyUvR[R%mp+_Ai HuW3[xt0ҺM 5n.6chX]r PLQ?pv^Y73{*Zf+ Jvƙzd2{Ȓv4!y~Sis]\|dQΒ1[QV@o3tR)1 go=^QLΡKQ/SEnA\晽#2 0CNx6#Fy.* 7/{#i<!-vm&<\4I5դ8!U/ P`,JZmE|z36-B;letBl2B4Ž,g\l &XM!ZnJVұdqr !q%}ydhhb䊕X.}Mw1E1g%tGXֆ[_/w;\ +QO?|7_i|BoA@r~5lHmO(@u_%ػ;*yW^uuOriMkL7n3VtVz$dJ-X+;N^![:Lz9 gt:.ܓ%FH@R`|}jrYC_ǚ֎5.Nx*ݮ so쾱!2*L#st r,'ZOB(j p'g(ly7zO>/ەՌg ˸uj@6f:4`J&\ԣ]vL'F~M秓"Xo*'H:° ! |L0~Bdc(c j$:?^2Y7\5wӯ x`e*LE}ɪ#A&J2kbp>HQ59K + &u@v^k[6M&x! 6< F1#dd2O$S<7yОNEΝ\v1,H"$f^hSI~ Y-m:$,>G.^^`6I 6 5ch #SH5p[ ;jw5_$q$?ĵZn-KhZTDї游䴆q!8yIM#%Mǘy`qJ]3!^ l#0;JpmfV]fμ?z#`s@%J?._V?_#O=T)B!alz!{<='eM_AiƀS),: D\plB-G 27ppL\8\Q?Va#co V xC47C$ ÀEUlƻPICۿ9W@'U zd+t!~9@@n2@Mũ-C.gZ$Mt~Qb-s$ܿM'ULo_n^*NQedzц\i@nvDG@Xm QfRoTB뛍͈ m+CU]Hq~b)H}̽uC E>Y_\jOslԂ";f>^v&~Oôm&#s.;Rkr݇qtԆgetM̚=>*;o#0䡵uՃh.쬳 IAA?Z-Zӗ0/tT8`\>>Fv~溻(knvTr65_zٯJܤe@eGK/(OGRSM9CFx{ZOWV{\ʡGߝh~ݲZ2[s^Cn5ǕhUr}xknBwZwpd2NԻѱ?~ܚsD|* % GJCe#(gZ2w1o ->wV^/}̨6uʫyT-+x#ݛMw$lx?_LZۗ V5jR[ʤZgѹ]ߛ-+*.e޽må{GKNE3(-Yk1,. uX3CknK9/eC$S)yͩt!m<2bXp‘o/&摞bm!-3D1uX95|UF~ 2KV3)6-4w/~`PI@suE[Yx9KGum= ӻfSA)j<ڍTx/ e'2۪3 %CEyq W 5N`_k/^G+[ӮJ^^ڪ 1kHq+n`P\-ןud$rV_ 5Xr3ِ\ڗW_]u,hᇾyimreW^*+=-E=Pn~[Ho׎|@;] KjG|򪳹rxIdd%.v?sQUeڽ~%9猢(0眳AXk=ΟG PzuPtEv8ɖ[,KoY2^[H]R̍M Z ЬܘT^7.v2n"eE;-U/L%i#c_{9OD%_lG4FESSt rHYP.|҇Q{3`6kSc볒 3:13jdw˜hE7כvZQpׁ~ *Ds!nqZ*Mc͈*2zVJ"/A5c;/r`]RXyFښ: $)QW5m<B=M:<ⷴIGvYs).^]ګ$.>2civ[m-_{˔WY{A'o9W2>Z5uvhS-mzSSR0KNLf-1E1.dv oAKȷg $#pȀ{mԼ*&I[Gk 4㘥oX۽Nkzh] qRnBpjGf1Uv4Q N.+7~;s|P$>Dvu-͚\c`yPz\ Rig/2mdƧYr˵<}U j+Y`h$xQ7 1 6ʧdR2@ 䃅vt.,K:[Z}ZdIXcXZpҁkBQJz^m]E@/O}@F7@|q;+dɂ P-o)SđÌk=qykya?9_^o(^ʀZ-N& L C X6 Ui~OB05 :\80k?_6u7{ e !]BlfQ.w^_AG8v)v~};~;?hko+黎N+ 4A{K5QaHA|Iȃ Wхx>/{y#ɍw =]3r@:_=#x<3Ę2u~bUi; ZVTn97*Ѣϻz׺;0}jH=cbm X_aOz7$ȡ*L8&pADq^,xnWqWal;P8ݔqm#{h^idlnJ%d6"q7Uvv&Q\ުV /Ր8^kpg 'J\42&ákzc6nj{5MF>7/&_Ӟa7{%JS-ٰ]jľs=rr߅V42*\ 8_ ~kgb rG҆:JUQ (g yA&=p6&AC =kj<ٌzt\kbno7 k哳E zqbzdygcWnq[8++u=;mӜAéXJ,G- DyB:GAiXi?Fl̷lTMh{aIƣrKx[ J2iZ0,+5mL;Ѷf1JvU)X9۞4T-ݫ`׆)9q"”ByJϙag.L`륉0.M|QVuA0"5lMrygbک-]*Rk\R-ArUSK6u^ҽ(.H(t.tOj3aJwB~ BR|quѭre11ϱI?y•u0/tU5I&tRR7ӯsϕ-jaaETzg3 +%&j(QڨSШY?2~  NE5-rk60F{($p iڣu82V{<+\ȜBԯ =~wꪥeݱ.,{{~i k/~5}.? )̆w.}+?zH+mF$% /k^lqHb1 e'w1Z64:#3z̡:-ZʖG @tG8#$&0;sX^'k@j}'Ds-Sm?Hlp~iuy{۬(b3…fQA_6&Du;M,lV(@98i$, ,~|h370$XI#lM8 ZQ7|X%B,󫑆e뚆`jl"^SAΨs](o|ENSA M4BL"I&OA`S2ϫ^'߃[ ST*_0}v߲JlBAj- %.B+V2&ڪ cZ)MŒ6/g[yҹŎŒ4V6NNORnOb$O|e![5c34c0?AD+: 3 _Z28|iK|y5ĵkZ uֽd-lþ7Pc5ܡ.яLlS +c;q *rcY 9{6Rwj=x _֝+PgRvz&z+^ uzP, ^}]53o [&79UziS$F=wA<ѽq!'yxGQZGQbnVci\ V;H 6j ЭRL605Jp~gtN^=Z5Ag5Z79}ܠ]1r!i,cûFN%3@ =wh2>RIӒ 0~dsM*+ |$ ZeS\X^FonP̓nz6} Jt2pIF& n qc>0|:åLǮz0]R)Ζ#2K8  k QB\,"%&phV8\H;h6~Ll}ʪP̶7 ӛ'v)jVyHۧ":cD{wO B(@X.A^M0qaA4$xl? m'%zy\|*?H( }z>Sv21wQ0WӸ\X:/U[o”&HD'WH)$'-|-@>9KTM['8> ɶ\\C O6[<"j*;g)ݯ 83bSIe`W#zfRgOgm83:"'(Zڂ8(ԇd@>E@GO>qIo#m~2pO4h<90C̨4UǦif/}57d r>DS^Jz4hq2]=^h;WK0:/nVRDv Uy/,?:VS@- !35EQl9JM T|/̥LGZW0 ?h0[ f23 -tju0~>[Fo.pW?ZjC7ɂK# Zrl~$^NR43gZ? pUc ."$ I1甔ҫ88c%T< 1fиH_J{-z8l`;ts43 w C7B@EJM  a1;,e3<ɕ_ F(4TBA%*t'aww7aCe86^:"Zd/8f.':%%He|TϏ(zSuoU.? Mo*Sw:鿂5~os5 (*4hV@e!TU''Yf P~ nWZO$2nͭ"#qGJk n}Up%~CۋFj~x>0J90Z9 q1F?$?nۿeFk'r@]g9r%gSVNw8sl p_j}I%}})nvo:k}W^nwDaB׽Tk?ȱC2}Fw 2;x`)ziNk#8SZfyҚfc2NRWӃm+?yJW3׬ݎ?4{EX`GY4pØ4oϺV3:|XW?#k#5Oh-!^|{lofsy ";ԅ.z]kݖz'qf{8~n4шT!Tƪ]ɯu!b^{I!:(Xzt_ܞ~]R:P7A.(b[Bv Ҫ &=7cYo(TwQ7}7/TyQqH/:^S_9ugDk6fHy|#\ސk=:v>޶_8vX&FTf]8wveL[Bq ;IbcSߘXW~d~[׎ ?x:]_G^ٻrǨk OU'UV\ =҇Kj)qDjNO7>jS4B~XVw=9\sւF6M6tT"6Si퍽@γEϢqWiyPnkblwW^7Ʃ[ZyA\OPe}\&K3˽@Ή2|9s{팊اc3vRl[lm[B>ߩd o@VZ'ZxnSu_creD2Y*֪RxOؗ#FnYCMrw#d9 CFEs:?H 2-͂Zݘ{SóA=M /FMzjz˥zq=َͻT= $.nLq\HXb\n =s-&z^΍Y566Cl,5FA8W:PT~WT!cM<jQr,={a1G59h?}a)3hn>Mb[r1̲-7&(L>Wiƃ/nNx)܍"b8p8UR:3ǒtglЗj[bPAuX,֫jCflbE ;yPӺ80p ^!l וWgVrxbA:'Ⱦ0"fpN(_&Gk]!"G )Ӱz4[3n W7e_UpɹuQ-j\J77+$W4yQLV^p qrήЭ6]}A3Ԥ瑜vxЇn230zA]#΋T ~Tړ|9DuaFեIWs0fڹI}ꢡ%q."[=5rDkD\x I=ʂaYV s8-I7j}R*@P0"y -SWχt%.輡d$KfR,ZHrPoZ'V{|٧v}A3=^=P*0Z%2 ,j@~j@\ "̓2rѬpڡZҷBMOvMb׃K45/dܵ$9(Ҩ c&R8oYx%x0nO(QL`lt{_pW\3A7)lvmv}=ۿrqAna-7 )= O Si Y!A/9OSM"vp6)@d}9  @ef\t-T{`Ң읹uHewI2eN (Gi@nV< k h_[p$& i^d1e2=2Ru/c 2QnUEYcQd獆}DžcTW̙є(o&e}VZ? oW){P+Ԩ )>` *wT*d+w{к3;519u%Ikgh;Ŵ`gSs_|4V3#'f@z,u`xa}€2` I'6Yu݁o.prfgozosfҷKwfF*9}50N MvAU{"?od[4cSm2O7Iܰ>+8`C8YK,y>n1Ec6t;,S?vMt+;7~8~~ "7~[IoNϖU[/*s+X}fV5||*zX[?۾Oz_Xr 7 ě%8Z@'} f@Hp2;@|o@<E6bu_Ŧa$4[r.g*֡e.b7|f6Ur#Q+&@@rP"<JÁ@%ve\G)TY\O67(]W,|*ltOo2ks; ӫo1Sv PB߲^W?[\glgq%?Nڿ g.82]䨌.>+.w(W٢\ove7mɰԿܶ$t y-ny#̓elw|iʕm7kxEw.Kq:,b9k$24Pr263O11Gſ+mޯu =w517D }f^(<{ij JfژP(0ą`˟Yr^,ݮ>9w=8ɷ]?j5~or7m`q^J.SP]grhy_n6=8w8Yi<}eWMRm75AYnBlεMmnJt~#fu'kՌgGܽ-Mk]S(Ͷcn}t:;n㶖ߢJF@VruXʓѣ[D6hl^Kz,UPOǸK`A@?jcd˿QDg+~@=YFy47Ո!+I7U껟e :[GuW,6QTjiŦTznOy),Ys(J7fd}S~Aҷ_{퐛tѩv_ڵ^T=aQq2$uiS)JܱzīF^T{ݜG}>4 / *R2H@we)l\9΍ܻw"g9RP3 leT}} 뺉~j$Ɉ؞Q@IVxqMφ킃OzyY؛ġ-k}LNMkurˉup3M_g6H9R)޻Ur$~eA90ǭizj/1 19잩|\̟y=G B 5} r' \ᓫY\9spQFf:s+cۦ52Gs\+MC(}}:fni$}l)̗rF !9+F(H]jaQYpiOhFD}k|NvyC]3) V,*+\'e癊ugN3iMY aDd-[P q5ZnO v/#v"FBn܇|u"S@Rk4tP*LYo$@X$'k˅,cEuzb~`v2M.>R@(M#t#(WN0LP8 vO77,]U+ Zv 0X36pʛLR 1tnb҇YYl.M 4t;aӨ']gr_jaŦp-az;%@@3D2ps*chrHp4&5num&ZLpT'cY AXu!RuڞAzw $!2s/mrrC9l;=CHW;N:`x! l0ZE `@\<9@i U+!eJ7b[>\3YX5%+xļD\}A4B҅4_yT~P<2GgoF^ w#`L*ALpHg{J-^ lyl5IK&`ٓ<Ӏx~e iqĹb C@Ϗ؀YjR~}8r:J{)ѯ/W*-DF 9Yu@-hP(Q&_|8Q'mЗ(l^1Ԟ+~H#%VyGy߁UI^Nl8Ffe5yƴ7_ uݥV9Ak3h,x5@g-u4;ޒ{wMsHlm]_KA.V]M̃G+,F}(h}?/7|}!/קЛ'րUW3Xӻ۟nogZrȵ۱?RTU7EmhgYA3m*?|<B3uWC d>%(ٲ uؾϖU9Yܲ=#۠%~CQu?o@4NM, bQb@t D=df̸^3-߶Fijŭ!]~J|=>ߤ3g? |[K^a ޭ|i@>g[@Iw@Qz՞y.F*k"K0zu38+888zUc hi)]kWu_WgWL}!1K5by^cӲğ|pA!}0M;w YB_CцCAy  B4Dʋ񋄭vmײ.j*+ސʡ)gʁ6:З+2_KvH .nm j ]lZ]ll Xިvۀv3:Uo75ꨖoYYXNpU9֛ɽ IJu KP*ԴdV&L)/ؼ4>qd5oM8J҆W{~c㐭wtɮ?<as|>>oQ+hyf؛r'hfBp^v8 R8;ɬڕ8/.Om:n]V 2s)4f1H~̠2ovzU4m-K̵ztO:Cޒp|H- OQG|wjͷjW湾X54hh&o )3[ױL坳c͵jsW6USVp9xʲ(ܫ) )S^qK^OԲ^ݻ](+w$Z"? =C7S>ǞZmՒTRJ)5;/KH>Wb7QaQZ݂eYl0Muv^.ȔBy2]MYN\ԟЊ]Gy'k!t ҡyTu9,6sTiS>}^se]/S"Dz`Bj8Cp}C"u YԘ*vSmRGNjǒv̒.EB0Z*3]-[v2J8nF*Ojp|+l.S2O)eY`Ԭ}èLNa :.R7_9NXK)ah!jVovnvA\3dG2XԶi-gn*KҲHe|jr^[6%Q, Yz'')ƧarG[9/HCyƒJ=(r&Ćc`X&QFNDqey+L:(0b|>چ<>)͈Ӈgfjڣv|=GYpvAM}(Bf$oO陣ҎFa%mN0OߐI>.Am'Ma⚪Vq "OeV8KgY0-;QeP wF l7m0 ƶ6qv#\+mRomw[-]>UD< !ґ ɮpV2M;9׬©Zrj͊[M{0jI#x:gyI'h#9 pkjҮbj0i?E @Vp'r@ŇN=wrfW}:ȓI-"1>!Ekh^碹sapMS%glmxуA}`Ǹ`,.{X S/yS)gf?CsR ^J]1Py:PC]Bvs`9 I Af@f2[d>Eed%-2%s &œs1g[f ~3<,Lنơl1AmZC #[LA1@2C E'!d9Az+ dfXÓLΟ$ҝ OǤ#~^E ->a˹!aIVwV56EJJJB @O1(%X(^`ܹ$xMe5m"_ !~7 !Rx H2 Y_i1!MPCwN9sdzNEEqŷevݖa2{a,6&zAӠ!x!t B (*#s!8 1!X G@" "d2u[c /l( (J͇|8HmO<ٴvI%DϻvNtجfa> B4 K'(B %9JsT#8(FaRA! K=,YdIu%8@薂,~6b sjdu$≽F:E/,JE&A.Qn.@p[lo!3YdmLV n@!+AA1AV֓E[n\}c +! !5rTڹ\@le^#X*P2͋uu[^vlQ Zci4Ĕʊt$Ao5deK![;AlEْk'd (z dUP ټb9o)AEnm| JJ#v*ѕl10BpZLjr,vIy,tf:v0= aP~aBE BgmZފ@3Gs=uۦpY.x(zI!W WICr^9jn / d]Lgɀ{k-x[Ű+"ӌpU  l!t8$f6Mne\R O.J^IUkm>@b,ސT X;N8ڳ~OafR4w-("Y38ϓֿp]*oYƹ]RNugsF>[NV!0*#?-7HnR{C~m7R{C~m7R{C~m?( ᴚB♄keڼZ\Q6Fa n:qrNwy?YoȦK?e3b.=2jߜ` ʅ/ wST!9HN ;@,\slqRJ*V9nEz*lS:@"UsͼbXdf7avS;Ou\xCT)ɼw4xeʎq@|n030S,X+Kƪ(kiOUe.aO*#d_ٛɴv ۰otV8 RIU95bY,ѩ6Fq;M!~K:ɰwՂ}9OekUMn=FYTUBh)D٨f& Uj zL!lhn?2b%UyyBŊެXʻtlOmd G@ʵl0ܞrvް5m L(tB;dkj==4OgE'բG cod>' @֡TEIĩ} 媈Z9;ej0dcf j+*,v9x H*A Ǭw\w@G DС7H[ <ʲa4Kͳ9/H͆zV5](êQj Ǿ#n(m? P|\qAKSg{CTUt!sa@JR Rkٸ$93ꗹ9ؼ9N]ygu+AIPi)!FrOK蘁RT"ǿmP!r/_.\~r/_.\~r׹4ѱr䍷0S%/_."?>"oXtˆygK#pPߖ/_.\~\ nj30aO.?np}'nMQ`7i|C٨mZl`8 dm%{:)w_.\~7p!Mzm [ D eێ'! ݟҋ1ݒEoŴC#UkٻQ:{f < 5L\FІ 9'g9? P&<Of%7Wڵez nS)pZJß҃<*йG[/ 47NUIl%)v;%V3ռva Nߡ3ĈTx0<q(eS- Y9rމ(SUN+wj,DIg֛,!ҝ~忋 3^+|-Pe91rZ%l_ū+d7 *y =.J\CaT9;434lxJQ/fmIԞAIh4nȗSpyKf|W D#CZ=W]Fc3fgEP̛?]8rF;d1LH 㾥ŪUp

c%؋8e' H 9o?ٲqa<+7ۑ''9E"`+[VE)GSz9'_6~j4Jn%ռjRxfB䒎a,<j OM7a8}00QJ?:ñѝ4 f)] 8dY*<{/.rNG^Sq#[i & LN F}Psu9b8^1H45RaÃ:&Beo O_Oad_ϸ䨺|e VoivqD[mv1 ,\uMfNs?[<<Nuʹ C='tK4h“S+LTɐ]x1g֍d]+1y>6w&pR!]L tA L؍443cћO4zêٹyT!X<ꛆV/b s"<+0*u uoJ]s\. BCAAꮦNEQ qn}ęדI8o.`>&cj,݋Y?nRbjgꇎ?-PM=7p!>y/e"V݉GIuE8SK2 ju${|I޴b/momIgn-*op3nk<{{[@w6 lVgN^Gra 6[C~6qϩk1N6:5^4Za<6Ӱa=Kk>jdpB1L5\?ډ~[BazB>LܮĚ6ûZ{hp4uy l8ƲT2sa;?fO/gBq z&XѼuO~/ӀV.,e_n՛QB]bV%͍9ʗ|8};֬8dM &xL|dyޛV3O1[Ȃu]d?R^`A-^ S*[ iUGNI< j{^q iMFqx1;}ˎ>S,yY¬% صSxΆ&߲dև3R7/'t$1ёcΰ/cVMr\S yi?|quQ7oF=l+شrƎ '@93ۿbl4*0$-ڡ+yw:"L&ض;sM;&9NvG_L`jOCX MZO|km[7peXsm´zy'!l,Eҗ *BL;Nݡ¾Dq%A75bYLn_ŗ_QϮ; ̪`1[+%3pve\>v4A5N=XҏGha NqٔE <;[{}kaMKޠى>sK]27S2S5#9r/}ýs~CڹIlۈOo0-L\9 ކVj_6끡@Uu89% f2dž⸄/9=+Kg|Yl_h7̤е[ZUg:׆tnkVֹ;n1Azx DŇO4&]/CH̟UfD )#g6ie$6 gR6bpLE;'fKnsSyCdΝ_afrbVϠVh8 -Smz9ٸ- V zN6i9a&yF/. NO7$ͩ{R}uLԜ^]N_.\J(SjR?@4SdPņr8R΂]ޏ0x:̍zK|zǴ])esJf;пo$Q1V=oP?6om\~C`4=zܦuz~]hT;Co,6Ew".ɺٝbjpO &CߨoPɏW'kL=G}j%sYIlwdJ!F<\B{ )Z)V;EۂkbD1枔8cbkxu5W_k/_..*Z+i=Fܚq Dah g6z [/ܬg 쉐Ѱón64` -_$͵jC~;jἶjN#Q$%C_Z!J㗂eˆ+wA:/ 옏 c1Zݭ}k v!R\rf>F rw0뾈A!Y$ɳ7 %l:%̌?I#h;$N 7Y{WFi5o$5He\/m?Br6p-N]k%Vmw:J2J~O; x6\3N l;.F@JRKOZ_mOqFSLjNF"Mxߚ5kr^gAi[ ^'"6*3{̥'[(Τ&$)TF8DY<&ģxz/ [QoesMm{J6.@G 5x8=)wZl]0a(w+O ,S/S?V?NZϴipT֢t K'kY\.F ]%Ta&.dĹpޜT6diī(]@ir>GTlD/bԆ|Ow=tLLBnPډrgjNtq"{R`F*SNtUT>0]C{A5?J%?TxASҗ &Q zvtzݷbEYlğُVA7lt0zG$ϕ??(}lF9Lj@d Xӝ흓 ^o? hz4's6\3LV7BwG碭F!@wB'^ntG n0;ZHל[\x8;w#TN+ |#Kܼf (& c5Y\7T,24( {=R\wTo2%;b (7nN#8~3t`vkA{<ђQ \[Um-q@pXoʕ_?aUט eߨYJsGyVA2j)޼ |'~gfXA/s a~Y_Kˢ,B0zNl?%@sJcRFGoNLrk4SHIihs<;}H+0겾bCyrUVTN]k#g.λ /WyبOO` 9kOwclTH\RF|ljA^0 q>/Crm)B^F(Lw(*2]xٷ+ ɖtIH2q|9}AY7Z3u8rXwG3\D4ыz^}e%+ODV4SjwMɝxns{>? ZRKLSAx^#|t?7%ʪj,5} 3}PGmzj{:ԧD_"ϴAvfJKW0Nݴ%zO%K><TS0&ﲸ^K~no:;mzI~ QMHD-?k$3נHMOmRm=~^5%^0 gIs3v] 3maH[.f FK@OWPӝ3ՑJ3-i)a|#;}mmp[!qNs \]UɎki7K7if MTThXrDպN"xOtzfBɉ _$t꽬ǻl7Xksd'B[9-]'`UCVeKbֈr>KI'2a6kJhdX'xџbp-Gf,09dǼ$#p%ʝEZHFb=%Sǭ'VY# Y h׉Q[pcX[o3w&МlV{}OLƒdt #E 9slh1A7M;<Ԓzcla>MX[z;p1TO=e!\> l蔝?D)gA6F)kKgGTX?I(;/,uK yAVퟩBݲWoOFrKBD$%O[4Vm?&8QiփÞLb#"ga)z1 Y#d*[, d{'S6gwf2':%=ETeUNqzm'l n.2.!j {Pꃡ֊F'_sOS;vYm7I,bvZhd* 0hL.\-VSDD3#M`N.RMO)3MB!4/=H$=*t[:{fnaXrͮW庹+E1xhb6No`n_T&86Xm!Q?űc1,D b@3;fKZ1fj㞮*dҁSN]~C\(ɓr=_ S5q#;Ԇ|, L^f_}vE4?)V[f4#|S%$Ug gT!|1ЛWwO2ds"+b36(2^ySS''!__i)گD୪OcZO)ourdԼUI'OVJTsQ}m"gFuI hһS)U:؍ģ.1~HLmUZTF&JX.Ey~Kn,ɋ;?ixC&B ֶ6 MN_FuUksև7\ƍT)ѻ9*W] j>GuSGRX1}\Y%. RߐO)&_{՞>04ˬoZ L%ʧЕT Qk÷̾*϶FPڧi55&DXO?GJM|wYBL<ÂAͼ%=F# &*F'ޑ+6ۙR4;T%MV% sG"U ~nY}}!dw *j[3=UN\`@#ddڨQd?Wcrب*d| pg d>,}3vTtqH1̼zJfvk} ސ`覡M9f̷[$>&LQ; o&_'E3gN{BgP%Ix,|r-~~*MV]/yבWA%* ,n+hh-S`@3!&! gno_|l AchignZ!q +"s|{6x(fv䴐$Kg[BUK&g7eW,nr}T܅dwsKjهh<=]5kh_l6fZn>lqHIv4g)MwWDS_d2@] KM66 lg\{Xby Rd,6wߔ=4yC;u}t@~FqW.hp ~XEӍ=x%-9Sg*z촲?KfrC ȣԤBR5ÐQ[ J5KxQ4F둩7߂I^@}b*sudo`{'gSBGI!5񹾪].9=pB]yd8^i$l&:wkR"xFЛ t{ m<̓ii)R5> bc2! T)L|CⲾQicZXw$@D$oO8$9nMiOml.*v32R;N\W,[un[`|hNS-,.苲$.YZt'|BA20"&m| ކSd v$QA N?fbw-VndŠ ^[O9152^`ޗVlx_Ζ@*vG$u5̩N0܀!B7tk" B%ީ|3c˗fl,@l˗׋՝2^,sBwhIY1PnL*Q&-/`խp)3|ԥC5oXƅ:-qT&] l*v AM8ϚR[~5(vt4s.O8ȁy@P넼r|c`]>ͮ$O{WIEΖResLX琝8Hf~,m"peQ'n7YjX߳ko8(,j3 yɥ^9o؄ǚ!sRe}jjU{OPt?A/ '(UL$ ^^F6N` cA~ɍCe 5GzHxfO:vlfsΖO'YjVld7ףE/aZ[SpujEE2R-W}^P&`٢kPGk@bY6+ה(xKk 㬉ޢcw#Qj |&1ȝ-]Wd}6g9DA"\#ڂ^*I&;Ʃ۠Y}߈[ 'KrΝ#{xFU#BN{w;^:`2å̍ޭc*Dvq{`qhۘe)ƍ6 i-ldx q^|v_V.*>cevho|ngt0 `軈limnW 7: \*TmD՗u/%YVjYX;؋p>]{]kQoH,IDY)#;#ߥSU;툽Ů Cˆݏ@'ro_m߈Q)aE]"l}tWR,r4™\s^8v$1)p%k?USd7PsۗPՉR.܍KΛP.X$+rlWs7JfNEO*j1H؇(9UmU䠹sGHvc"rZFq0Nve9Bv)?:nPա8Rx4ְ̡3YƯJC ˕U<\zTO%Whq!7 _ աvE'}?i"O3p-&܉>L rC@h|n–x4z!f ub>U{,1kqJiAr d"m sݓzB0yz\LX]U]rρab]P2 hutr[^_]7\1Q_<jS}l<;h%~ B|;Zf>&L PJշ;L,|]0@;8w"5RlU5jxk̴}MZ Ckj*L3/~c'zL;0 ˯cWqghԌ a\SOmTW^<#0x}ut\)LQ̶> {C&wOl^x8؆l^ 6 f"N0aN Se$ lG=8XC.)X||xh\93+oۈiPT~QHƘij0`yڐu#.?SyW1ӈ=3m0Y(;@L]~motit:6>0lL#.Ӝ-2qlKm?? L3JbZe"/y٨꺶Vuאq'2S(Sqnulή!C1uu}n0cm߫3]^x >-oe՘U6z}y1drBL =s'nk{ b;j^nA0d{g/q J;ivHd:ÚI~j#),ꚶH2)LZIBteYNERTSSplK-cM\ۄ^*⨮ieMOF`Zb/A[*)"2e4LBn M 4mBӼ%(.Tx]O'|:Do5@A Z5jfr^|fef=bUHs[L <G~:s<մX{y4 _皁Io#<\5%)Z7=\5&>}Onap*7kG|,ħ\Vykz5(qK'wmw5ί&3 a-v|iN#R c$>$Nyֈ+ST*4\ϛ>]h}DOy~A _^v+#dM"q,I v<vJ+z  h`3"y ~Nd~IH'Om{KUvq!0xl45x"2"K.y$Siuc:  SLyMB_iG4<@+V) L=W)/D7)2SP4;aƴ$2E:}[Sܫzuأ_bG+O_^ws|xW{Oq܉Ң <<n꾅~at1M[%pwɿBLS\e`ᓥL1HM*E1x5Aμ"DŚ_Z ,1uKPPӥ^99?]\c}f7UȥW$@{p#]DjAo1VN@݀ Hj+ɨPPxF W1.Xb0?H˗]Ҫ1oPX?_!CA<ǘQ 3i,[)XeBDR..5qRƕjEFVc'q$;ny0owԢ'=5ቢe5tko@Ȫ Ǹ^!^Kj`BybGl;vnv(I 6د+n\ÂTZVY'{_'FkV$ ;cm+OC|p*bKv 6Q? ÐWET9HFNcb,-1#Rݱ]~ލ|ցrLzl yba$cviԝ@*h~lEʅmؘlHul&6%AFrl$06Ղcf4Ac(>evv S%r/[L+Z R4U?C+{<Ġn˦HU,CiǧceXSh + 4)j,y/x_;.)nhu[{yH| Z4f.YBbk,6޷&q W Jb^poqPPJ>.n}`X4ுɘTy*UlU8 ;ELLVԪvNPy/^6-fk!h͗mؼjRYeoR*t0vԋ>]}N0# 'KԑtY:juY.R7xG3P=;N+J FV [!1^wIz|sQQJ# t@lM*T$luO v- .b!YAaaSzR,7GP"`,g)1RbZ$[G! =$0g+H4zkYK4$DgeaqzHٞ}]tK4H+c+]o o(XWo los+/+*`l&'f-!li%zMD0tT{"t@ *ZnMGN^6M@BP(.ԫ!wctn[|GZo {s,$\B5.-*81*Z*FTd@v54_ p'F\݃#Ac%)% &]7ebw1+66i1*uWIȅdLPs hχ"NS$@=K0UqݲTI$J+wY9sK|3 cǪAT(0LS,.j*obVdhcJc^RΌ "6LVN]+;$db#V-f "j1+quSSXoeu>_%O/!A Q$޸Wy3M cO,&G"Q܃(S5r{Ј^_$xZ@eꒆ4f9̙bUμ2# ](hrlg4Z;)YtR{c-w>ղ!D{ӧ1%CGFU$0)z2[b&픢-yt5(άHڳ;I:GydFMG,9B"#=2@$ m-#ah jK/(9tz$ӅTZYTer8̗zQ/`0$./p¼ N! fz#Nvh㰽ً0#: YMҭbtGN"Y< M֜}X|f~A-#RYϾ"XI H{F RJD3qX@HHtHx1THTHhIlׇ&TAFiw< 5P8c9vh(79ΰ_on1s݆] Ap gUP8c}60S qQl|$ƪҜ* 6 JSy)Ȑd;:a }@cv:/FKܬ h;j<(f,|6~ƣw}S;Kn@KJ^}ΛJ9^0 RZ?"'5u$LƝn |xn7WcO .5蛁ݦI"S~_6Co^ILL6yUn0/̄'dvc||ǿ$]]evC uk[ڳ)<m̴v 6oHLo;ԫ`ŠFq^|=z35lSQL;{(גT~ "VFB]T{D0UׄjEQ$l_̤PVVqzLrFiG T.e{RHZ!љ6șя'$r}J6B[?\ԍngDsq1#'""&3cMgdH8<!'/tFX}d4/8 N,5<Έ !{\mi`h:#,nMg3K3]=(HcG3NwK֔E).tFg M%eSx/4I<,Ŝ4{Bbt錱ՇF\3-Mg$!t;#BY/@5 Mg: KG+*YI*9(O+ɮjԂf|u"m.ϡՑ vFIi%U$$dZ*C@P IVPdSoLU$bP.8(aL$2AdULm؋"}EbssϜ-,ѝ4w9W*>i.JiHH.: Uy|Y_5K,3^*4wE0܉:y;iE;ͣιK=ּq QZ^**XP0$uVlꁧD4 j|!bvh# tgoP'lt6iإ": ";V(hrtrQ"1)leGĨZ`\T@H fEl{jCoB$>'P6A'$ڻCe0:-b߳9V'*fQ6liph/VGdL q; _Iq447o wfGPhbdʳes'39&Ը$|>w3ўjO΁Õ搬Wj`- fh!7~Z-1Wph{\!:{MAW -fIՀ\VLtyvF &|W nBAגQ˜h@LW%b40&u%-| )_0B nj˳4 \|kWmHD0wJkO1^kC!!0T1hHg+#jJ>68Tv x4}f"S^rO+6?0 Գ5lq=@#Yc~o7[)'/ŝ_-EOo t_?O`S|/řp.0*uBy@Å eDHؿח_H !)ueާi5I|2KiNØi`65(pc 9፵?y/O:?u]}S|ZDȄi×!3mzo Ze5#x@fZ._"s9M{_aJ-R8-,5euJY#z{ԋgO,/taQabf8I6ڧZ` I҇VG2Ph5is,ȡk֓T5"v.3 `pg' u9y*"BSh%xlz٭쵆;Y EEii uۊr E+8->W%|Bi9hHg -9*oH˴a;UEBjlڄ~(9W&P@O@kle1,:A-քfUqbXJw.e>[-N tpa#Pl=Q@sHH1* It: 'Abi1k7 P5TL,Lm= -(@=ceHmP"0~P}'$)VOU'I2&)1WP's ƒ'GI*|W*C,DV`rV?gC]l(ʼ~TgC9UgCًS7yVΆ2g23|gCz$"ydr u iV?ߖCϼjyTe#a^? Ehv9}P#e ς#_ü~ ]bguI^?sS0 z~F0Ie9w̻~Ty7T\tߵ}XV?<; f2~3lS9% y̳#a^?k (2sgހH=@^?/bN:E:9||T ]4. 2vf7&O<8D^?IEK;V*~:`~ZAw#gsduz>V^*>-"Y^?c[O@ 9'C:gƘ~Y$sG{=@^?~HK}^XV?~zW2Տtʙݼ~]Ul~Ny g~.}^y"ؕ)(у~#,b(Xbq^?u%YtIV~d%Ha,NG8~]KySº4Xtqć\ODEZ ]آj4IcLٽ).qYT+db4 eVY ľqO7XV.kg *LhN?/S^y"o8X^w+gq3puW߃g?NsW~2vۍ[+M2!4{<_w礿B(ku)Cs}zS },܉뙛X=DOS/_ t|h=6d7g}7_'.LS$]ljWsIto6E~gVٗ֩`9ߊU 5v(f_}(fg+SYr{rqLywxƿf?y3:+>3F8x=;nרV 8/GC  w~bzF܆`4h+Hd:~!;-l~i-i Iobkp>'5*6h5CV?GRA/v,?w_~fg$`Y؃Fy^/4A/޿>RSu7d3. > $m=– y_ B8{/%!n}/`݊do{,xakG!-K>.OAk.\:; n'9iW/[;eHp̊p5:\Y?c9Lv|Sn[{v/2Y82+/ R]8jJz[kcR P^`GVI?a/ `0X  ><;^R*eW,A;\hl= 񁓓T׋_DUAZɫTq' 2K 8pn,B9>P+e>r Uþi|(]iK^̓N**Oey* F5%$>Q-TzCx vx.N`j'7 [=D3;LC ]s: NB]0ibw+8l s +^QI)'i.@CJ>f%2+V(~[\Ln`t81'ObEj^q?~(gn9K>Bk~btX5K#>Tٳ P:y7e3I(dEQhHa+wPnTxƋ# s[T:)'pە %mܘ`)x!0-P闡_ i!dlL 6+N@j1Ur8KcVaSуKg&~𤼩>0R\+)떝Gfj^ qV<CH/MUץq7W=mU?nUT/w djSyT]NV˙sVs0ߩbz܃|zDULUZboUQ&sUQ&dk6SBHE; ^;~߹[_1~/+׽Wܱt.>+ endstream endobj 136 0 obj <>stream ^[-6u_Ϻ@} A.+I؇S9oʑt!NYx yyQl41v@[$,z:A(itдEC!&s;ŢfdY#YCE2t"pbȱpvY:YTQWCԁ90 ;@ׂ2A="Y~wGtB{.q9=^= =Ą}9OeqX_IypC7,Ep~ÜplIFIfe5R)ɅM6VM+v^_g@$Ғj=ڪ;'ʳD$\__Mz%qUY$uSw!:b|kp\GWš^CLptRV95)4*E + ~p*\% o嗼f e͠+$ vK_#0b#\V ]$}Tò,:\f 򀭽Ng19P[db(pBY8YTi;sW #7I ׸a ndA0lyDDo{."ΦN;^Ag.벙 d"%¢B} TcɁzPtkO3S)9EA `$Y Q.IO(d3B8~|f/Gqȫ0oxOOʰan aG@E_PCR'-I_iiu즅cQM+;jia],n]<;i(7G1ױ+yb|gll=*%*V.]/f10űQo|7q3(jwoBohn3Yw.*Z#l]բWG &UΛ<]]qq 4Uη ')XX* 0XL4Po=L\%h$NtGV5f$Qq(> ; ("]Enp #j<@ fh] Qp,tYh E0Ika.0$a5(Fc_TzP*Zz%Q+-Is 2liF% ܨİWw:[Ha$|..R .;g 푸1ԩU$ͬF !p;'j?P+º$~g>yu =QlcSI\Ј-VMOyW?xzRȃ+ E#zPt(6sYpv_mMOgJ6_ܰy5^auI/)Im+ ~=R2yj2376uc<>S~l1\}2VīXYDXV4,\H/=h=!jPhL&REG(|F?eUqz8i b)pNhVTS7ΊjvWMvϼi;S#i#ZUyz3L"=M!TB{hvGeOR-@*v mz}0pL{UDKJTiw8v ,u8Z'KF7!nm~zפ/¹&||BvfKS/tf'6{BB*vHʍĎ@qGJvVנ5ݦ4ݤ *J-GRhI=2`AkpAS [4*wҀċfMnM5t#<򛕑!e1Df5W'^!5(,wEp'D@F\FJ.I#*9C\8@.Ur/*9.aJ`1J%c (J^VL lrC 3p@9*/ 0,nd(WpA߼*.%ΦBh%ͦ8JP Y'+J 0cȐ?gCYw !Dڐ_8ٵѾp_Ekvهf| %菠}O9J7в'!(T$=xE1hˎj) rl[ң=lb fG,;ipwW{Ćs<_o߷GxG#x(JÌQF#stGp^Q+ ƿ|:nXW>vԀn(utuM! 1ueB Oݸπi.:bSѯs2ϣ˶sԅ;?=^,h̥Ң;f1/5^|q|MteD6rŻYVxï.$‹l" T{\\.g9]r|>S)tL6ˉ/xgYÉrыT" ;&qq\R'Χ2/?׻bF]K9&d4ͤ<_cBŝMGR {ڱO3V ڪ5sbA:x>UU]+ZLY0QͧfӝODTL||>a_ 1X_V~T@]HYh1fC RBb'0\&Xlf$l >%R,fȑrJ'>/IG2t& -B*K;r!H`pgS@eӉt*( H%t/ 8Ϧ҉H-&;r ;R9+Bppa]VXОpaa9&ߥͦAVTeAd|^_l<9X6@m>w'//z endstream endobj 126 0 obj <>stream %%BoundingBox: -1 -1 547 323 %%HiResBoundingBox: -1 -1 547 322.0005 %AI7_Thumbnail: 128 76 8 %%BeginData: 5428 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C457DA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA8 %7EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA87EA87DA8 %7EA87DA87EA87DA87EA87D7DFD7EFFA8A8FD7EFF7D7DFD7EFFA8A8FD7EFF %7E7DFD7EFFA8A8FD7EFF7D7DFD3EFFA8527DFD0AFFA8FD07FFA8FD2AFF84 %A8FD2EFFA8FFFF5284FD0AFFA8277D7DFFFFFFA8FD05FF52527DFD05FF52 %527DFD29FF7D7DFD2BFFA8FFA827A8FF7DFD07FFA8FFFFFF5252FD04FF52 %7DFD04FF527DA852A8FFFFFF277EFF527DFD28FFA8A8FD29FF845252A87D %27527D53A8FF527D27847D5252FFA827275227A8A827277DFFFFA852A8FF %527DFFFFA827FFFF537DFD28FF7D7DFD29FFF8A8FFFFA827A8FF27FFA827 %7DA8F87DFF527DFF527DFF5252FF527DFFFFFFA827FFFF7D52FFFFFF27A8 %FF5252FD28FFA8A8FD29FF7D287EFFFF27FFFF52A8FF27FFFF52A8FF7D7D %FF7D7DFF527DFF7D52FFFFFFA852FFFF527DFFFFFFA8527D277DFD28FF7E %7DFD2BFF277DAF27FFFF27FFA827A8FF27FFFF7D52FF527DFF5252FF527D %FD04FF27A8FF527DFD05FFA852A8FD28FFA8A8FD28FFAF7D7D527EFF277D %A827A8FF27FFFF27A8FF527DFF5252FF527DFF8427A8FFFFFF7E277D52FF %7D52FFA853527DFD29FF7D7DFD29FF7D7D7DFFFFA852A87DFFA87DFFFF7D %FFFFA87DFF7DA8FFA87EFFA87D7DFD04FF7E52FFFFA87DFFA87DA8FD2AFF %84A8FD7EFF7D7DFD7EFFA8A8FD7EFF7D7DFD7EFFA8A8FD7EFF7E7DFD7EFF %A8A8FD7EFF7D7DFD7EFF84A8FD7EFF7D7DFD7EFFA8A8FD7EFF7D7DFD7EFF %A8A8FD7EFF7E7DFD7EFFA8A8FD7EFF7D7DFD7EFF84A8FD7EFF7D7DFD7EFF %A8A8FD4CFF7DFD31FF7D7DFD4BFF5252527DA8FD2EFFA8A8FD4AFFA85352 %7D527D7DFD2DFF7E7DFD4BFFFD0752A8FD2BFFA8A8FD4AFFA87D5252527D %5252527DA8FD29FF7D7DFD4BFFFD085228527DFD28FF84A8FD26FFA8A87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87D7D5259527D5259527D525252A8FD26FF7D7DFD26FF7D27525252 %2E5252522E5252522E5252522E5252522E5252522E5252522E5252522EFD %0F5228A8FD25FFA8A8FD26FF7DFD26527D5252527D5252527D5252A8FD25 %FF7D7DFD26FFA8597D527D7D7D527D7D7D527D7D7D527D7D7D527D7D7D52 %7D7D7D527D7D7D527D7D7D537DFD0A5227527DFD26FFA8A8FD4AFFA97D52 %7D5259527D5252527DA8FD27FF7E7DFD4BFFFD0952A8FD29FFA8A8FD4AFF %A87D52525259527D7DFD2BFF7D7DFD4AFFA9FD05527DA8FD2CFF84A8FD4B %FF7D52527DFD2FFF7D7DFD4BFFA87DA8FD30FFA8A8FD7EFF7D7DFD7EFFA8 %A8FD7EFF7E7DFD7EFFA8A8FD7EFF7D7DFD7EFF84A8FD7EFF7D7DFD7EFFA8 %A8FD7EFF7D7DFD7EFFA8A8FD7EFF7E7DFD7EFFA8A8FD7EFF7D7DFD7EFF84 %A8FD7EFF7D7DFD7EFFA8A8FD7EFF7D7DFD31FFA8FD4CFFA8A8FD05FFA87D %FD0BFFA8FD0EFFA8FD04FFA8FD09FFA8FD09FFA8FD06FFA8A8FD06FFA8A8 %FD07FFA8FD09FF84FFFFA8FFFFA8FD0BFFA8FD08FFA8A8AFFD04FF7E7DFD %04FFA852A8527D7DA8A8A87DA8FF525252A8FF7DFFFFA87D597D7D7DA87D %A827A852FD04A87D7E7DA87D7DFFA87D7DA87D527D7DFFA8527D52FFA884 %A8FF5252FF7D7DA87DA8527DA87DA8A8A85352FD04A87D7DA87DFF527D7D %A852A8527DFF7EA87DA87D7DA87DFFA87D7DA8A8A8527D84A87D7D7DFD04 %FFA8A8FD04FFA87DFF7D52A853537DA87DFF527E537D52527DFF527D7DA8 %527D527D7D597D7DA8FF527DA87D847D7D7DA8AF527D7D7D527D7D7EA87D %7D7D525252A8FF5252A87D7D52A87D7D53527EFF527D7D7D527D7D52FD04 %7DFF7D52A87D7D527D7D7D527D52FF7D7D7DA87DFF27FD057DA8A8527D7D %7DFD04FF7D7DFD05FF527D7D7DA852527D527DFF7D52A87D7D52A8FFFD04 %7D53FD047D537D7DA8A87D537D537D7DA87DA8A8527DA87D7D597D7DFF53 %7D7D7D5259A8A87DA852597D7D527D7D7D527D7E52537E537D7D7D59A87D %7D52FF7D7D537D527D52FD057DFF7D7D7D52A8A8527DA87D7D527D525252 %7D7DFD04FF84A8FD06FFA8FD05FF7E52A8FD09FFA8FD0FFFA8FFA8FD0BFF %A8FD07FFA8FD04FFA87DFF7DA8FD04FFA8FD0BFFAFFD0BFFA9FD0DFFAFFD %0BFF7D7DFD0DFFA8FD70FFA87DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFAFFFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF7D7DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %%EndData endstream endobj 127 0 obj <>stream %AI12_CompressedDataxɑc 8"~1lk$ բMxwF\-1gƀYjZU_Ed_g7o>_ǧW>|^ݻ}hU?ODzVYWZ?<}?^LG'wOo_o>߼}ۧ?OJ{SY7_xqOqx9 /z4_e߿y럍uٯi./y{ט^ ð?Ow}xw?}ߥ?To_)7O_~cZ察<o~~S9߼t}q8}u7r,~~̋U_'w.mWӧرwc'SrOͷ12z܆Z|\wu+p>X~?/{oe+|߿4YY/?yz*+ {Ox7cKPWz87շO?ٺM/m/`__q^/mK{]c_>=}W^~?]ۧ^|,/{w^>z˿T_*|o/_~4?{:uWɷzT7}J>Ŧouަu:}W/?u?u?u?ĺG\W\WVz9}믟>|S>xw-{zm~~o_}#_-y߾+G7/_?~zY䛧o^}3۽xӛ?yx޽WQm!7on+޿eճ7x*zͫ^~gVxUw%|_>wwe}c|]JH<{[}˛z2nF޿)77r}>k囷H89}R)任z yw~myono_} eOD^ޤ&}S[C|zh~Q/b_ԕ~UWUWu5~w;S}eںo^hW{;DҵG__w>*\We=8A+vrL=? Կy|7Wߨ!ߌۨ>~=rWJa{J_ %L) W1ZG, ջ7o~ߗ~낉e xeW<}\__*XoOq/}zu=ZrO2Jo?e[Wz*꯿>?|I ~K,Tw%Lux](?պ}JecUOO?߾+ۏ>|x)> }=I+\SŽKYߡ/ywU/o_ zS}/x}|j{f=wߴ֘j~my*!7??|$6}xO>|>dԔK|ڵB7xn7ZJv???>3W ν>vi)GR]߾O/krv?CzM x<<Ώ8<<><<=0=y\zx?==ܝw~ݭw|7ݍwy{zηx;\<<ܜ7~ݬ7|3݌7x>y{ޜgɘs;s9s:s8;ncwgbNxǘuhTzor^9g{i5{girV-]K=u#ãuGerVˍSK-ەt_='` ~dgMu͸ ^y6eyR:Պ6Y<bh+wDNyF㪵#qAt?zg\.ts_Xxq1;9\Wg,CX9 WN[xCf@{tMjQ q IP<@!DQBr  1 Qџ9|ٵlZV_@k#:/JV[_n|Rlx߀Qg=:ї_}]:wﰧw;kw.\+ujE_У//λwwûu{Z/K9+Q+ * ΅;gíqVN\O[?:U190+ v-C?˷'츻LP{HzuƲ|2r5L#s{v&غu3Ͱi|L %.*'__.Ⱦ{W3^}]9㟙5^=ߗ9~9wb>^ޕ3>YdW)l$ʸSqu#r,]Xջ Ga݃xw[p ow<>Y=v\GN>0ƭGZ?pp{\Vͤ^:uAr v-~N݊0h#u(\x[\#zq"=*ߺ~P¦oħ7h]*YLHcY W!<%r4QMW+8w'?^z=8m?+6vW_}/)7hԤ'/Z*r/O)iORտտ WKOQ8*un{_l<51׾y˶Yy٦ub;5 M:۔}&kAUV[e9C}ʥ1]mfƺY^*ƺ}}KXպϓl}.eeyڬu \um8CiYՃvVeg@Xy]vO9sϳl; |.λǝM8J,sҢxmy}q|rE}RG(mqUsﶔmӼ!.ZTY^%Ŀlay1-v:5E >3۔(ab(Q3-u9u_dN~xѾKP& X8&?Rv/V׶)Az>ʥҋ>/JDu9ϽPuqmaP{hchKiDuJ@]sZSbSNg>V^I& \Ѭ,̜NQ{(KX1y۔/>:v6þy7:_c p¿yNSw裴Z^m+_DdQIٴ!(MD ̫ƵMϼ<@+׶y,$tV7A:+S#])%HguSޠeҕc[-~+ŭWVC`\;y - ƕls\[g9Jُ +mrn;r\{@nxJ4rb(Wqt)g6fYiP׵FZN9+Q7:>rV𠜿u%rV+Lru)oS;SΎ9nH=@9;v(\9K}9 g-ig [ r,lLƹ9+n{.lN09/g9\s [ê!i Yy 7WkW+_&K\WiժrZ]j_&%IN\}}U)qrN\|Z]N\Wd}᜸AKk)?K\O\KK\YZRZJ] R%%,q]>q-.q-g2k)w2>O\K]N\K1'VL\.'VN2>O\K]Z9'VL\.'iιy⺌}ץ&%ՎcN\tej(%'.Wo)qrN\9_&'RRj圸zO\*'^NRjŜr:}jզC9qe:]j}{M<􉫗/WˉsjL\ ZJ\y:}Z]:yʉk)uk)?K\K]rĵTuk)w~.q-.q-gkˉt/WˉS:/Wˉk)w/W&'i:+^&'NJ\|z]J\WzȜLuuEjm3'',q6WgKJ\|z]J\ߤY'ƚz9%VR:WʉsjĵusZkW+ʗ49{5'^WJsjuI/Wf9qR~.q-.qgtk)ĵ%K\O\KYZĵĵ%K\KK\y:m}:m]ZWˉs:mWˉk)w/WˉkڇQΊuJ\׺Mz]J\mRjG2q#W;9q-g2qiWox7ΔZ9'֠/iW)qEu)qicO\V)qrJ\u\'VW_#%VL\K]Z9'|ZUN\KK\u\6ɉO\*%VΉ/Wˉsj2q/W?h)q-gk)w=K\KUJ\KK\yZĵĵ/R%%,q>q-.q-gkˉk)Պ)qkW+ʗ58gu-o$ ힷAF֩#56r{ J#@b-PwZzl׵nx.s-.s/3q3q3R~CcZ2sz9e.nuitA\K]]UpgاnЁ7xzAY/s gƝՍP,AĆdf~ƖZ2^d̦oֲٓٱdVA svcv֋Tdvlcv̮kh1;KDk{cvVz1;Kfky2;1;?dv,6f<dvdv\%\vTqȴN{Q0b.5ܳfё"::Of-7x6[~J(+˰.wVijl08xN[3B8xR[#4Ym E7?ݿ[~O?/U?~HL/z*{W_JӺ7_7>_ﯘ=6{ObF Sƭ{^ IZU !I6 vjH!IĞG/$k;EHSgC^$ViHv1$i*SnHҊC4$ud4] I:ڐ}q; Cv!$IS$!IHC>C/$1$9; #|5\IZ]t0!IgŐc _wyHʗCV$}SV[j<$Y$.Q& IĸC3 I}!I; v7!IoiHyH吤4$eLsC^77|'Թ!IUrr!tKFb&|-:R[y?|ݖeM!yi3cEBiR*:{L K7-$/|pI$%GӰm̷S}|[Dk̏z|.Hq: g]B\)qhtܡآ~F')*߆*.?Ƴ;Y,Ocj%,?]ZXz|5Q4G>vk|[tdKA]A`m8ˠ)Wcu޷o5+n!yM_(B%hCr"$4ʵ)$/EHNSxEbr}P8.sy\.&n}൴:&-&?^0k I1%!.U|MxGxu@IR9?hH/_2?? cJR6\f+{hͦEJGƶנҚIm6Z7i0h3V˳LRmܦqʵJoo#6zHn:@;G$mጏ7KvH"is-{$m|7qj5﨑umJۗzj$"s%JuX.#ڤR{Q56hSǺGҦcB$]H|G$]zFҶx$]ʅ}$]^7}[(yb dhFV%Bi;w6B*- -s?J6J[_Gikb&~pCYbikKlSBikPz{g/CRCҥ\.+&&Vf㱴bci>mO7n".eCiG=ޗQq.8jjqԺ4}6ZV7썥F Rg ۵WKֹԄma:,`jlL CZ`ZBEFԄ }nLގ}/ij}{Mp:\-AԎDP9P-5P꾶{$wLI] b/cR#@ Hݚ%@j4R+W9^Jq;]Oc4 g}lF-0F}z,WmS`f.E0u[{;]:F=Fa.AR[ Pt(:aB *: jq!:dQ+VZs{%V?TP:; u5aj>/s[r]!~δ0S7sPxsoBr$^o.ro^;yհ0N›x} xr}un~ر4أLu=mfhHlB R6:Vh[m&:L=l9@؊pn$9[)LRU.;{͌d\^:Yrn^$^nVc͜y>oV!7~p3kbGυ596gWm70Û[]{9lV69߬u-y[o8k荦5[y=;Y_3^ \K$N8/o8gtt?1D8ED8 5Ϊ<<ᬼ\Zu3!{'qwr+q0o F9kLG-L!b/WM^rV{袜+QUr/kP9?fsis twtHvmM"t.n:1Ǹw3S[Aμ^VtfjsiL>58Ti˺LӞL.^j3M[Τct yM"ݢn!5{oΔaXtV)@4uN]Cs#@ԼAe)WKf9tnSG:; zt~:#Hg-d^׎t֒֊%'sE:oyޑ[V/O-au^J2u4tvJ'ySKYcn}]SJ:[7tcX U-eYZZzϹr e~2+s@vepҹu> y8n3Vo5[6csi)l)58,gYgMϠ:j:E=|cY3crS)gG(7O~9L0g\GNx;s[{`n9ɜ3xPg+e97[)>&ͤ s3#,L#ιM]Opp|8gV:9+Ϻ ɽb✕k [%X3*eV>1( t9(9秳(q\֐ʤ9x AΆ9)Pcx֚/7Tzbr sVrܨFN`n 9z6Ι]+F%=&eM8ge+\bΌlSe*4@g^&i:e2*y:/}mkuA^x Y_sW|nr5 7ǖNu*tδWW_%@730.SZIg\['ݤtёTμh4&Й9:!uޖsbOG4ZbvpйqYl_8:/]UKK\[gځ\Ζ鬔rY Y- }i yÛRnt{] ƍC!  emu#n$HaF1$96[ejrVu Y0*AV^hKlVVq]|nU !gq*~>) gMrҦV7Uyu7NJy~Dp9X6]5YyOsf9~ghU9/ϦM]8#Uh3o<լm fVJpݞ ԡl:zCQg4Pg}rkin3g:+Q:1i݇@ΨsUufdO{[wyu~c C6nmtΔcoV!ʹ̳Wnl^2Og͝Ll±hYQg3|# }jy0Q7hROF]lr6 FEnt:u3\|nyǖ<3̷>ZjN>uk:孱X3{[,Vi\ݢ[jnys[GWG:{dV;']iIzҁmB5Vx5LOt=5;V\Agdvq:puԬ tA%+uC;Jz~\ t@:h`O:Hf kL@v#y $ey2 $/dgsyn7_CzA2꼶i&@>tL}M:q:q:HAj=Y !!-B*B*SY d ١!;t[LCvkҍؽI; !݈cIQFHcvBbNBHI$D*+!$< !]'!$<!B~!d\ڸ] C=kS)V + rBGL ^d_&@ݘ&i[v&{LwaĦʈ# hG^3Z#' XpFl6u}ʈaH);؈͙$[h ed_S2br$WeWF֥&،c?CSϳ&u&‹7@"~ƌJRRgC8;V^ ƈݟ1ڴ>&Y-xXm9bΈ?j%g^2񣴇2bq +#v+#v2(#>mCMGa=|\0WFˬveUY[ߏje[s9\Y'0FI}M3s3W覌Xߴƕ991bj-&!1Rf1b{/1bs3 <αԟApeĦtS)k},>_peĦ+z .e$JiGC@=a6n cVe1b/7kNUucבm3hϠt(3(3(4ҡTHTHTHRy#Ry#Ry#FU Jx*m$x*m$x*m㩴ੴFFFF&k$u5PrDMDM8䍀MH&onLMވhUmnK<(`I`I0$}ӭj#tHF&m= RHF&mD(dMHF&mnF@VLMڈHM(݀:(5ҡZ#ARi#ARi#I6 6׻6ҁT 5 HQY#QY#QY#Eɔrx#Pq$SqUudq# w$!uġ8#q# uġdġ8'u$uIddo# s$ sa7̑790G2pG Ʉpm'w$wDCqRG2PG CɄCp# u$3uƥ}8PG2PG89'uġ8ԑ81sada899PGHCI->2PGD9#@s$Ssa@9̑Kʡd@9(<)<GHt# t#}Сdҡ@:H>I>G HFCG2Gɴ=GHvG2G`ɬu#$DCv#vGCɰCv#}$}إ}8G2G;`=a>GHh=G2GɴvGHCv#v#ɴv#{v#v#!d!@;hCiCpHI C!v($v($ڡdڡ@;hBiBPHD; L; h'ada@; v2Hv h'$h7+CNININI;9$N IN I;)$A;)$A1WtBkBN A#oiBBscX'ada: XAYAPH I C!v($v($ AYA0H`3I!X'$X7WI"P'$P'$P'C<@<@<:i$:i$:i$ꤑFFґntNINIG:i$A:i$n{ " U#, (f"ɤ"tX$$ᑀ:<:<XGH2H:4XFYFH`If C#uh$uh$.Y'$NHEH2H  C#ɬC#ddtENI:Y$:i$:i$ꤑꤑꤑtFddtEE#WXFYGH"I" C%v$v$$ء;T`Ja'֡;T ;T`JPI2PI*`IaI0I&I& $v$v2I& $ɰ%v$$;\ ;\ءdI%u$N*IFC%u$u$.QJYJ"a;L ;T`JPI2PI;LhIiId;L ;L`'֡d֡:TXJY'D$u$u$a\$ᒀ*d!:t@'$s9|9$`̡d̡9t8N9NI:I: C'I2I6 &ɜ&sI6I6 &s$s$pd's$`$cDC's$s$pΡdС:t@NAN>t$t$6 &ɠC't$$D&t$t$ada@:tPNQNI@:IF:XMI2I`6 &d:If> 'u%v%dᔀ;pSp'ܡ;;pRPJ2PJJ C)ɸC)w(%FIF (w%w%NF (ɸ(w%;% sŝwrJwrJwCyS樂樂tRRc N:HNJINJI;)%ʻtRQ#miRRRNJhQ0J2d;`QaQPJJIJ C)v(%v(%F (ɰQ0J`F%B)ɰ څSB*ɼ V+ W+I VB+C+|J2B+~@?LJ_h%_X%X%*xOVI*x/>Y%]'$jD^+kWiHktimJ"WCxJ!~6Eh9%qftyKsϐJ|vXzH՟%6@?3)%LA)mα=^{j ZgS'D)%>h[X FJe b}:+%viWJ|bgnI %G{WJ|?aNإ~l3mltYӝ@?kG4Yx$y+%>)Y#9%6N;%V(WJlۏY*XRbhI<[{ +%>gB)T3eM=a)J䩿 0è0*$0*èQ %Q %Q %Ge*K%d' ' 'X*$X*$`*||JJ)BI)>`NMI2MIwM'$$dR$KmI2II |$Rt Rd@*J'E'i--I2FI(: E'E'$`T:I(: '$$(:I`T:IѪEEQFѪDDtNO>Ift`t`tKܐ J'V$nM &p&o$oI2 xC&x&ސId7\KpI2pI. xKK$mkI@*IV$B*RI25:A* t[dRIۺ5sPnm 5lsj͂dRI.&$ @7TL74JPI2PI[wxтo$ dI%o$ $mJV$mK%V$mJJ%pTJ%ɀ[@U* [d­RI Z]%I[5 ­RI ܪ[C%ɄC%0I &I&& $q$q$@!dar$@$Q@9G2GCɜCs#p}$s}Ꮘs#s#p}ΡdΡ~98>9>>vaNCr#r#P}ʡdΡ9#9#䏀9x 椏t>>>aNH`NH`NH9#19#sGsGscG2G9@=A=GHCt#t#CI;pGHt#t#w!d!:@qt#u$uС:ԑ :@;pG2pGD:#u$uIs#s#puΡdIs#`w$au̡9ԑK̡d̡s#`#r#@sICq#0q$3N8GF`Ɍqx#0o$3o8đ88GF8i# m$#mơ886F2㤍866F886F2P>CɐCriF2FCɐCrh#@m$Cm9 FHCsh#sh#`m̡d̡98786F%F2F985I5F HBCuH#uF:P4P3pF@HFu8#u8#g!d!:P4P3"Iu(#u(#e$P'eC@И쨓2ҡNHNHnh7*uRFurF`uRFuRFuRF:II IX'e$XWcQ1HnlJNHNHNHG:)#gdPFHCt(#t(#eСdС:@3@'eΡ9K΅2AʈH c$.` c$.x a$/1/H _/ _d/}!d!D'a$< #9Γ/BV="]']$٪D.+]e.tHetlE".CvE!;"1d'_!;"ݐtSbÈtnNGI;"݈tkث1i_-cvEbNH7f']$줋ĘtnNHE"ʓ/EyED']$].B ]E2C"0|E`"P0tK onuHQ"f [D/^_%[ulH)d$eu--bf u}"}8-bԟ.bu.2Zo,|+u"|C|,E\Ed7S\om"5i ]nm Cj7?1-s"V)u1[ˆնi#V/HV'Å+=!aH/bU0/b,o$oUl⾈%< lu#tR}Ѧ)G8/2֓6P}='adї #c{4.\E҃|Q/h\T_|C44E:0|1 cU o#ι6aĎ?.0-FEQlQlaY"dbQl8-9-LRtR"R"R"KKS"LLLt0.0.LE2LE)4E4E.RR|P/JE2JE@|H/H.IR| R|@/HE2H=|8*_$c4|a4|a4FFFFFFEEEEI _D a"dJEE(H| /DE2DE(/2vXF`( EH#\""\"pa$…-R 'YD| Y$ [Dx [Dx [$-l-t ]$ _ዀ7|7|/"ItCnEt6" ]dዀ6І0ц0FHtn"n"-~Sx/.E|L7|/E2p=x| _D| _D| a$---7|-|-|ķEķEķEBBI| a.|.|EDEDEEEBBB4-""܂.R `$-"p  $-"܂-"-" r r H"_-E"_$Sn/bj^"]$cn."pn.AHttHHɤ[/薽Al4v[g=b.00*$-E"_-E2"pn/EEɤ/EHt"ttt!$Ѕ0"Ѕ0"Ѕ0@HHH"]""݂/"҅/HHˆH $-#t|nI[E_d }" t @t IcUn"4҅-"҅.RIH"]"t!t!$҅-"҅-"҅-HHHH"t"t"_DCɤCt"]$]It"t"a$H'a#Ǫ᠓0I'_$H7+/ҁNHNHNHtt|tEtEtE: H/E H&CtcKX:t""s"p_D _$q.|q.q.ĹF*I _D _dNI _D _DI aD aD aH."adas"`Y$c[a9l9l0.E2//QNHPN.QNHPNHPnG:䠜t\E: M`F9L9(0FEɜs"p_$q]Ρ9|9|8/E2p=ɜ _D _DCICBBi _D _D _$q.|q_dዀ9x F2F9|0/1/EHs"s#pa΍ _EB [$.l EEI [D ]D ]$Nt"t"_DCɠCt"]$]С:tL:|H0F2$:@0@/EHt" t"]ds"pNHs"sss!$΅0"Ѕ0"Ѕ0@@@H]"]""]"tወt#]# t!Tወs$΅/"΅/"΅/8/"̅/"̅/0ˆ0ˆ0HEB- H\"Hb\"b\"b\"q"B\"B\" q"0_d8|1]$3]ơ8t8t.E2E`00F`Hbq"qE@ICq" _$#_8| 9\ /E2BI aD aD aA.|A.|A.|EEEKFDFB _D _$a.|a.|a.|EĹEĹEBBB8H\"\"sa$҅-RIHHB]"B]"B]" u"B]"B]" u"_dዀ:|]$]ԡ:t:tP.E2E@P0Q0FuF2ꆀrE|uEuEuCQ1&뤋t///ұNGNHNH:|X/$d!: #nlپ15|H/I/"҅/"҅/H/"Ѕ0"Ѕ0@H]"]" ttt$Ѕ/"Ѕ/"Ѕ/@0"΅0"΅0q" t.RQlĺfT5YDkH]EĻfxIktA"z"P/|H^"/|]$/t ]$]$<"I<"%y'a $D2[e%\"TVHV_$2Y"1d'_$I!;"1d'_/Cv5;"݈\/#vE;|FECCv#!0f0Ea_$ዐ(_(a(a$/ 拈~Ik|拈ወIlˆ ؄Q #?:;_.bfe_} _Fm!ˆ[z}Մ?-Yv2F]:KO?3+3}Xi[%rx81=˰K #STo027mS|Ҫ0b֌ KkjKq) 5U/P|e#C0!_D5EӠF Yc#CMiit#CTP` 6ysoƈuumƈuz<vˆH:&17t!N\6{֌^aLu ۸12ծƈj&m#~V.{ۇc=}|dϩ #xƯIlbƈu1bKaX???@ iD@ iDD i$5J#iH# aaa$5Rq4"4hֈh5"5`ֈ`ֈ`HiX#)ֈX5P5JcdbH#i$kbRY#X#")$E(EH#RI#J4$5$5ґZ#RY#RY#HeRI#*t444rQL9(7G2G\5G`Hf90GG@8HB\#B\#BH"\#"HH8H[#[#"\#papapa$…9R 89t$t$2 C&ɠ&t$$DC&t$t$!d!@:lPMQMI@6IF6XLI2I`2 C&d:If> 'u%v%ada;pQp'!;JJJB(B((I D .JJK(I DC(B(I D !daqQqQ"!ݻa;xQyQ0JFIF (w%w2Jwmw(p'U$h7FhA;%A;%dv%$hB C(ɰC(v%$a; ;!dI(u%ud؅S)w!dޅT*xadU*za$TB*|!dT"5DkRIb_J&~a$5DkVI_JC*!C*!C*R ^[ JrTBb+$D#*!*ieH% !!<J*CxX% )a$a0UVIU#xmuOVI7'1 ľl9a:;`@Ǥ)-F Ď6q΃?PBI){3C(ޤp>m=]}k [{4M\`Iͭ⿷pXǸhmI:5X\:D>dXԗT ObG$ft=MI6t)= C- B'gQ$*ksIlkM$zeuAȢ)t[eHllxIP$P$P$BBBd& & &*V$8*lllIII:& & J'@*$@*LI""@RDLRDH" E$E$$`$c$$$PT& H!HDI("I(GCd⑀дPH2BH@( E#E#h$ TI&( #x$x$B(I TIЪAAtITITIPi$1n"VV$SISIS%?H2H tC#tC#nU#mh$mH@ h"hC#ڰH`,6,ІEڰH2ڰH@ hEɆEd6i$kH XC#zDXC k$k$` !d!@6Ȇ@Ɇ@0H@ L6 ȆA"I dC l$ $ Ꮐ66ؖQHflCm#mG@hClCm# $ DlCm#m# }d@7>>7D7>G.>>GHtCo#o#{adp#{${a@8L8G2G@CɐCr#P}dAq!d!9 'q$3q!8đ890G20G 8)'q!9đ9 7F2F\ڇrhrh#@m$Cmʡ@9L9(7F2FD9(6)6复9 9 6F2FICrh#Pmrh#rh#Pmʡdʡ@9(6(5FHڈ(5F2FɔrX#Pk$Ska@9L96 ȡp#HPNHG!.lUsI('a$(7+0ANH@NH@NH9#9#@NH9 #A9 #A9 #rr=rErE: ʵ}('[$(']$(7%(']$(']$(H8"8"0_$3_DCq"q"0]ȡdȡ9t .!.E|8t.E1NH8"⤋t...'[$'[$'[Ct'[$'[Cl@\EpE:  '[$'[$7X&[.)F: >q4Q!8D8D(E2E`Ɍq"bHfCq"q80Od`qD CɄCph"M$3M 'Ot&&&!NH NH NH8i"8y"8y"qDqDqc&i"q47Ir1b@n&&i"@n& 7r, 7ɐr, 7ɐ%&Y"@n%!7r, 7ɐd9&i"r4XWL!"MD$A$SnZ;|$dMDܴLD2& "@n!0D20D !'A!8 " q ?dᇀC2CzCɐCr!@=$C=MC$?$Sn"MUr Iz&!q7Iq̸! n9199;&!CɈCq! !p!=II|o! ;$MzްC2ްCv||o! ;$ ;a77C $7Đ7C2Cb|C |0CfHfx C2Cb|C Ipx!/$/}ԇBZHZC ph!ph!/dph!-$-¡88B2B`^ IC qh!0-qh!qh!0-ơdʡ@9(0BVHƜa+ada901BVHV sh!sh!`-̡L"Is!s!`!$0'!Ü,aNBHpNFHpns2Bs2BsBsBsB2rtkУ?.fOmW]I{ƀ$ < ehAmm Z>amz`䬹[' B]d2? )sʵ?I*'$UN8K儃r j|NxRR<ACԁ u!hxH:>u!EC:ipH:ilZR8ACu!htH::ZAHCu!hpH:NpRRBI"Һ-`u Z'B$n[ZKDԉI!:")u"DRꄈNHj:!"/ߑZ'F$NKĈZ'JuDRDֵܵ\'Z $ZK ADtP"(HU:()R$RHAD u@"H tP"(J%QT#JB'D%tBD:")t"D^B'D$NH  I#B'F%tbDRI#91"sbD9!"/":'D$ueZS焈"9q"s{jX(RuPAE tp"HU:8NJ't"UEP:@P*J)ATA )X*tbE9XtV:*΁TA鄊 y P:+:"P:"/*B'T$NK脊 I*R:"tbERZnҁA E$u"UE$up"HH:@PR(A u"UDt"HH:HRDR(RP+m# o"HR(RZAE AE:p"u"HR-RZAEA u"HH:"(J'\ B/TA HU:b)R0 u#UF:`jZ'bR1"0TAFP:tF:` B1A|:"t".p*s"9hdNHU9pT\*'\AEr|HU9xT^D*.RU\AE5"\.5"U嚘T(X|Fȵ/W&hkF51#\351#UZ0#\351#U䚘DA["r OT5A#U暈dA暨*sM2mH暸*sM2:O7ؕ&lk#Oz]暰*sM2ׄ sMH&lk(jF5q#ҹ&lkF5a#]65a#U蚰 A隰tMJčt=rU:tP#(ԈhjЈfb4 v@#U vP#H;jb5AHF v@#H;hb9 A@G؁ v#)vBG؉Iۖ,؉yȑT;#v:H9j'r$NK턎 I:R;qvbGRĎNHmvANH]#u-7-Wֵ< <:#hZ7NI7 BR }!A@Ho $IU8n BR!A@HH!%BR.P$HpIKD . pIH!%BR$.i\"$ҸDH%BA"Kh\$Ҹ$HqI|иDH%C"KDIѸHqIH")*d"I!A@H9s $ :BRu!A`HH@HP:"u$h ZARN RAAT A H:$U@HP:* JBҁT!A@H:uBH:JRBԁT!AV!u $U@H:H]"$ҺDHuK$. i]$E %A"Kh]$:I]"$E!%B"KH]"$!uIH ^$Y$Һ$HuI|кDH%C"KDZIѺHuIH")Z"I!A@H:u $h ZBR!A`HH@H:u$hJ ZAZ'u"HR IA:!$u, %uBHRꄐ !yI:!$)uBH^R'$NIj HBZ'uBHR i !IBZr˒ZBցuT!AH )J. )]$E %B"KH]"$DH$uK$. IȺ&A"KҁT!A: *t@$ BEREB'd :!$)tBH^B'$.9!$/B:'$uN KĐsBHR焐TA:'$.Ή IѰ9s$ BAR!A@Hҁt $(IU:!JBҁt $U?P:* JBRN :B΁KD:t.tA t$U H:  BBЁT!A@H:*t $:* JAҵ%.tɐH!%DR.!I]R$H%E""AHR@H:J!RBԁ u0$U`H$u+tHI: ZAAu$UD u$HI:!RBԁ u $U@H:JBR!A@HЁ t:t $H RBR.I]"$DH%BR. uIH H$uIKDRB"K(]"$RDHt! KDB"JB. BIdH$tɐHKD2d\R$R9(T$UN "BȁT!A刷C@Hʁr $ IU9 *BRT A HAr"H9*r$ *ARU!A@H !A@H9*r $ "BRE!A@H́ s $I9dn2BRe!A@H%B"KD2IDHB %ARd. \$ҹ$H%A%p."tH!%BR.P$HtIKDJ. JIQdHtɐH")Z.)i]R$E"A vP$)vBH; bB؁T!A@H;*v0$; bAAT AD v$U H;;$/Bb;!$/Bj'$nȢT;!$vBH^j'$NI HBj'vBHR ] $/BbIj]Kj ZBցT! KDZI:I]$$H%A"KDRIDH$uH!)RIH]$$HAH %AABRn1$ҺŐHDRnA$EHERoQ$RHHR!A!A!B%B%BR//j_2$DHPDHAZOIDz"HrڦŞbOIni 赣 $7BHrC+䵡 $BHu'B;!$Br !I]los';!$B !I]!ϝNINI݁!wBR}w $B҃ +=Vz$ H%A"[o!$EB"LD " ! LD" .D:E ĮA@q (٭ve@n#ʏۊXXUI Ga-dׇ_Dbs\w$?0xU7Gب}DUI5z'QUeU할*m6~L6[$.=2ۢB$/*\W"%vs(LgJlD>XfՊ+Έ%HfS/!ڕZaIR$퍕<Y}#A{[I{=ԣNJk,= 'K+gBKoQvm6mgy(ʓ<}'y&J8`f6l $_/U$樘yot305AuNXOdm'~;:^4}k"fī%,侓-]v!C'j?s}A%g%=]Ji%v0rEsDI75eݳ(N,`K,7U?k#>S[f<|W\_nS%PR| By W JAI+奾PRضMH0LS L)*2A)eSˤh0L`q(K5X(`((/ FْCID" "$J*0(KaQRQRQFIGy 0J=0dLS"كRATA {P*J=@d?= Z'E։d/kHIu"Z',vd/kHUR U^'X%UZz*[*KDdocMTO[,R%{TTOR=*oT'EOQ٣ Gѓ*{,A(z"٣I=j {لd'U {UR["{VR9=+)z"V=*z+ REbETXAVP=z+ 'b A$z"V^'b%E/<+/ XI<+yVR4OJj>HGٓy=ATɣI<ʞ y=A{R$'H%yVޒ'leIy%OʖJJJ<<<A\Iу\I]yJ^?e"zYDO$zY^.e,RD/˟HV!z?)'vE䁮TɃ]A`W<ؕ*z+<+/'M<+hؕ<+/'v%5OKĮ ^I=+)zWRT^AWP=z+R=Tv T_AWPRT (" (ET/+HR"_IՃ_yKK KXWRW_I`IՃ`yK KKQ=T= T=(ꁱe)^B)G)^BQ h^1e)мR4/+HVyY TՃbƂꁱz`,UXP=8d 'Ճc"Ƃ聱TcAX=0*zX<84j ǂ|<8yp,h KU<8) '  ƂTɂRJѻ,"b(,R/H/,b(-K(Q R> |HGq)>T> —MHTt/ؖƎȞ=-){[^'كnA[nA[P=薪z-R=Tp ܂TnA[P=薪z[=D%RU/drd/ᖪ{L_9 P-Um9ڗl lKU[?[t* )RU!E* 4%(sઐ")KW`-ɷe-PkKc(߲qk+ emxŸ ew,/(OKLXY*z(O?N>JT'旭J)Q(((T'sIrI/ OKzDO'%\r'撫?a.RuE: BKU¤\B\(901*J!\:BKUD\D\D\6a߰- owc/?(__>;*;Yep>kZ/`6/f1___m_e^mVljD(}[/I{f/ ؛\PJ_9t7/Y(뿳f0Vh-lw g E  x76ow67m{ۣ~NӗO{/@[) sZbߣ*N8=\<*9p//qNzF;Y?g<[ly/t!9~GC+tq|g_Nj4յ5qCNCm>/ߪ!͓b)3>|ƶ46DSkbmf=v~zOw8Uhћ#vpq{Z@ӵE*vron qv#l@#ǿ2B.j= _.ôa,yj=_sӨϊ4S[xSY7?]?p.3'=auO-:3S>-^}Fg}-g-F7Vl_Gy-ƕ>#U3s>K.31gƕ}+rӞ[ lXf~=^f#0GeN$h[Gvh3֨?b>i9Fs {#A+s{"͎n~TuM}5Vn|y_; W"9nڟ>hm~x@LtNj8 wfz}wb9 vYH\w)dG{J}hط2Fn#{' <߮rxZ͈->%N.>l}d"DqsySqmZ}ttU]?~\eS]X<_#!w۷nsGv٢mG&sx17[όv3Hzʠl=s͗3&?6_x*6[LgugW܋n;Vu/h@au/h‡+Pxum)nڝ>~O%*,!}FOw]mBzޫldnKWH65>sK$OK^kIoF^ǿ?ώ>/_~G/v?o/~/ۯ~^ϷSԮ6zÔ1xel'vC#cF?מ=OM;Qusd&_7ެK=z ]7:!IeBaGrժ+s=&dzQGwb7Ÿ7G=5YRpWr2Ɍӂ 2,ݹ14˸11##<fmד.8 2l'iK4j%omvkԴwZ,y3ƵO cpcSs5p#up?udxi=D2ՅLOJezCfgW斎1cn>to5gӫ}ə 8w>-exO;ܼrl\j.|!ffmX2+:;:{ok{251#]L怋lwϳ{ƽe+aGfˇZoހϼtx7 /1Q.m Ec{V.a>8CƔ͵zgc*3|v',?w6Ļym"2m13Y4f@k= ʹjO><]˨5̸^uаo~1n>4wkLa;;-L-Kf9}|c{˹>r v0_viuVl@TtfD.Ɲoםig{15h|_zo![*}ʱ;ʢBgZW'Sv1z@_|׍͔5Zn~*+/سZZOh uNjGb0:FOG8Ӭ0c2s3!o1;h МGL?adhdn?E5E/<Ʃ[6{u ʌire,[9CtNza %]g1t?Ԁ{Bû[$ڈWs}6n27F@ 3'&!6n!7I8uO,p+ǥ"QܿkRrוlwܘg܁P[Q`4;qy9WE^G6-l1$2}wT+}1賙}TOmcmD7=3hUGq[t~0~~ijx`?θ޽O̡콡Qe ą'vN{|lfnf D-䖞Ń߁#w4N1oWbk6PSSt{5Y=yg(/ LѼ]cak`Xftyir6 c) x2N Y?J }bf},c <>H\ͷܘP ooߑCQp+hl}O(F߱GN=e>z[~U3!Uat+fl˧kIn~6,37CC>[{tpY~d>"#ΔNQqga,77Yb_73_tx䛗'3.ek7g0$['gϵwXw|vO~!y<_NjƿQc78,}ex=|ϒvשϖ<[h OY/ܮ~ǜ.fzak 4﫳ϥ-?e籇gwVťE|YƞUӕWŐ7ͯlŤݯUqނ>?O'q=FHX\twi͹q']dCۺ%hu#7s-6E\k}G9|kZ 13ޱ\3JزힿxGfw>y ~Oƌy:,Wm5OWꆟF3mTluɿEϻ/|G}W["zV5<޿:]9{]9ݢW6sQɳa6m>cƗ3v$+=|lϟql_BKY4|ڛ;l)[WO-eë+[yӯp,*Gסb)DHh$f2[Pָ2Im =R`r1"w9':˞+~OlrM';}ڞUKUOWYc|wl/VN8(»nyK/D&,n>oK=^OHaI/ /dзi;N {Od^>s^:]+!Ao4;,=搫d&E㈡'fO5w}-hwɬsgd6DW{[;k8Kk}I?Ԁ,mslw|jnv޷J:մqk~|?'}-tH?I̾w=~(/Wު'$+4ka,({xƭG\xp{z[#7BvߘBދ۸4BmfG;c[HP뮼7p+c"A@4}!3X>*Ξ]9|YTC\18N_hMkn̴o}$nڣ9v7ȧcGLqLEϯ? ?{ӁC/5|'YN~~zajk=}h}Z̠=@O7GeF%&O?3 4eiz|"I өwOp|r䳩O''o;}>(z0z|^G;]ǼC3hco xȋ6Ig~}.Ue/OlzgNJ0 *vSG!0uK9e}߬xf=C|WЭ+2@l[:ȲEts-fƫ_{1P|S~w`ҫ#vd`ZuN]JLϚ$뗑mxfyMLwn`Tl4f6|n>S.=^ w6k#XmGWxtXoE1[!=^>7ی:JL9Ni# mC_9~gg0ZX?o}c5zx[Tw̫\I_#O͝oHƭ94؎MqmGѦ-~mgOW:4^?/n\{Ҷ]ׅ6*| > >˨4枇&ti[mi"+s]F=?WOcQaRvh畓1# }^A5zh,iyg~ǑdܫGҀYf'.c'4[8qz1bu֧-^jʙZYwop,?k90nRaISfpߴrlOy-7x-\f<'[JY\O^80`&"qe5]Bs؟mx a[SԀnkw VmȶItF$9_WQm[|vU~R{:W(##}W:^MxI5#22*|ɀ?ZSr.M/: Svfšlg{MWF[ uMC\?}QNj`]fJ[1<|`zv֜{'Ck) |Ґ2;lGS|0_ZIG,o+K^(gR4pnGj^UF63-|hceGL1{DTqM['굻Qg #F?\F&}Uƃeܾ*UGmx[Kqk !?uDMk CÊ[]ɽf+$=/t>ʈoeDl`5~| 8OuK9S;3 Ƶ}޴ngΡNke!o q :<7}#Lq(P~M]sO8"$ cG|:rЃk[&-4Fqف?ptx-ϲfGDyF[5V#d,Mk1~66}gosSy~ӈ2үDh}?#՜tch|`9}ɧfz@G@!/=w||v&~HZk>n PKqb&YbgԞyJ7"4̞xce ~2pM J.bJ,Ps?i]fqGyoq|k k[][ߎ=R-a3홲"ȚVW7;k bybq>j`*Kn< vKF4etnހSeGW~.u!F'ZYƃ%YbLe|Q bBx%V2#_߂G~uc2Iπ.|$b:y^"VWp^'饟ThFR/iٛpN].3n{?\> U>F}F [s? c~k~)WfщR)%̜k qXۤ=ɏوcj?MbE1 ڛXm* lxeC'Z̬kݱ:+<󰕠79n} -iT'ɯ浱۔P?w7%7rk^Z/MA-S*9Nvt⌛-ks.^c`kV.3ږ^F wlOs}<63VQYѱ<e[ko͠#/I)x(F\}mTٜ&ӣ9K,~OB f/E -x79z׵md>at >A±z!lpUqNYnq}qyIK3T0r}\l'ϏŽ'L1p_/uI*# h/vlk49dkڞD ]}m8F},5L*Ÿ׆፳׍9 }GEVm42⾳e5 DxO8*c'meP7}7#{7;˯F0<1V&N)C X:gὭu\gnc3bd:m56:V.lj>}k0_C99{ܸǞesw:ij[4pG tgic!W Ghޏ_?}{O#+lSv]]lA[,|7;?KQw,sgr3' q,_̑8x0FOKvuQ8 CY\˃'*ZWg 3ɡc#!s|lmɸ|ugkƩPJEߜr W<uۇ JsRq 9R݌:3 3FD9#z8:;ia+/*J{MMq[tSce7&rK\k!JF$8[FcEi5c@Q% gn# ȿV֣IsuL)Dճ,N,QV|!X/>b4v7g >Sd^<- tveuNXst̞^hmIݧ,D-{hY\6BIxdp8|E9(Z h)~+yWѽ`0nbZvd(^4}#ⵅ׎\龲[ ^5<ƥ$}cƑC[.33 F!0gXZ`}qI@cO;YvvZn8NDR䏩Ï 2x7t\ar9ol,dJQ=3)1-Fi'6#ʍ\ J,AJ͡Kr7{_Qxc+i5ψɓ_(j:,nF"{“(~E2e,⹌:w% OYkBWab{H t" X=jw9(jLS9 bꍚ=WXwrЇ#ZckMW#^=5 1& ;#2ظYqyMWǩ)PQʍdftDt5 ȿ1l Y5/^0XOs9)%h\\^V6mGsр1uNaW3]/o#|4=ΡD9G3dRȗ^ NZy21=l*\]S2 (:rR8EA~3]lqFn@,Rá/8sj;pڃlfr=F s`QS:q?vr=#@DYj f֎X/أ̩>M o#Fǚ-$nYFy.Gce=Cnv:tr0dqD}jت ^J tKh> A)1fMj{ 9`G# x.nL%̚ZgRSfW24Ck#,eu}ː}r^Rki.&]IA-\Gw4.uڎ+ Z<;]rqn|k%dfOi\ݸ}7=*  ȫ_ `qF8Wz1h'*wʴ+x5pܬhv'zfڮHR8xO@,SɘyuQttIΕvyݵX^ R`o=ݭrwg#-tN+]sonr{yx=d4w6;<;eHG&}Qo@ hΓ7(wY*]֪#FލP͍D[XzA~?6)mOXi1Oo7gy S& ԋW9H^UQ) wޘ{+;-U (ok»d?i7,v&:ޫҟ3NK7oy$9~ψI<Ѓ,W&QXdkDFc9vޮ^cJPycWY⸷5^Cflx(*Ƀ+#I_^='j+nh j!h^_qB0rcA Tex8rne) \h.TDw$p5 ,ZގFNwJ#EjI&8QZ[纁ӊHE:{S !y6&ZwQ[Lhl 2d"gk3ۦ%Z$L 7o瞍'9?~eբ=g$D3n9ImmFgL{:R{6dVۈ7/4k4S~|+isVlƻөw\c^3 뵮_3p s@Nj('ʛϪϢEg&.{e=maǕ!UmE'_w5i6p `~y+d)nUh.ZNE%ܝkA рeql5v7f_H]זI^2RLlֶ2MO%0"|;fz!ao9ōF%vPGR~bJ"ՍefPo,/j \w;]m̐767~SQ"R接i8w+Iw7sezZV_*/IĽFQΣ3W֯IT3Y7ȵy+HβR43*rx ՙgѰviim Z]ˍ7x̵fWr{Le9{ f-mR9-G΄Gw]yvdvg.S |?k$,Ȍ;SsO%ᱧAktAP' Ǔ' v<ٳ J>ٌR8 NBl=w&eR{hw?ݸX U13hP|= ={y /;JRlN32-/s>i?Hkz/͘{DS;k9BF(bxn0?1(1lr@WaFewM+T #C|2a`12bկMFZ'dnyO:W;E&*w\3}8P^p{z\ϽZ L5&Vc=|a5SۙPFls4",>F#"7{8B<`#nиcA<Y=xq5f2rD.7Cj_N`9ȲX HRWȞɁFǍk)iuf549O#Fn[hH(f\Kbc+9gf!Y_ OH5OwO=s"%2’T wRak*(/}G!03O>2>FXeWa~*4G˃[Ʀ t" 9M, 8G v/U(2"31PZ;|MǪ3bSdK"'6լ ݻL,٪2Lc 2LXݨ#҅@c9)|wL8`U;XlVS;ԉױ8OnclFF{w&)+YOBr!h<49<"3w@H_O!vdޏN uhYGz/h bϞBkY E~hJ3n #pš-%N :n+w~G5ٛ W|EȾ^X(j\Z E'g[%Pn$ 00㠎(/bsV3;D~9}~Up. fuԖC2n ,5NnٟJ882?c3p4{2왃х6+VoC:فVҤQ2lwo'Y*2`Y<ؕtTlY]m? DD6LI8r?߁sY;#MD|%126|Zxn"o 򐵩0Hx['=o7[hūp'O@ޱvgπ s8,A.;؉9:>o`/]dλH!'h1f-κ΃]_tδ)#.;NX-X]*:yYzk bvrxG`>7f) 7ƍܺIc_'=c|n\nC-wsKd\+`=YoQ'w.A<̮q|D)l&R+獨 ץ8-AƠ2myU֚9XV5o^\8~%y73sGs7݋GS'~&&[ӿ  "׭vl5gdM%kWI?SN̫y0K<3V϶O͵lmRU k VsO x#N=@XlGo?U5ϯ2NMҵy:'7ߥ,: 8}XҲe+ںwmhʘRfꋎܲ NƸk/:I}4 /3J-XcT%.ڃX3|W}e..RךA7-BGvPZW}e>kٱ7?k<\5FU?]MuF#C{}-igIu8y gh҉\_SY*pY[,(Mb1ȭ`ĺyzxz}y Tsc}F9C9W̓˼˼YZ'yo_RoUmH4&IRm 8^:sǨ*HOL(/HY=dvojhCOXj-e(-,1*i@(V|ci=WW|K0綼!oV!)Sy]]C 2ղ^q6Z+y;Ļ QǾbYc0/#/yõGDFI\U*=:0Vǡs"2aɵb9pTMVnwy6~\F2"lAG֢Uz?ID.h=&%vx=^uZ&V=IyP[Vn̫&zԺ[8\0[рZZJڲ\N2:[Xn7 B+glf6^wk_%/Z[nKݭeuuݲ딑NgGZч$C+vAq:,7blF꼨V}ޠFрt{x=~D*x_Fm=4` ÈJ6dNyvNjY,hmz{<wk&C < c=U kze̺OG1Z} r *G|^]輋1wT1,2&$>Y{Pv(7[T(|@3цi{_V?x5I>2 adb^=ߙS3SX:ؿlQ"n@0" k3E>|etހXV5*UJR[oF:P.zI}d*ʗ `kP^ (Rd&匑!|s|G@}V&^)WxVqnY=yGbb3Xz)Kk`y`#̈́893\2$WOլUMGLNUŧ7?ȆOמC@غtKǹxH=aTCjah4|6h7f5_9 hK@KRw/HY-Hq\ YzeJc㷟}]B厽Q8\5 )X׍s.lQ F8s[ҜrYC4.w]G+ OFOO>K#rɟԻ=9tm&=ez ?2dDd /G^LuR_w5N40rz*Eʶhn)k|**%c, i0yCOqޟ\Kg7johygj.+ };)K>hX< `^3uLo5Ȫ=cG’;j޸ڶb>=B1s-IugqZMZڕ_ő{K#pW/7ڵcaVVta#Cu44eaϥiYaõϓK޵Lw/ԯB2l=LpZZ"/Z'm+LnWTeF.F\$Z%/nF\셡h$N ɽƞk?U)z{r*[|B^ws<#i4!n{L\^"ElIk[KQr%v9p/*Œ(x\ۑqW(elOlkOWޱ[֨`?ˌwR-7\>3rgs1pqTEVvcK,1vq.c_yėqD 2݉%eZxG׶elYhhJbHL5¨}p6:H˼)lc?hn\۽^z2[h\FA:;2{,6 kޛ6q\i_aG *'^ܡk3xCW A˚_,j"P[!QZ. ]Kc lЫ$~>[ٍYvtX|#hu0&] 餳HRicֶXLkcjxdR3bB(_zDE>Mg5 eNB`9[W/#h,#̮Kq q9+t@-2'N3xFqR Fϥt,~ևE8/aAň"FdSZS @ڜ^znXSġ^ȓ L#mqZ`Uӈs kD.Ek4A\ @6zIPl3"Wyۂ@@FZl_M KKY x9ِB!q|m)W0Pb;8IP%3{c<ڧsmte 3hU j3bOsrܮ@OؐZDX}23$z3D^$vV0BvLC% FSNc'H3"*Jm0(d/made[Z VAAJNaUl$*C%AbD iZJi/4'rl`p`1[)%:5 1%+$f&SXVUbH aƕ e{Rnfuqa E3"MWʋٰFy"#(VzXYf2Lq$ΡHg_@?; k %;t?%bZrv zP^dUtlat;qԥMRMa^cdN26+BMaNbmFBÞ^YgmI0B-I9+\C0)s?32N3{aNHW;wkmPm(|>_Qz䲭Z;`N}A}[?g]0+;fn>qg<&cP LPZvl3HnE8WGDj2k[,VzUUr6G*ι*q5Wɨ:T/汮YmpP a#VDZȕZk.4v-3@'7p% w_E\>iJ q{ ejU9KE˻s1dXh-b/*4ds'@ pVT!@gmD8'H>9; 4WB(BἭIC]%JY{UzL'}~jMlj;bHv2cVo12Vpo0Syۡ:M)%D=r#-"ΒUSc_UCE zQk& vNisi!*eb2b 'ؽ8/115P{nNd{ pFra;o;g9aE+D>6'ev̈3'ΜBŋx"?Z5o(S:-`*"Z8 oh#?9ҵ$T }\^P|@뢭 uNT;ld%G }ES^5}D)#1o[QG"69iE64=a8Igs*KѼm@]%Kw2#a8gs\TJJ*Y %H0䂜THWI\:WiiJ VD ^f1ݏR pT bRA?,%ZTjӼ $ov K:INjƫtxWɒawfĥye`2f& ,Щ+l)0MQ_Ԋ vH (PlB9 Ϭe!ψinajwq UD)˚Y c@ m>y 69yֆ(fcE,kȚ2 #!a(ͬ,NUQՂ嚃Gb5k- q FJ4BZNYa{ux9ftFL 22L!f(d+8kkP|A bdpFAJmTؤ:/2gYo婥89k0q:i&,Ud̝='j=BGSQ3J 4)qBB[N]מg1sTz>rwTgd( Cu3&"~?\\^\}?'ɣ/<_x\^\_⟯.}X7_=˓y_ܜ.Z}wq_xF9=w_oWgeզ8|+mxySjۇgŷn<%4s}ߝ~7ӡ6|*n]yqyx~qeX1oo6;M޾#n.{զ9rsV\vy9}}w7OO>ð޾?7?W>Į=1[r zD{&r;=_္v\ |}y78|Z[&\>9x>{;5ϯ_~sqɡ)W9wx3zp^:j{wLv9B/6=LuoKսwTQS(=:uo= u_~ix,j63R{8ڐ\lx,חo?p>zs{$Nj|4y{gۜnM7^esb*7m>GלW/Ԥt/ C;ݧpr#NCc_ 0l<CO$D6\wˡ_yqӋ<_g{w>]y{3>o=|@Bж1~nǐ]( z!Cϯ/9?ߍ}1/4mV;<<l\ӗo7_4'5Q{m<m72_^\nKU?\߼jڣaf.o#3;2]dGhx^ĶKنYp5gu~sgt‹\U6=VQXొ§`񈮢1=hUDlO!ӫ//϶ 'wNr{~s?~@ѫƮmJN`WN71is1T`m;l>;li fo../{{f$#͍cpw77ׯ68p-|כK1w]oC1<Ǎ/ӛ./iӳ6fcvl8[tu~q_n>=Xί6N޾zvs&?pO*ū{+ P=`]03:d bkt0 :BrʀpLrpI|8#]83:hcsr {s/фÜ=pgtWb`0؁]83:tph0y8<[lm=}ÇX5pWɾOWM|nhp3{}$,VRQ>9r-8Z9s'hGvh~{ GF=#?ۄ#?;#?{lj;o#ckOg;MM9'<6c_ǯ˗;Ę ɴq\ /[xHǏ^h Ve ˊWY?Oys<O7WNn_f9{oC ļyM%b6@̱@́9B/~CfN4X:;sY[gogׯ^_~q=<6r!llu٧޴D>`O߇D>4H?4#'Gх|t!1 B>֗|vs4 ֡sӽy{MܮhK%ӏk~Wµwr`|+|x~yyæx׎F##4݄|];ŷן_ߜ^}Q;Z͝p4Mr~nGnu9ߋWoo?]7hYxN/[|foܛ7 _1e^:h?&ӛg<F|/- /C¶l!hx*ns1hx ҈F8l9mvh9m~NvK[h:v×>@+ԣLukh$XCjhl^khlE9ۆ(1M./n|z!/û33wLcC;wy(W|8w65GSppcu!l\협ɏ/?a`MD~|"?88tnv7ooHܜ܊OgPvQ8i US|rm%xE;plJh4_6>K!n3ElFQsy(F|4j(\Qc@=5=5Gơ5H]="`b/6E7\'Ogh3~ݳ+}}w7lsf֧o}՟:'8|]]y{q{AzqWyH#,vI0An7a*ǪM[\WQ.r>.z􎥋~ X'ۜ endstream endobj 128 0 obj <>stream o/xvGV{e c]>|Sw.~l=q9| ` v8Ə=|7\>{4N c3g7_:'I=juoxT Qk{JX9*|38UT=_rs1 ?Ӵդamt)hs6vg~>Iќ}OCwIm\l7g_n#+Q__=&\+_wS[yO(@pIΤblhj+1+:ߋWopZO>q=ͳ7M>/${v}(EѰ-WX_p?r>||"'%}1,|×>Bӛ^o2r;ݹD\8sݹ~vW<^~u>;e%>o mZbu2UuHs"K_6\o>zغ?q]2ʦ?m5?>ǜw,qG飩tcЋ||C'ӟ>}:=1WcOsnC?GdOGXwhaNƹg'm߿9Ooz8ӯ7N6vc;3;W_7ytY9q'?}>}. 1aezsz P$gp覐]d $3pܯ//ΞGǷWzi0PDܻ2%OWOZG_K|qqOɯ?7?=qJӉ{R3ZN2b:c;釓t?%'OK Ym:qRbrY1< qJ'J',ПΨi~Kc uo)Jʳ)gVTKݳXӤ|k?kj*!S}u ?g}4>'s$B՗g"d|Y| b;Rvϫɡy*VzVkYNjNwoWσrCB,x 7(Sն\UL }o׹<{OxM߲vh=7mԔVeó+9T}_qvpo۲ˏM2Q[(QG03^&*'%Rm u $ @7Fn>)wf:_ bg<9G{lO~yg_ѿ/k:9Tu^s&,w}%bGű>ӺX8t=!שׂO[6dJ#M9%=狞~`2C, ' wo76kCғ2EnM;!gsEL@}EgSMr2:&/u[US=i +-lQA8WG4Y1>Eܩ$خ*DžZGh#Fc]wFKtρJ.F>ʃ'= Sa^zl#M͎Lj AZu:Ua2}I/oOJ.1|z #զ,م2{_m'$sg1ó}l>4eòQ}Lh?IEXTW짢SS*ݥ/<)Axh ozĜ\sYW Ǩ"`H\D[wT?9Tgv{nH\\6 /Ǘ:;^D KMM2ko[e]$9ZY~~z#C.%{,zk].x_uqW K_0_K'[Ġ3%( 1/HGj !"dB_^#\tNT.rgZi't#Sj%fDYto.Wݚ}`I^5F} +.+6]T;%GQ:1--:-D7E)$ِtnWA3;R?vCޫn]_|Zvз`H[YńT ] cRօp}"%o"6,N MbMM,31}B5\kkt:%vN$tQoށ54@?PwE>lWkmk!gЇ>E/y;˥}t":^ӉEX~LUkC'07OT(DtJq&<?2LM%8bN)XD~"\Mg}{+Em{E*jmIE% +-I]l",Ԩ .1 \M*Da%(Db09;!xMKJl-'i$&2̔j{}vLPbם/*‰d(BZ^œ59Dt'DƄ$Â:3]/J! j.XޢI fon0 \s4` 5 1"@A @Ij/%&"'e-O ,y2XYV|G?ܡ&Y|G-OoWLNK)?[QB5.K')K"kkdz(gLaT=xE8!a ~) 5Jga!$\D^v"8reȆ;k\.mӷ{hI>)#\Y'H3>֙_ފoYrRɢ+9Dވ1)RYn?JX !h[2z="zjF%@`]MqI7bD^$>wLVOSukt@>MᅒF "T*̑Uv+K0i>ȚȢ]΀?N*UUE3)v.*:Nϭ,t0MЁ bfI-{ ɕIzOhzܥDQb+f֏X Wfզ/B5@^O): `i#=_xَYNbgŧb)w̟v t<"Z7Y޶IfRw>ey{ p)&uw'bM>41C֠v$1ͫĊ#>xQtRR!>Ob87lbrׯ]pAL`t^dHHV>>BpzjZog2zɪ^k.C>MfԠEB"i,LM0sj)S$c tZ;/jzwjDl\H̏|9 ix[U-]ȬpE:H9%ݜYJԄ\>$5Rx\"H>`h;d .%2Iz7>|8VЄwvK"n]Qj eW['eڹzp9=S>/[7 V91L$Xi{CWsĖ2:~ZdCND~G;3dzb_ *[3̼S4MoJ,N.Ty=T턜Bֶ PГpTnue&ՉNt:% %%]Wf3.i=5n>&%vQ:iuf"?l2/ a'?%myHjH^, OYrӞbL$WQI5·W|n OJnx#wCl䢊-}X9Y6o웁O?y| kcx޲xID],R > N #`cn/K)J*졺ض -el\L]/*K9/%@NK,{M r@cr=YĪZ[`}d !=Mx9HKUA Tg? >I| e ޒ2"}\H yޏjϽ"̟B1:װBCᏪm'L9~X1\6 2 EFǂ&L]tCN~XaZT+4]۪N[J*v 1f$̋]^(OETK&݉j@nhZf" %wLb֟^\P'W+\Z`OrYKd daCLNl*p"¾~HYl<` Eݭ'pHOO~}s?~w7ߝ~K.|gݮ;?/O:_&3~ܔ|ܓϾUϾъ {+"L!2sHljĚ'%vMsa. ~JPr8d߬mUmY;k{jx b R@3mLf%qOv@=&g/ @8A˅BL+0[-kʈ|.ia ?,| P<}inxi}25 CFnTU!b`2b/!["ذEa&].cבkHlĘ #aק3lӨL4#1?Lv |Anߛs=+,bv' ^)0݃)-@5s)켙E;L.AE7!$PrV@4!_ͬ ̪MT)ܵau.$Kf#=| D "g WHVX% Qt\dE-]"2/xg8UCN*aI.DvU쥢7j>w(HKΩ%k= .h%jZ"Tƹ ɴcM\'5icI!n{VP$K!OL|OG gG4-+qp19¿CF*ePzF'4IfHm\]gTnKDk*"Wtb |︺Tyr{M"' Z|T%Zdq%F!%!\-TJ>Q?%m+6pO CfXYvae 3rcT jX~F 0b^xQ+8\|S;eBmA`ga~;%7UQۆ9tGPl"*&\fvRs'MVN~p(;?mǜ=+blI"8=*5:.:+% 6-N7Će|9D|r:!p6Pb30:L9\C$؀c8Ke2Z%bm`0ԥ-۸rD=԰ؾ)P!7dĬ  9ߜ1jYp]< ]D63]3|Y#ثNgԯBDM.:Ѵl.dwP^(1b3$2#[ >ts9'J1jVUU%6m050")(9Ę: o׵2q 02&禒gd,zZk\yWSF ZCf`qdI"I u\K KmQ DbC#V!NDIrk6KaRѵMdrU3(uPM+KZ8Kvr՚%I.BCcK6 )rBG<tte/9KDCYC8fUA͈h/?7s&̍}J0@tIDzfEwǠίA*GPѼȉ0="O܅6VP]BMNw3.RL'7>,Z/6 [meZYmbU/g9]ξŚv5+a+~_ߘUdxe݊,?7ރI.jUxĪUN!7Xٽ?c\v@wpFlM3\没cKn aI/pzU(g66\(j^3ԧlY4ʣ <[$Cut\H^!1)6)Yrk4Xd¯v2ḶtѣP-E CUj V%c { DL8;+8YPz倍,h:쫀.`#HKEM!J*K^kC,fJjm0. /*&qd3 G3-K\"shbY4WMӨ>؇9a2R$_aDF`%\H&OU< ;%&`^F 'ύ"q,ٚCgЂ)Lf|N j"!pq$YR_ վZv\i6y2q:?ȓI?y`XHI&(PZ[VwSC8,^ێL&#E'Bp3tC6纴b$> Ykh &Zda'*6mcW(gمkphH F3U :9F)v?wL4%T+ޢA5Xiԫ1kxI})1C1})g()`vELLt*0jڃ#S@X^cL)-&_ 6۹8()d\0])2Y!#НS4q v(=xf*uKlcv#4YHߊ]mD/O\c2_dt9`U |qw럟36x&<ʼnYm~͜XTAS/.QML;`J H.:ŶfEƩW94j8թ'5;v.s\QcM&*s7]Wy7sܹʛ{ͨQ.X?ydK 1B:`W6LXlvrT- [ɝ?C_cjRQцQ-[c6Tre~:uX*/j:z0F1 4}ghղ:\L2py}o,AedfUO^xX ą 1.aotg:\ Z(j%S#/U{AUˋV6U]ٶZ aecx {q6Pm̶B1?+f"̰Ȳ ,+gZg`#UnB G͡Ǟ߽uZ9ey \Sl cਠط A#P'(Սf\(:',X}f&Q)D/Ne\U HSA4DV)ؒ_ meY"O8j@:DW GB.p{ Z{5&6j8nd\`6?vځZY~Kl~g 9C8SX]$LYGY}2gFaUOQU O-;h™IiQ uQb>8uF*ff7D&Jc"Ƌy`j[&mba*XV>5b޽JDMRd"EU*6XU}bL+sg@@jqEHb/Rs}^-MSķcdΆOD,a, i$f8}f[[# v oTNg;6%EIC5AY~qEbLQMZGgyX"<ՈǢfH0# ,YZPY> r,F:02\flK1"&Tљ- b&| *ZQC-󈓧e9G̔Do猜G9YMq(:m45#8"zlWuK$5G/Uu^g%Q"#r%a ʖ6+-YVKS^El‹T7"X2!l]v$5>儎Ip0`CC0 ApΖM8̆ IO ~o㈜sYTg˂SCn y|-d}jWuT/#xM!rB)װ[Ndt 3yvzZGGJĹ\$q.3ۨi~BvB*+iМ_z6LkL\V[ ;ٛf(Iy@M')Y;J ^^n^^Вg/ox.!&2)=`&]$CM$@` '1=@';$sIav{AO~V~?y~˯_זzߖ00Z+DCVZkw` _ޖa9%diP6Ļ,` o̾]` l9ԥ-[ʃ-pC\Bs)=t)]u)x/KbKaK;%'kЄD;_J@_J{_b)v/LbpЧ` >;0{aJ{aB)= ;,&,14&^DŽ;<@&uL|5LyL&݁2!Ae pvy/LT4SFltqp& x&lԻgJwhA40vD;Ci5rg0Mti:b ToXMt4К8W;kJ{k )لjwMڄ#mMbp0ήnbCnJn;;&Лkx&=8vV '5 Nww|<B} ~VOxAK <ЛwC^"9(xE~t y8;(ۚ lkl6a@a`w0e3,-dW@eH{@*U6QxgXexbKp;{l˦l_lge6;-lwe3-MSny@vv\].[ϻ.[;/`;mv_mKf{` cs lc X=+ԳMKg{;}vlbC\Z?ۃ%TVa9 =K(!r.Csvlq8(FQ ?[''K0k{~GWPk{ke?ze@Kx1;ޘo zWlx;C^5k{mG!- A%=Xiۃ%fw0mb mc4k,@DŽڶ` mv׶&m =v* CXlPc6;mp۳o mvܶ۶w޶.v6f = m2C ]@p032ʃ%=d%=Xr7v{=D,  `A_@sCZ,`?nb mm;Curmp6d=d%l=۾{WѻmK= F_xۃ%x~cȱ=, c?Ɯ5`NKp[cݭq4~:5˹-yt\Pٯͻ~{_}}}ۋ+˷'O0f2;VNtM5?Y1ÀO9eň&((>>yAjM0jʽ$`w ד^_<%{xEqFggo_@+,3$gE'?!Ut`H~ ͪr$<])FT5g}#Qݾ&e1s:Ɖ `X *%.6XE"Zbw"q\xτDB"FJeO/ɉ"4ϞHP&*BGOq)V y._=o+ $}SQH՚qO`LT{Dٛ'5~Ht )S 6>NC'Mʅ?YF`'kHmP!VV*d/.LZ֜6nԣKY?&jq:9K]EG I%Nj jfc@֭TIF1&Y- ?@;N٦HIgCUlJNNU&qrHGqGst>?O}%s$qrt!Z!R 1'5GhMP3b(.[&Oa"cURStvwq"CXN+|G8%$% V;cUqJO#I˭~d@&Q'V?UPtS.OV؉^\wjlY0hCP&FDs"̔yy>3@2:5.ʞT|^BM., $f4 һPøvAP5yFE~~ ;a#ަ%9ޤhuPc p]#YwqO!0y??1LXS~X%o ~Tm+=H_LwW0E|[3)p$:a,bRxOξYO~D;I.-=W7Im=ˢrȘg (&G{AYӱu'WLO ҔJV,f R[6\KĥR ,!gC 6;:lە2&lR"=j~j'*"P}>E$cIFWJ4+:A̋MhG h-U0㼙RK2(j*ꑊe~o;2Mh= G&@v$Jk '^ np:fcg* K>#V@Q7>ոDA7CV|^r3AHEzMb4ޤ}/Am`{=aBaP!,1 YjPaY̗Zel$ER"ʖjT?Y- L~aX*8"xSh* ?&5) ܨzAoW#UMkMn{` {6KZKפ. zs P5T"6T8jqRB.a]Mq"fAo'o>vOJʖ^,,bK )@";NXR=[斤ryo%FHZ$!ߟn*g,nHly9{&>(?"&7񽲅$7qR9 s5mxپP;.7(j?; *1FBg Nz{C3ԼD4 dj:D:0n R[ie(BY5FleQh,ہ*%lT婊NNhIl_Q Ȝ|jKj P[}`%8%(pt XQgR+^#D^9i1=;Qkr(@,~p&W/0@piLD1qzKMJMnH*Eh֔J:?ЯBAT]R:: *umam ׯP$”G X1ԑ2J&9"nbeTdrgkMCťP2Kb 6uZ{".AnE,SKƖˁ/>^%"JrRR&?_%dC1cLGaORd Vb& m"].mB@.R)ClFj?4d؃(])K 8&\E~f$rr|hr1#'֕*B!'`p"yvpV&xH1 $c*ȥLn@D @XaKNz頢f59qF/Kd(l>[MM #!g*4e&@,;ie()\d`io)MᙪtEu@9jrT0T0wS#fpl~!;ahÞtj˞,J$-a];dE|Gv~!i]Ha`z^ةVn<>E `;\&eYLVWHsq^EԊ\mQSNqrLl'pü llQ<&H(@a)}( QdaJq|T{uJ :\1ۇӷeAo^E06ԨE'O wl,M+[LP2K `8n_X\+N녩lD XCLt<#Ρ1 U2!bMF^<RuL hIv|Y/f;(1Lp0QmmTd}_n@'(GWIQ3&K gW ">=E!IѩOb֘ AGE("zdop;$;"f.)Xs߇Y1L?uTrW} \}~&|f2:HάSJE'Kܐ^3M-ZnFUM FӬ(NE@]0!!dV4%6\݈%T&͈N%LhMM.7-P`ry(@Zh7>zxO\hS-@K ^瓣Bv(yhv:t Sʷ/rRTtQ*$.)j93BIjVWpI4\PPJH]y+iq6sڍ?+XKDח{_|6/^э=~r%OGhpw*]Mzf^rqZuW]J %Pe\\*(d:NZ646w,\kL9Ku+>*Z w@ X6KS` .Zfh{R>\R_3Bl$]#Ht,dpWe ^5Po G]}1*,PG3 u̘LP|T+ yW׺p!-)f|Y#oN{YWRKWE\"^cuiYFridP:iЀhB#6W"&)?ZkRړ; iF5P UxRF6XID #h 2%LBLc%0*|*zeX͔r%][|8"ryE0$},I#͎(>$nJPD( SV9'x+{YNP*ZB*j6#2DP"_#"ݺHl pr$2 2/#$ 5I3q+u]iEFyOE_ :녘Go8#FM.NZp_w]O;6}RPA`HS EH#ۂm#Ϭ;hqրksg'%W\V'XFF iZ{!!֨!XMx*W4V/8Ӡp5u4+"ӈ\5F&xpU; ,&%ޑg}Z2`4+GN$K[aδq\'2mU#&_'~y D&Fָ+'vf5̙xD,-U;ӒSOݩip+TfbΛ(:~ a)dyDҏF"sAHZkB}kXR!Y, !hC2\ i`+DQq7'` U*BK".tbe1 6҉QX#ʬs}7嫴)@+ogoPyQ&1A8FeAĤ/} jz?tñR?˺dU;HbU35d*~(t]Jߢ_Ȇ"Oxɷ|o*"&XJan@Et`$oLZr(9ف>SfղT$t:ʕ@U *HÙ8 + E8es0/UU;9BMJ!FIdB/)it$mUk"Ƶ:hL'uۯrx_uSmiYN$9y9g"0]hW*vq@Σc$Ҳ`Us]ʺ/+ nN>Kvr%r4pRfC.ZSF(Y﫻Fmv~8o/pH rr]CdhJrHh:]-cE~MO[Np #*Z9YKb )ųÅɐ!'J#A;eQ<% $IzI+dHEb& $u'5zAwGC׵*Hx,Bpp*D1+!ZpZ^'BkLM$V"FtNͅD ǜtE(8\N?@$ #u|?B 1hurI)*ZHW6%-98߲ҲYf!SdRDS萠CY`)Ay$I;[Vrh|1 \?mJֲ`59.* *j@FHd]#5K,feVjhFT:!G!N@Tq„RVdTjX52λ$LόyIV]3!`$ƾ/, uWzzM" Om;#2-OB\HC:Hȳ#@7Wv$4 8hp4"`3["qCVӴFMQ耍5 ݛ! iúp8I?6krU9XBllE$;jo0ab5 ̠g[@,|D1=ސX4pc'anܒRթzpP$2xc|2')_\RE}ׁtB{H(#U*S`F fRG@PJ*xqV)oRݕ"g G9')4,Uה5ЂrN&RhX\xɉ6*ڠ+Pt =`aA"[Ӕڌ(r:``MmL+_lvL.2WVA5=UJråO$/kͿEr]@Al(b""J5 B$ 03alEFWBҩ+F@Nq в2`]V ]מ/2 h.$v-\gвD&R3Y!T6+=rjE:t:#wOYOYOX+OW*p+yYZYC Pr !ɟyMJiq2s:6Su/ 3N ʵbgOTpj2vbVKx68hA.aOb ʞLtQ5cRHDЌAK\ CLA ($8;$8(MV %$K ]g%Ȑ.ΘZ l$GdyYJ)Kկ~ӒQ YKSPȾ/2M%9PyeI99tX:Xah8U_" Skפ$64gdšTMN.sE{ "E'B6OQPlIϼ6MOWVLe""fuUć0Q(KbՉxKR9"sD4ah IuM09\~LP{s#eo)6IBxuYKA\3zaNUWZd gKvQe(XE!5WV<;3' {e~t}#2[N0h&D$k#gC:IRN&उh:Q`p5f|:M}3lA#r!B-o,U3Tl.(g'A}xl%u2&LZcXַEįd6Ԑ%LLBmCãU$@, ,`<9ID\Lh: +Y7PlVH'UAĥ d?$Kٴb; Ŗ'"V-FСDbL }-uAlC:a!Ex-9,ig[-Ef jTX 9Onc#6BIA+tsh.Rm) >X!X(i#J3ߒ;4Me9 *},0s jk3}V+SlUTjN3Ey9ƺ[5Z ?eX҄rɝC!>SUEaY""sDYИhǦw ӕnZ`2e⎅JwA$6"|jvZ`b6h1CKvj|h~QAE+մã8&5*f(WIA,7z6:]'A#JA\6)GgXM"b5$e沖-eSk UVnEEd# yB#7lz9 \B4B,ӕT! 8r$-6DTQ*%lDswmhpjDǠmzLi-~ JorD>p"e08^XmZ.8Ȅk>" e$ / j28a >σHl.K" 0XzjY,NN&J?+1~bj! bz=e63uҺYpHudeI. [iޡj&aJFJ12BoC#1ӗg,h.Pej2sA9d^W<Ƙ%N,l܋$cjBћNN(2z"(LК/T SEIRWpaoYtMYTq <]HPL9L2cG#o@nu&XKd7̪fc`/聝rxzP PǎxhnZMs)B&"ȭKZfDH!Ŧ=wPe&{,<Є3S1ui*N36ɼA,lS,⿴u&-SPY60 ݠ6mHmW;q}Sp-&0e3Dz׎ߏRdq),Asnx=ku&k9,nZ7ʀ@q<UgBfIjjEG\A dI"nK΀$spۢhHC!Z٬43#&.z`7xT$%`R\)5BH9oKs-宀ky̩"R t魰f@2,`HZу*/Dd`RzEvPbk:m,jBvd^d۔NW};_PG("Qf19y6̎[j%2VsvYs)jޠEME!٥(8[1- ^EcER ̠Ism C -!rs0 U (u]942M}DaML+wZ&e &tjau"6fao*] Vsi|PV&]0F>@抃=DTO7Rlc7EoKL X6h NR!"c u"WhוSrDm]w4~JQ0A[>P"#oY*|bx:VĘ>wx0[~E/2; F֑8aCx|>&J`[})4A)WU]\;aX`vm)a8SSЈ*d `VR&{*e:~͖&Lxش/9]L/0I}pCϩ)9zh2SGc }_c8gwI/^0f0ը;hdl9jŬXe!gnj6'0MvInvJݶqȠʿuӊVYSkr,02n0DƓIݚ%&"Tx,`~oIUb| Ztfq »utV z3P)tMl,-kC4db*.KK. S0}$/II:ndf\y0SJ\ @In=ZkQZ9QH=d\/鈊J &9^6`W3$t-Υ $tֽJP-,tAbwoᒨb!iTrlZf}`TP؉Lq黹Ntf`bkg0}詥6[ھqH]`lfe>! ha`d`l:"} J2Տ9O MFoU:_M]GDqDSBD0-XT^Ȩ1Pco+\'ӂNG~B`gGbÍh cWS4TK"hBm aMC$GlE#r@5;7 8LGs=2EL< k UDYt\lL$_"U\G2gٗFu:$gF ҅t!;ZI#j6Q+ O!;t(G1VJCxȯg(TQ(Ӈ=Ӆ% FtεxWg }m!K֢ h 5B%\"hS C%{#m۩9 fVs4+ aTDƲc"fo7ՃZ-ᰫ&iy2(`8];C(!"DEf9LG ]ͰحA'TW\!0N#J@%g(TK}|"YmkTEYN͏,BTp*oMjQ1,fFZʵYI4t;$ `Z#~o9P3w6e~+$|nn-ѐvF )שVoҜB7Ȳ&f\q5#Q;~|cLr]utEA{\Ez\EeuѬtFs=ăpIEsFwھw8 ? 7)B.BP3h1p)t|K$8qPZ>Li洦f~ O(ד${.`0b{׌tJ 3pRPSzIfqsȸV42>m )TBوfFԐMA:mTdlue6+JIb$.N>szeS9a;D%&Qg#a]VtpL{LB+oM B&wޘr"˝8zGRK2z{FnSΩv^{F3uR vS|VEH*dWJ4VNmťJ1sƸcGe*%S'1CLgM0{V(*UiYA5)y*W ͪ߇k;ˤ;F<v0b-RŒV!쯢 ʙ| ni"0UaNPDżxAuA ĞwW21.KCz momlzm䲢RA7My0e @JˤR)/thtk$uj#[;</ܧ•KFcA\E ٫dW?WdTu:f.,C;x[E(*EdJQcԹӰl|f4wt%;Khb@NtDOe q.NRBn5JhZ,´Q印p XeNqB鶥]TC* !VA:Q،fea1r>MƤe9CMgwG'P3sjl\]ъ)HJ7BlW}F{po>_έm?-ٻu{e׻/moo'72>tǹ1bſJ}Rɸ/j/"]ϴ$ 8;]=A p=w{﹫sW?{﹫{o*Ghk{ki7[>oh/3[[>]3q7 t 8d7<0](5'#lSPQZ ;BP3iB:t1e ~s( p.;!1M`3: :Z8DٹYVGDOrLCjLe (Qa$ J^/W ASφ" 'o[?S C)ez) Q-D4jK t!fY8O`aLC#jeZC- #2v18vjc"È]ˁi,^&4)Ʀ6w779&9cWY0zdu\Qv L& !|,oVzP~( nϪ=NQ۬hR~@]e*[Bq촃rhܤap:HDaAC)##ouxU .@͠+ sSHJ܄bp-P6q-f4Z<&ugSnce%Owa 9F%Vzą)VMJÉӪE)[ǸYp&#ٲmM7kl$}@y!LSk8W[|17"~O XX$MEg ׄhʘf(ozϨp,擖S:GIM"ƌfq=cSL/=:jXRq3@bq3X ~8W6LkgG lBuݕKhb3f46w)RyyNfX;$s 4*ćU"oP84rPLeX `wi_h:VE t8K= Մ[T[9aDH1bܴ /(:5a ZxW`œ1quބPd>MWK4 [{0T50ƉL|̪G2ЬJF3OyQBQz X~YHTnWH h뜎}ڼq|ځ4 T1qrtm˕wq~ē FvɆ(¨ߴ QZjzxF T d7zhJ9A/Ӆ25!]~_ۛRtH# ^#H&4q岰30>C%Ň%mp r"+a54I5kGEc$ (5MtE"je5MGt~J| 8 $*gYz:A(Rkc,H}дT9`0` '0s)ʤaqUHQL$ˊ`&J"px)PKqCmEsL2>׍<:ZM.k6t`nPoJVKC[%ʤݸ} *E1wKU oDpJmZlkvK9s=6w=ǃK]3 ]Jet{w`Ku:!uL`m(^{˩."X/0hzwǐU{.k'BV\ cnh/[ >TFYY9TƬwZ:}_VvKv.pxuk/g CW1̬2 w 65Әa!5B’#]8ꩴ$FI/_jȸGp2Q}Г?DF٬n,OJ'[@̫/ji{Rt톼5\w,M /1MknCfH6U4RH >:k%12McCm˼/o[NWL{c%0;vkĜ'o h @9l*8S @D]݂Ymw- +Pݒiٶxy֮|E׹} E5 (,[#!Ƅ2Ѝgn4(VxA֤l4.kY?}u\i"nF)EX^K듪c_*́8H ^֚/ǴdQO%4HynQ`M}!?qՍ{ O׽-X> o ݭO:w`u<~8dM,ypt4VN~W)I^â?ݔ(j5P?zxّ@+i|J36Qct5p %N^N'@lg G,Xz)˨è9)VolT#**6C:)9Tm m/(Wuj$f%J$V%k "}Q*Z\9sUY:5kbmZ6 5DYssUE哲TazQ5S࢏t"ljڛaRKwpjTK@z-cqݓûVQobׂ1SK Q2mӏі+/ @g{x nj@q>Otx3m%\ݴBF"#' z8I^W(Hp%RT3Z{5ފ`]#_8ˌl#{JMHaS\ eCMp=TJ07\tTBjLeP3筊 EL{]Fu ?Ft^拿Ƙ7ׅkgDT*  Q3Ii6E鵂T ,\[oA<|M4@.\;=t}#CSX"C79r(ZV<P, <쫇v~ہ"\0xd7Tf &9Ocߢc*&}q:x+ՠuWN7E>hSnW^$ XL)J*|F75}sWb|EX~UEH!df7OQ@ eq*[ #lrӨlT$!䵘^-^(ߤl 72hs9S7peSL"(23Xi(O'CM[,]Dډt܌v_{#󇞫NzW֯FcHQ\ݢ! (Xe}s1>؜ΛMجSSy`9Vct*xvd@s(-uZˍs(w-+}wodSstzrdv Nϕz` l.!@I yynDS>zXR];3{HGs9'GR-=pc,uuy10DD?㸡,վjfl3RZ9510`!}bM V%IAjuHcm5pW'*oJkQչ__-y[N >7GFO 1apGUex@Ɣ=tUcsrtԂ06OHۻفrE@(WO(zrEJՊMx]O ->+c2۾ܚ"T`. gm)(ta)}+xEJĎTF! dO|[]W>3Xx@уTJ}뙦iFɨ:`ʿ@Wh,"sYTi"eQkkva}8GxQ9w(ʶe9uBe Ca\cAf!Q6&lki (*,LSi9" y'.f$+ #ST< L-rs8l]boS( WO$QEhG-$OcM }'5IRdlqцJkkF)zn pa8,4Gju,/1bҏp!S u6C ÷- JA & , de:Eb"rR?5F<3bƖ{];٧ZGj b}L(mEhN"]ͥ:2lSD-Ţ'k jEi$SLŤ)ըRt1+r6)dHuh[\ / 1Mc4yin7le=s0?'q*yͼXX.tY;.G!vI\%}!- 5K,QQg|DzObjQ+# 2,)e mCѱ]֓-ĐH4ҥķ4!df E MTsPt@-P ʵ|fubH`XALҮUDUɧ'.}qip[tYqkhDƅY]Fek8MZCT VZxUAjP$UĞ0g^dA"")k>E2>4C28Y"Hc `6:Ԣsw6K9upƹɄ2,o'fXAj:ڵ"'C}(qGAFi(v>cs$P>B+6Rw0y/ʂ4\.AF-l0Hq;\+:1.nfK1xyw)UF<2)?j/,>JKNd V՞̴yBqzӐ%&PB#L*#2|PS"wqP.ClC<ٽK}H+Rf 4)dp/ lMi$.Dvٳ6E-ƴz_Zxef @S3۵B4Eue:CuIdӠQcp]l% 8xOA& @%9Kx]S}۴s$μJk\X]>0nPBlBu('w Q\+ Gkh]Tk{U~0 (&RP%(& َ4L'Q% a嶎>rҒA14geׂ*Ejm5=f0Htxr pK@4Hnw(ǩٙb$QJ˙!!)ocHQ pƆVgzbCZҋ oԍ+nb-zlB4^ic)4:qC 9!E*UʪOce)'JrvD v(K&B2l|E#Gs2.a8ڰS%o]/FnRȓQrZKK- ҧwխ9yP91[PVs;+ a!lڙ2NetZSFXl&\ G<jtLriB)"ɬFJ?M{{e`@5~::SBZTWfj몲QLRG@I$oN /1G_%G{@Z3v]:b}_Q7D@<OkH(Cd\Ol5Xy< rPn²4n<Ư+~Uf*g,ZoT;xބB`Hr<*2C<'c,;"1 ދvAS/Ƌ 26khZmp<N1BU&2k*hT NGPǙ6~zf+2o'=>PzQ@l4t" QHL(GB*C+L!5fb]*aA dwD If  av\(Tpv%Pޅ|a@M08Qxί2blRu0ٗP? 1XANԝM>ROUw0JףVR (vO|]? 򃐻IG$]}(8-c=!}$3_,,aqg-]6̕zx(!koʈ9ʄ@@~ΊOC u '`Sڳ'tql[}|Wr#.C11=;bFO ]d^a:ެZE3(Ծ잋Ӂ4ص 1LXaI02l^S.y:b|v~rGxIYO XeyH&(M>nf2(˖/̟rTIPOմTΜJ3h]ZJCOϺ!LXU]̜²(FV]6[YRʼȤ?o+b9]KI56Nf!2Q%$; \6"lr ~݇KNY/@+g"!"Sx?mHFW?d/\fVt耕Д"aU 4Qjo] v%I`{IC9su5GIS Q 65? nmr8Tj$]WZO,T:YA;|aߵeFroG@Mձ6DA Ch2,__==1QRs4Fנpdt §FUeic'(>4qX\E eߋc/`V4rE6پ]dG'&[@)tL0lt>>(<-֔OU1m$HTEY e7}3: 1-"|a-Rle=K. S&"br?Ã20bLOk1w97mʧFh =q!GFNbV }nHiVudWO1kZb(E,lx!S;ҳ05vCexsDt!5Ե ['>ˋC96cMX6>ur-U1i&qt{=VH bĄEԳ;t1BvkӣPܸFRm:e]eVʡc o1NZ>|:f/ޕpi"ʕx*wm:>smA}·LZA<{Zޡ/4|tO Cևhr)1%f: =w\/s%P9fSmX>,8 GRCBX 덕k#fi󴭕K#k,4N0Tt%>O/DEtQEȌJ$9Rq!NJbp7dD:ed:A[T؈*L$*]bGc#N0N^V 2)=lHS&yϋ9ѤRI1jyc[}MDV#ŏb&XD|s7\ ^?0M HNpٵpڂYCHX"Pi Q#9Ac"Զ wBkw,»hTFNPyzqR4LR%m;tR):uyIfwH [p7dj.WP',W0rBkvMИ0(pQd@M]\>(:"ב(A gBaF0|4tY0,MZ:UqX%X@q//ӈ/4#}\Z2`])(\ڵge5/S( OB@fG.Vd cxZYZUM#5*0@A[ I( er$+lUPV4%mdAbP;62%:WD!a5aU5J[dX u7iTX"f.:WSV/ǖ+sވԥMht)\=VXZMv$nDzۨ؊1N$8(\i _y QJnWՅ5 W5s2q^(h#:)z/RyYHfh5'$l pDm뜩+ j$ԳJ ud*f9% 9|kh%L]lrں20Uj3RE$c`)4WgZ(~R䒺Ymf0"Vq84@<[YP-FIvz)y)ZR Cܳ ;hdf EE"e1)ýq<Z]YiBl}!*!(}Vz CRϧ:ǑS6fl^xe!5>㈑PvDV^Q^A.e5%Ysv)C*95|*q?hG *7Gi=o*;@/Ȕt XW4dbVӬ&K*D*x@LYs"Xu.VtMwLyv7s5ot)j`P*EbrU .+zb3s번n=ؔVj'*զH~e񘈨\ٚ( CZ-^H$u/p4?TBj7&yVnqBJ,V,s?&+)62r/W^8>>#yS!: 4hLᶱΕdf32ql/h@8 Sz){;2&<#QuA]5*Z]^T̑5#˻ڍy!KCP>D;fH><1 re< =ICp @!5TpD,VĮ ݱR]PoW5d@l':JI~F ";+y3jq8S2QcKjJlr48(WY͊_HPvl| I^;"cbOC>Iqȃ@ޅm[>y0*]O*n9vۻ єǜ󲻖OQ$) hF"dDz < /Vb<m`yNU?rS /I%yWL5&:CsDqc1@ؘBią/`X+"6mt@9" p1MF(M2mT&͛iz0eQ:$q|\bW{f>(،rk@]l//_>lcU9ir݉7A6aj1x'hXiRZg%Ȟ0*A[F+nXGGs5CWŒ-(}? :i$qY; UUQʤĬLߔK X-sh!Eo4&+ueAb9dϦ5A78pcKήd|d0XFWN3z&0bx A{4㓛[G ao4L|Oz}r{[O:vnmlK_l<,Yϖᅕ;+^{ҫSK2K/-.x)oqyce7׭p)o~-__筭+{/=Z]XZ^b}+.-|+;Ӑ+l'.ٛl[;[+x/[pK\PSg]6g_?Uj{-?ʹ, wŇmb%py*ݾAƿA=gد+Xoa]ثjKAbI [HoiCoR=]8;O-ܙw߶ = uh7569 1gFKNKwVV_ί쮯N=#5}4vU3?ݱ/OqkKƼ 8ޝ*>e%4VWt>c)ٳϖ-+J [kC]\}7wKY<~2>2C]Yq+5]Vn]Zn;Խ]mZR7~Oùqӥyuz~/'C-q6,}vhheg s_"ݯ_/;֭5:[|꡸nav{eH~!oo<SϧN_kto/xg3{;M[i757-NjM2/ͻVVGZ0>؝Ս՗]}ӦB0Vo 6s+Nnl}~obj{zo:~ϯw౹+w}fW~zռ߽c+o7n^` @Hldo{=lqka=C1l W V!ޠa$|ocuﷱ?6zd~u|4ϰSxل\ݷÚ7LNa;=^5_oWv_XAjžZ= nXYpo0Vr2vǘrf>_飷zڋ:|_>k+;/&nޱ|Ά*lgo\YG{KG};/w>y1|>vW7v8֮l)RWJhzlwk]᣷Zc nnoSn~˕*{+?n7zi _Ou,PwVg#bJu`f^~mݗ.?luﭯl|w|^o|׻ ]YtYq5("FqSCo>S߸L<ŧo??v6.fvihnZ:*)|3Lw}ˇz`S \m BSb}gwwgoڠkX,]ٚد[7}};wohu[NbHvU> CTG؏P*3@Ggb[^7יbnec3U]7[K\_7~plZAy]WqQ3% wy5E]ƋS|14_c<^ϙZmk_/!f&ݎa|^/tsݭyD݅n~Hs \܅~Z6;nZeliĺ܃Nʍθ:RzN ^0Fo{w1]LߺqcV2 > 7ҫMnoo\Y෴Dׯ`?~sFc<.2sfϙAS읶&nZ8'8pI.2_rP+ܭ,m.P7Ѱ)l|]]|~OЪuV&5X^GvZs^oͬ|s<ӹL_~s|6*vGxn㼙<7a?hr[[0xy},xRql/llƿGuMRq] 쫺{瑺WV@&???llnl/{8ʯf8v[j|k;33!>?jO}/+;1_8o].ttoZxww#4?Cul]-^>;q}oiw^x׻{ۛN H3o:u:ؗ?QW7g2X_oߋ:'E__G>FϨz1[]|\o=?9G?GN1nٳ[;IOu;Ӟ;x(]؜Ͽڏ_Ǒ5ev] 8w,⳥퍕SX `Wg/͂vS}Eu䫏ζpqG8{٭O~z^ί}?]<|?8|ص͟_'uoqdwg|s|z+hhcOc?._3//>ykc<O~8~ދCGͣ^/^_}{N~G'<Ӊ>';ӅOW6oG|ztg}{?tfv\?f՛GϾ3>zݏ/wSo\ݝC8Fɇcg?gȹWw?w+G?Ń<8у/X>kܿUWN||ɹo~~7??=_o:qyO}|jѢ~-wOo_$}G7oU˻}}iInn\/WϿ>CfR~tSG}j[Ͽy۟yxt_/?C/Ŷ=wֳs7v_^^;{O^\z^>/_ѕo#Wf.|W~'wN?r~#7}wG7on|Υۯ_8zؾ79{pܭl]_ᛟ/=vͻ?˽O}zoi~GCGl|׎?}/}Cw^W]V~xO{SO=^_<|rW?>yxy^ܿګO޺ۣVFk/|vkÕ[[3_=;Y-pڑ?=対A~f?̣_{ep컯oo|z򇍍+_yه;[|u͋?x/?~}Ny?w?>r#,˟>8ٝ#7;G~N7>G/lh?ώ}CG^ڸ~ח7>y'[=;qO~˓O._Ω]yvktӻw³e|yfn}Wn9[>n/ؑn纵#+^wLOo Ztsȧg.>yyw#oݿsig/~/gO(O}vsǿqOy݅myFq⃍\>ۺ[Wȕ?ח_}w/._y}Շ_w|C{W:z~'}׏˳Ý7.m/^{wJ{Wc?zm4}\\ O^={Ξ׎ޡwݭ7[N$=^?~ʏ׷<}rڷ,zlԏO6ՓhuVvw?Ζ\fn^|vŵ[O;5G?ɣ;Ǯ>.>8~˫?_9Y޽'\9þ~[=ɍ]>?ia8ذ>dҵt.CGϜq3_ݿť/?ʸo^>{#G}vԹG?ҟswn|½Ϫ[ۣܻn޾{'__}K>~X~y?ǽࣻjZ-ʟ,p[ϯjr"{z 0=;\OڦVLklExNgΞ?qEYk=_0{ЖoKPkV680JzDArFQWKI5b:#,{#o?pn&q{P:^zrҡܛIP&f})lͶwճH#y=r}yN*uԺ]R4Ɵeğr􀵾=WA~mx/|V,ڥ f]N3lc'N%ו ,C& ZOvR ~j[N3GAyMWw4Aߍ#mлW& SOٟId oaOFa,b7&H3Ҙ7vF!ӡck+Dћ%e.kH/uUid!N`w21==lE; tzpmۑ5΃P!EoHu,3UJR1;x[mW?PMpP.TkĨPNp󻹅WBݧۀC5ER͍g?}2?#M`MDW\q8eg,PRki%22AoEdVZ[!z:ŜpA- #%SxZ^HT7g_z ƒs~һ7U r|kjR{nb5FX6*(bi|S>X-znRMX$P;w#xt?\d XA>M AX Ktc[﫴 J}Lw>+E5,JEhR?#m=\a("G{IGpt'%,-7#9%-=lQ ;A.RqvD|{|S> jUfam:ob 9!ׄOU{7K%SdEP3a_~-ew8?kO,b?G'YRdC=N>xŗuI[A~ 5~Razܔ.O o)_Kx(^vvS-{f-,jW^xM5Gb Jw²LqJND&Vn^73W*ד̕BJ~M$EZwĭ3)%i«S^ؖY"n6׶hn$Jή1wRQ)a0YQ ɭ` o-ld8id%l!Ǯ?dr6~>cq"Y@0^C #^A=~\ )X:Jިrܓ L>@p "f cJ/jH v=.e?Oyspzu~q%og売xXbߢ5S7}ЈGj-T|iMc׀2]kНr)4=nmmA@C7Rƪ|K{OD&Nx nȵlp.v'v'wnueeۀR%$j|؇pK_LsܢH } \pAm#TH*sQɗ’-JKi/ b#):KJUeO)kAcͼ>Iw#Twc.IC+K|WU/z|kx[nFTg4}%P.5ONhr+[Y 䯬wT&7QqϺY ޅ)H .uܾ J yjm%}ϣV@XNwW̮S폳ذ *|#l6e:=W擯Mb#@nl=T@MUi;?|^_Lu슚HlFb4_#i[`74喾=ko&}Q#T |YZNvuy{p'c 6/ZtLm^5RvCYol *ep:~L-E[)pE7xlP⾒N+{vGyZ@13SKc EQ)ysR6']]9R֕A0( kw~MM:ո }Qj,>}swZLe5a`:.:2d|~Ejl|u7RqT0իtglY[żK]Ynu.EN'<V۵KG? coN=DxCe]UPMfVrZDy:%Ў ϟqǾp3fvUARvcjVSKlAց/+QH;*LYvdA_T~Y~}1'ή/~mD,**/9z z掀$"7.֞"RPpsSm޳jkY1zo FtGsaz'xZHa87f>V̢+_C2UgLC,%F>2gV"s*Scu9 u2Ҷwz[? ࠻`1Óc`] yKs9ѧk.Pp(iY"mme%*'wx6|,#Ӆ6X~hnPԘ:'}*+N׳ S Q Z+ȁtz%=-RC?D_'qPNPc闿^,iN݃L$(/j08;mصQ^䭚}j i5涾G}Q}|zso ]M=2?oɉqG3RW7[ֹՓt׺~v?՘%`s.JU䦥1R[]l;$0@C/zW|I:=ݩ#ҹ+:tRE^=[/|l|W50gZl]8( MZn wy2s,rp a&9T>Vr^+F]+U4YWyߣ]-IR_/W+Q nnW;=yE!c*@졯 dȤDqnn2ڰZe$`8dOUfO[ser}/{Ҥ7_oHm9ڱoϫu$v猎W@-/VFQ+P`3:B'o (¿c(Ѐ( mx]blkVRoMw }-bѥN{aHV -YK*%cBIך.{*Ϣpwdg !o_eT*^'b2EPqn9< ,*8y2',J/,-Zb%g(Y uB#[2hd:jZV$vhږdvP V@ZHl5$3]wT(OXJLI؜5zDW۪0fTnC Is3e]n5mY5}-"L-CV?PNq]Hm@>긭x5)Q@Go%C֘>*?PA9P|FHB[|;Og]>LCՠ5` ^VP%J0`\ޑ&f: GuƼZհ֮="rX6 9bʯ\2O ^1LWu(y *zE]u$_jQBjg.*e"h #wQ`Yj3mz ^\dۤ@ۧ /R7Fؘh"c`H\& β%6]OBRj-{ZմMQJwhtD bs\H4 U(Ba/{6QѦ: 'j)Kvo$f؀'RR:GU T^4EQ5>˶ĠqirDYx~:w֚igp,sZl Kw!e_#U]U BL? kS'mb֒#F.A{JP]b7xYZ R{6Z+W.i>Nڝ#BN!ݦ ͇l*}eX)IӖ8K K݇7WL kp]P-0ۆ(^*(z^Vh,{Nxs^@'LdH' oUcv&5V6ƠRgTxٰ@QC&PcTJ{Q螮SYс'Ui!懲7|?غ;H7ڍU*]O`01+p&t41j^&٣ʪ+0 br'$tŴsMU v󔹄W֜^ |~W}S&6zsL-qèWtbaŒ۴1n/dB j-]XynmG1f.{nN=]FIg1ሓ)YUao8zr /\тU]ejIFp?(;>wȥ^ΝtUv[%-z닍635^#̖ 7xUCS~%9cr΋qv$sO6`ќ* i HUn7A+n&=_΋"G1-^廖9 Qw/VK`sCUXD /v!-*#*_ud-WvA[V\gRlTuX(ڡT8zz=uՍ=>m4-i]Xxa|ڝzU-3?;-rWh/+Ǩ f^&q!jp^ "(l…Z f?TXj@T=((7OZ)ƿ.5(HߖBv#} 5Y@"& r&VӖLsMœl'*lU#;X>{ wBnt 4A]$H@eLm|F;bDv.# ^c.F%EKx5I1{I_Rs3[C+m~;|2;fwLylhE~2~#^|Z  N}hj#7tS9dAK_1{X_>9OmjQ){5yPVv{T-x~Ջ|8ĺHc;G,Wnǹ"/EFj&|UB{9j,ʿ:Ѯ[CT~IwNYQ#L60TT'MTPƇA?z'j|j٭ W1ڈ?ϯC DL¢`(-2=˛3$yRV6enhnԶr8]uvʗ=t֑%$uʼEV{״:HW%!u/Aiۤ\Bwp>蠙7"=2/?%BխbJt(";Ay 2oj3Sl|c=C8Ef0QP@Sa?p!纬>~E.wڢͰI/tUkgRYe: ]򦸻 6%6F{6ZѕAy1 (D|YLH@haS>cMBj N3?LC3njU +tjftYiİ h AiSqH@k0zΐec e"IcXPKRKftD:rG+\U{ZzYۓׄ$U{Du{ר4;xL;kwT?6l6 շ5p 8ghP(‘Ozl% S<ku/lx ꯞF;¼^*܅ʌ+ {s_ME+h^cpzOߥmA'x׮_"85TNrun*b:|O:ǩU] V*);qe(6|/ 6O3/X\+$ nc/?YB<`ِSl_-쌥|ڛ=}&_+fcBcj=9gC6O1%r{wzywIJ]ÇH׺.OM xAXx۩~Xet= #9J(rиX*%gv^r'mGۯ0\1l#WBA!X Řo,Ƀrx?i" %o/…hLTy*beǃk&u|m.{L6@ȳ/@4DS5|>dKiyx%#L( X׮z ^G="7S^sNٛs<ec[ <6;ǫ)쎳Rf\|E"KD&Ζ% @*9 {,Kx~KnZ؉<w&X[YDN ?IQr2q`3m67vvjg? "€!}xy{>Y* J"x*-qI ;2]$}@YXCʇ؃3އxGu @ M2&rdENzմVSh݇n(V6Ypwq sY\m" mF^P"3]@ש>6=JC}}#Gꥰ4F#gvޑ6yeʕϒE\JzB{JeG68-VoNɍGML'AV?>k%>1ט6zP|? jLC6ߴ%Unf!D?0xb^lk.& ֙lrdҪA^(y1676pSzNEI˽Ǎ'8ᩬTY(h2q /*k";2T4 NJJǕ\#<5 y5`I".8Ě7c{ns"庴Y{C(w#algP:b%~Nhɰ_F5%DM%'(Ū2Jo4z iEv-Rޮ\{W瀉;|NS T){:Y'F,gwZWKQ7=7]- k3竘/nK5Gx0T_6>ZËH|vׅI61gI[\o_ď@̈U@y]Y*泰8-0n5 ^SRb ò?O[=&`(gpN n*#y!֡75?,eC|wO1|̸EjfnuMϖqq)c켪宍&}l%1QeS_k@E.u^X;Y{8Ǫ7R;T|n2Q(m/Z[HP">;IrՎqw Jy.yB^\6iArf\ AxB7PUS?ޝA4H88 Ea1HZ˜SLVX{b=G%9wZ^ ;ܿi˨M7Tdm=/ȧ>:M֫H_Ϛ%^^yYڕL;k )N"GkJ8n{YZ^Ve/:z)NN'$?g#Ԇ.pV?kM!=aJ,02% |ҾwRe\R;b=UH6<&ҡ|ݲ]]]M"MhQabj_ AGy^HosM*#,@&VB Yj8.+{/زKٲ7XT[l!2 @[N߈#[td'뭿o ݩNbG7r)?oVi7Չ'<+@C<Uu-F;J=l-XRN`V C-T6֡jX S=ֵ7ĿW ec',4yYY)c)ulrX|WcFYD*~ݐWZ}T{.WBɿ =,}(KǓJ4h% ^ 0>m~q+sݯ!d 3#R.W&+mmDR290%@DcQRqjZ ?]ؤdrw5-3YvFI Z1$? ]МH+&NOzpiJڕR6es)Թ5iy%äQ## 8"CI6c\CFm1LQ{ޏ'.(5𐽁@})7x^g;[bl^%_5(}g,>U~ěMy'IK7ST%5zZL8G69dE>/mbvwOOA/,lbM lp*5>|ϼg*/MOF>!Q= Ѥ 9evr(0]ؖ4躆爡᭵6sEmH편\{bHys/j bŌl3{Z"DW(v=6+ɼ5z!)fh0sC"/tQw4]3NuiZϵ_v^͓r" ,VuXz{ >Y#H~DhKZ?\\ll(y8IF[ĒrƾڵiăTӍ<:0~Y;gT@qHpLɶ+AٮPm&!wюT(ի&vMS&]cĩS<7m29;$՘mdY;{YGa-5(kTh $ϾO**hJJPяkǙJK oZ.pzQ+3RMn/k"oXXeRng˷RFt;.TH~x9\ٺgD[͇!ٻX`1Uîv}7šR[zI\g=bG5p>h;S] ʄ776|Vœu.^SiU~-Cs?xW8W/ۣu j 1u[rM>u@1sI1o=ct7 w,&?}h)EoB\In@aRɧ{9\),;;HmivjWKK `+q(+ znSauL7L_Avl2[mHb[iBlb2(PA쌆}#7e\2$`Wrfkym?pOBuZndwQ;|Slѡ`$*<HU;@T3!_<u$[kda-f֝Fnc`죪Td%}kRrZ@ ړ/9A1+ZC9DK?_?wg\f 7^P̌1aw~3Eb~x~4x4 o-II baӗFwK\,2׭5ӏZI3yu:2ͯ }{N 9E7m ĸ oz9{LK$%i4 KqcH[1ό^8&vG@![h@`%ד_ ? K<4F'؈RWmvrFz\zG >KdkS{|J5/ӡW|9ƀNkj/XVEQ9JPX)vul7zHȞI\SϳY1AŻxC#0Նg|R][y'q  T2\GǍT1e:tUO;!Kʻ_qړE*/꩟X.M4{}ѲF̵YyNUaV}7P&EksY2g ]ʥ3 <^iXB endstream endobj 129 0 obj <>stream ^VBWTL~䷖bEZO'IP-q{dLICjk]I{FVjM&FWʷYh}Uͯ#e1އ@Q'GUX*b!.%/kbQ0~& -uNϘU_sPoʈYLkpg,.G"KVxE#˭Y8Ɣq:YLbIq` ZiWvwjDۃ-/yo}|̉8Q\#..Qgr?jFt?l8_α[}u yF/}A֋[JЏilv1׸r̢Sb nC{y*U;ZgvJȒ|fi,,aoc=Lw:Sga7ۤxF7s57TaڥpⲔ^B95s$I`;1RS|ͩTr~ 6_U*i.E+}TDѷо<23|=ؿk( Gi}\,4W}Dg4)jڽXz--+|KZ\-۹W'Ya8&n.z^8Fn@<īT=}zNE'+s^I8U4Q˖65 ;@:rE1ބ#n={網b[k XnֳKAlns{R  p&}IPsQ.=BV9mxY Gݵ~LN\F@Gº]uol/Z5yPqL^UE(PD;O}B,=w-צʥX_Z]ZfiY!G0s^#O4nsix4U?CHq iEW?<`Il4oo(Bo&Jgu:~k})|E6fU!mp٢UJ/G7>盯eڭz~'D@p5<$膕yOu8C:yt*/Œ?pȩT&/N6_plYs#/f M<юۍ4FyL6:: ~uN^J->aݮCrN7}={}'f(%FI Ha~ Rpj?[l^3SŅK*=D 5%L+!JG/vCbd~WӚ(=h}=4#En܂+Ia72(?F|o}P{~!4q½_}*zKNH_fzmxjtb'5+UV%ǘDz|-`!̠M"Jʊ~L8FBX+@@fNtwYłOP=%6VB0m,澟\:__t#wyŎcљ;▆xXq}KǐFYc">y-;q]W;$jxgo]i#D G/n$ݠowM"c!*׷vދ"zi68.*c_\ ž-̮ea$5n*'W` K!/t>`<+29@9K-9S_EdStTX`KRi-' Ev0$zP'"XO B4gDfL5@ij}O/פ78+-Fz&V(d}½d|+} eʡ~ݏ96ky+@õF?Q8=\W}dmQgyhTlL11[A9Z[2}9H;kPn\CO{?ƙ-P/׹2ݥGw1Mcܶ_Jn9gk}ظwkHy$* @r[=]É}w,9GO1pwZ'cw3Ufg>;9Ooը29m烖k[oRۅUYƅy特ey7|d[)Ѱ> D)>yaU.UٝUqq3}PgZ-͗zگ;-q--Ij%O@- Jz@PmL?_U>_,Ԙ:{M+&/7wI-8 k]5By0[NBشЖB Z\V6为oK \ zs{DZUw雷Nߖ~g)`no=jtʪ9ݯ A볮%L馤=G7)B/N <&;Yyu尴s$hm&j"K N\kyž`"jۄ,og"__?[LZݹkPX/_cϩ]LjrBؘ-X>*VMa̍㡹&Eì_EMR >ʦ\~ԟj$⵰L$T\1^ !Ckxp>\)0:R:әN*w&<&C~xaC)e _J w%CWhGB}uX7Lèʓ KtR+T]qz::~j ݚ'EoZ>m Îձ3Wi2fzo"f^ZEY8XHUy1<[MUE ,(~F3&uB{Z5o)RՊ ϒ hrju* xb+4UKB#ZUoD3UҾdéP_C_>Rh6|ﭵ`FrVvR̰߫D#Yz)kWu+TWnF1 \&ZZvڽp`+5RK)iU&7.yK*Sl^iׇ=. V/H%WJz]wO_(fx?QNUہwR3ꓼmC8.@'Yjlv9%|ẓbFMAA@%aV]~ ٽ3b;@G3'/W^OJ2WK%a7+f[Aݓ*4߲>uS`Uկ2}XXDe堜 zӞ{6{B+̗KFU T|큨6f@C=Y g]I7A847M76ڣ15ޕA")٭׃^G:~e+St4tz\~K.f؟"c YwAV]?16,DߚĮ6_3=14#72U7]:yiWۖS]0?iu xn?kKQJv}p5Whh0b̦(.#%_\]'i?;T;#P=I)xDŽЂW?m>`gfxLX:s=+ ZۗdĩHC<$zse-RxnT:L ˇǎQl:z\iE, n$t+".Mq"$Ÿś[Nm{mD9sI+Okt_rG$6<®[IbܦD0p=Sg[Vy&&o J-X.z;zS#5ym:hղ%ז Pvjgm2k]1Tj־zׂg"ށ_17;  & zquKAmY_;iot6tV, uoMuBv5D?NVvx]KAs 67p6Y$1z㹍e {v3,BFM|-sV~8A_Ʌڽ(A%?ɵs[ڤ ?j N9N>0HxWL7D+AJئrf׮ H7\6Hs Ӿr?m[d9#zTaG_KճO^bwN(4֮ *mIЉG /Q#,SN?k.\ 0jtuǓЏg\FqF6띈4 vTηzI@guk˚`Z$m? \XsFc] RqsQO( gfHҼ#ge@3?§sbV3mv)37غ|jFy{e0hT6:Z6u(gIkL-? SnaJ|G*Z<"S!p=MR-Rrz:)tLWP9n9ǷE b+Mv7'~4Elr1q)$CVmxk֛C"%&TH4Ֆ|9o' q6/x妎R ֩u}u(?}Sal.Z҅vꨕĬdHn?:Ժ1ڱ kP>Isu.Z3{"M!bG9Lϴ%xG?u>1=؜ot/&~4`FG!~H D_U;,V[)tpņm'k_NCB͕`3 ̺$drnyQ /%P/XSeȐ@N 6v̸ $fnW^#cUJga콧4n{Sv%ij\d=l5#52@Z\1ܘ!5*h osEGeu B=_}{y{WǎSv vnlx,P: I/ / Vɚj;˃[Oͅʙ}p/eB5AˋW/~}MMsW]N?>UlQOεu6 u [-5ۜR4 jnQ9;P]ofc'bq;ȖʕgB^_W43RTrakTs1QSmv4F DOQ+[j\2$Wpc|Ynlnc(YO]PhT Z%Q:]윅z 2ҢcCK\l7N)0{v %k3D"naVUg=JnB Fm m]>Og"~|[6|>mM#m꧌ں=1h$f\-{3&-͕+,b \0Ҍ~ati?o]F,³Bz=:w5f^r^i9|Ӥ_%`ZNҢWP+&h^4&(dNa)xȭj E \q6$|+KPZpmoW"x/<˛H,:]bpj:3Řc]ߜtpaZ =Ok0Ts`T0 y' Kx%+Ƣ;RPlgX "rĆ)WR;%ȯ2gE ^#rTP:VSuoL_s? aYT4(+i XK~@> 9_`h {;1w2kA\/_C&b4Q_a8~•}M+ؓt8һsPiͶ'¯v޿r`Q9|6Χ1 3bjY3֕]9\}t\|~ فFsu)S˭?}SP8OBBTB4a8 u*bSismkK>+C5{k5jU~>xSߓ٨{RHkpEJgpZk5a5y}ƪ` 蟟j?icGGFjOp5s ]U=zSTTtvzX =T(`[doƒpd{w7!" GZo,\܀@JZojyk)6F'Ce:-_ =Yy%mbƙ U=?/p~d$23Zaa8=[ p n| !^׃U'2rך hauաSQq*RWsLcg /T+:f)T:\)a`Ek7{kׂ3$ujݵa[XtK@äFctYٞ@aN{_hV5NGKMN~|a4QU7ptP po?.35:F{ԏ,(g7Qfv F /#Ee}eM[4 W]1IO_E.y%< `x=v |{9X^w oQgM4#\4q׎dܺ4;ޏ 3u*{wc!J?sö}SyLw MYy<àn .r+xd{T$1k{4b`~Wͮ2YWL  mAs.r<\)W~lܹrsŗE;PY]äAr(vt1,h{AÎ*N|]Ef>ʽ2KyΛ@g3ko't J]S-wy|ygc8x˝X9>Y7=\}ίcwEZ\5k҂3N:mqƜHٳU^7ߥߕkclXX4p\WM Xz]e4 Bwe׾MHq Ah]o]·wVdj7JvsS,}yADM-6Xo]db`5b勽/ZWSh{,P?*H*+;`[ 랲.A.V矦}t+fXyd}ۗ3y4|u*cG>]q)L%YqP0 0VXոwA)G\-?BX u{ݓfz{Ntb[n6|׉o>Z\b_-|NnU|;Z}%[oRf-X@ڬi53X>A \X$<̔&}Y2wꙇߝN~&u||qv,( ~wJ`cKi`l0>LGϽuj7O*jyW!ĺ Hՠhw pc|T-+{Za] 띭yuz6:Gt`O$Z {:o1m{I(jV`O!_uvĔse G/+'{LFXCƨb_y%.M =h aZ9<1Q/_yg+f,*r{^x7#|`[īu-c|y8a>=a^P=͍gަZM.W&Z@JWh4YmK lsŽUUh9! ;p&vχ͢}F/4za c l+t8ݩ1I<< q&~gv4"VOޫe-CWEbS/Ji}j8j/,JTux"4=ϕA3<ȹ/1C1i8v&2UO1OѲ)ƹF~KbK\WK>9F C)bZ{MMT6-? tQQcٕ߱2̅l +X ο;wOrd, y؋面1|N&3Z)e&yy_Y 1wjkK);8zSY}?HH P$9r9ڟ:7ճ欮6w! 6I 6z#óQns=k]Uc 4aAʈ3Qn阱X35nH-]!ds$йx0s J~ͻ 3ɜa/ezp BDvR`Q;(#n ;Ng *r&TݛV2[%C:SO[Y%/M5&s/|VDɕMh@ui/u2JC/4OGiY1it(_#Z]o:̓Z<ߥ'-Dh&qkط"h+/Bk|8hiPyy9й0uSyhyO`~gӽWce;_f + +^OܻfV3N+jZ ۩JfwQ+wN_}">#/f}h&.n,së-oq2sw\s9zlwH (;kX; _j12 wr KA4UFӬKBկ?}N˽D^!cr.˂'=g@g.o wNQE;\kTA[-xD<`y:ݦvˊ<+)2O[2au'VWヲC:=ěYD$$9@ڪ=ٞhnq0.ՃB\F[OrޤI= 997k,ebPU+,dQX4[cKI4?gʾeTs(PNDL{`*3lYb0~ٷԲwVL)YsצYn- ɿHG slON&q4D7'P]7}O}敨03C,@lKSɮsO}1]puzja˛\2_FJL"3c%c(DRכvX4PB^c NK c*݀xPתjRΣn tck*,,l垮u?'NQY+RHѢBU(|^$/Zk ЄoU|θ 3lWЉ㲪9u:+i#WV >VssEcۣ`@3rٔ^{Ӕgcd[q_%;s=A%$RKȁTQZ!O^}[ :\]{X-^kG=*gB+ ڰ޿XuKTӺwCs7 ;֗*NOoBLbLCőAB'>[k 2^#srf>}6!ʆ-0P+saf%r}-V̀,1 '~ڿsfTSnH^|i>WeVql-M_+K?]<(8I딄\˃sɍbc-aCE\Fg3guW}ɏ!&)#:p1R%I=G vՋ!fBF_ؓr9T=N7~$Y6Z@ ɬ.ߞd/,9-L|7 ߰'n?hK/]WzVߦmO8?% ,O3I;s{qknCw ЋZZ.ܻC1vUvsWgJyɮ+ОZ- ->Ki,)r-k7>H2~%n$0eLyy H9_a5".p*SZjgVi UWs@rPo}cue|@bA=#/})5٪t7L2պ;^e!^3\d =0hؤ:13p'w [ /(X2]>ctvҵ[~ Yymw+ii%qWE. Do:2~>Tք'J֯U%8pv]~wRo͞Cpk*lKUJyJ yduՋH!AC1<~jeQL;Sx= ;GJHr۶ɟ ] ML)ؘ/@ni7C07֒<|Dcl~?EKc(U1b|uheܻN3Gy?Og챜M]8kY2y;(Sáݖ)vlA9n 7}~poاӄEnz6j˥S= L_gn]y!.]^ 3_{&~q+& _DIekcv+JkQLzr-ڰMsxyN%_5p$0XyNI=~KteIDYMNNC̲JpSfӟħgp[m PqsY UnБmIz?l矪f S!>^JJp#c#*eA[;@L*\u-vCPkh']୨;96azf[>,&1He4Z~f/o\Y>.B>zțZgݝ4|g,\E*Л vYN_V$-g8/7;8e"EAdHA%Ì̓w7ft~JdqvkmqOwjsc)aȸLo/BXA}pM R|/ɵJϠs^>621TCrS5ҙëw᎚Nٽ= i69ɟAYz5kQgv P}aFN[GhCi=t6cLɶzL"1u}Tvy}ue9&Lw]͟^LS*v2A3m *.&<;ز3X`֩>ڑɄ_:M?Kw[$ ([ EE\E?,OWrW?d*] WNdHh2nAC6d ȓI ]|jT2eQzބ5gнpcrNn1VZ&\zcTUqp;/{5ivʋMKo:?V$|#Z/g̝ aM\d]3fwG%0MfXw4bRB%qPMỜ"W]Lob*Y3N y^]7`F8Zw$lJau>[y3ZQ`PxtlSqh3*-^=i'@Vޯڽ=8qvW4J%hc0ŏΣb DK6C=C72`B݄{=Ӫw^wPóo7q3^o>ܨTqPr\h"rwZ8 kG4Y:MnN=PEb`ټ}I Qw9VzNZXv i} x[* ,]\RioFys׽.}O3O({QZM[i޼rpS/TG.6S?|:RJ@5fʍ!> O"*ԥx^x]/nյ\7+zt|y>JyPeFok紌$@I%V̎Hm]M㐳#Hl5{]:خiFmݷP2 < lZh#MvӺݝhjA6j+{ő5m <.Ls J9bxhg1~Q:Cɻ?U6R%j~SnntiL09ݬBBM,3)h}-ο^lQ63℮ e*4W9!lD{ Allf|GVwM}hvALS(/03?z)<@wu][o]!WO_`\1Qr[쳅282{Son(;q'o%<9jmr4;A{߳1?wT7RvÂ_cۿ~Nd,}qۨgd[Vh<l˷>YTh1ܠcWu[e7+T He`2."էY=n^7A ^gRA:bEe7ߺExw?Jn{qk@תo@NΩp'jCܶ*^5lYQyx5wV{MJNUŞJ )5>vY])Et[Rx%j7@6VlJd|he| hBNxYIT,-CP?~Jj$/.8.e+*഍U,~S76{_knaL1yzC}o%0Xj5|.=]Fd{'1(ΈNa~ s1_ #8eI&l0t]H?kvܗMy[1#bMFgc|}[eRHtI|4sC3Ӎ=û/8-aIO\}fge%7!l,y* Xvo?{i}bI6>azhw"Wޓ4ki/ ̰GtJ,VHح?2Հ#E`? FBx¶Ou\l̀VyȬԽ( ^vp] oyH] L@fjcZWHӸT9~`dvU1yu&H}pD~m@cN/;2[>v.tCo'5LC:~NJ5"c{ 7;dU3P~O@h/I:ь,R4k {}s5{'+Xv*?D)!=r{j(%5Karwmg.mTRݯ z#2cEWz9(o^>]6XwÐoVtAOt)%"^">V`ɫ{ O3GrQ[.B=Ж^:\uUL~n̷k|b ?+ln0mnz/xGM,vu+.F\Enn\򓆯Ηz?@tqWjT̿RVb3jr!bkHkx)# 6H9t/>e&lO1ѝP`8NnxzW?fRtj)y1+א 6ÀgrXw-TJu/"پPAw9;kM:kݦji N00eMo g_r+%{=~Pa %R4ɗy6[܁$KU6'[JQP~TX0 YjWA[3KcH»L3vmW!4CfKd@Ī/tނN7ƴA/;vWMN}t1q1fٯ) =_f Y|T{99:Ե[|۱>`T6xeh6QVׂ2܏C>$ӓn.(S!>Hʞҁ/ al"QҲYEee:&w#lD|X=kΘ{Yx%sxZqyt2^4"C'BEE<7=Fmwz H06_Cf'>Ůfb=,IYl6' |˗hFci ntr%8܀[:Ah U`v9eNy#xp%߯e/laپ>HYˣ ',FT=|xZAyDJAa88u8I[߭Q1/[g R?;Wsj|p>u.e9Vz'Ú :kZ}O_Pm>U1PŻ*2]EhHB)jt8 WM}l4$kx3Lf5Zep6߸rXH%\8-AiG/Rvfi}ٚlNbOaB=?Y;]oݴm SU'P38z}n7Mw|e=~13Y"wM]5\~A{Ť`F`dWgZr {]Fbm-ZAAGXqCħc(d 2pȌQ C0 wrkQ`@Y?QǛ#Z.gKAK) n\q[i&bB@/{\=s0EͲ,X0&o3 .,9{z%Tr!%Fk^|`-䦢!'' 9i5*g@-=DJj۲q l5W?{wV6'(6>"S%OgT' l@C_Ř~o{V\l*QWj۶cxˠ?N0bj{-9wZw~L}E,n:!=M T*9)H]<{g:x*$BB_\ݾ1eOO]s}p,[B(|Y؊n=_ŕǴ)OAQ3oufpT[ps]P}usڤؼ[]ͷ1+r;4IܮUa!lkݷtc}0=e*un*aŕR~ 6՞QO>gPQ˱ӔtWWaYTf} ?l^1mdA[V֍K$3 ^RVF?*!")>@= @ҵ+kxRV2:) 𸦨B( ,sERKiaeY&/#wFHZWX׹2la7`NLH3YaRZg6S%U-9TL-xgr|W >Xk oʮV6AkYnL`J΄Ǽ)S5+6 p_ZKx'gQI-'ok a>mqyl7'E *KzE2ScHgyTFnc>ڴS0C6b5UXg*9EOK<* -&7]QzFp:>`hS1, ^-Khi@TPܽ]ikӋ:Uu$6e>^ ^)K}؜"mQ]nB.yi /˜B`I;Bn\?<jmYKb,t[Fv[T*Z~yNU#S7U֌P;hWL*Tr2oiqչ ޯ{h+ EKߦ9i69ʁv*e!%BC@hhkO1?Op'Jw e"w%,ٛKX͞qPZ~m1/!O1ۧ{|{݄V9' Sf7hK}*u׶1)?0Z78 ςW2ȋZ_DZ2O"//"w1vth`shqA2Nmբ_Qs.kMsaOv𬩵Aq ZvkU#u-OBw;Q2wR\q$W` OY-Ӈj0|ԶRoĎY֡:!=^+|c#yf>\>IeBUzݧr+=E N+Z*z@]!3LyѴaHzZq5rPHKuvFQaikq/v.'T:r5JW{yhsKF"O[ 2cJf90OYb`T!xVk$86cmE7 d>G:ָ<2_0sc_Mq,riղ:V-9(Zn\ќJ'T!Rk͸ u0u3m:%lgep{_Ri#L-Zli^ZsY8M\ag}!&_ErN ZloMB[;pLYhHY7p7Sm\b}~V,q2 %$(׻QGy {R ,4|RrxYv[cQ=* ~P(k 9yz=VD y2[RY|O>8Ʌt^O~n51!nMFo[)8ȳ'(>%ڿr*:=9T2Y߽AۖQG;7Y[p&̏¦W i [ӿ h]M=ñ;B?hK0@#뻠E6kǶ7j7^74Ϡzw%VzlQ//`+ءx  ,ۑ<=ԡGtxg/:(CexJu(ǕMF`N6W~LT3؃ =JmN8X*|L5tB;ZTf2 8UfZneއUxjݨ%\pQ&WbU~@dc_M=-^ 1Xntt=&=W >+qC5x׭Z m|4՝:in-e2]OΙG-v)..gn. h>ui7(AA^G;M{G4r haffk}^団.OѶ_:rwfFAAq#?yjxRȆ75OVM05{`tDz2 mYvrozvrW 7ᆷQLZm';voXVz :$*t8Q܉jfGgagӚ^4G_Wu|L}[٧g䫘 /VWlC3wăw>:3^pþ6^qNOYX.?Jz˙m*Vdzga_yR}H9V76[?IAC9"i(Ѐsژ~)S9[>ԷQ?LeJPmkI qNR5 G;Ȅo"m;yYDEQِTiլkjs>U+#Ls6n[ I:\ucP\ 2h߼/lL^{ π( #jcKp J;iS@IY@QU e٥K{kӞk>Z!9,rC]jQTz]F8 I='$1Ulpue &ֶ9nʼl3uN6;n?~Up]_:Jk?mb+wRqWe@ɫoAڼbQQ3sn{}_dF&|s-=*?h7ki:H(g'5E{, *)6L隋Q+ ˴.Z)ne;UOTWYZ>=\MkDDoP$UP7[iN(y94a GV ;)0PdqU9?&yC9~euLAjXon7Iz \y0 ;1d3Y"ԚPΣCW[jTKؔ&_t*$E{}0d'^ n -ڦ=k|(G@=xBo~AFd4߳X8+8v%v״ɪ{mߧz*ՙuFֵFaoSakAŻLϬ7 KɨlGgR]<5iLb8 .r]^,tsE:lo5j=<덲RnPyyCr#!1`_ 3ڬNӤv1q}1"Ր,?Ow^s<}\EɷA98E,1;{E>qxJ/GPO{ bx/뽨f˥48RtxCIޥhR/X5G~ oY⣥J4Ie՘ ]`SwE2L;#zlk`|nLpw5*]5%ziK)yq0_W\i 7(38s#$xhwZȭ-8|YVapö2uMȇѥ7Ngs=-\vXcM[3X>E{XGO(OJPɏVe臧-DVTrw2՝tMe=}Y`ƅqyHv,+7U}>Ѹ y5Ĉl\V#m>E$3cڙ@ l:ZL_>|Ծhck{Igi|6lvnQƍ9c%/eag! .?ghvΙ4K.cvPv|4YoS?җ}^ge檸(F%pZin;vqRPgáȎTeBM˯2j6bv2X{Gl ]@^[MA vqp9+sb;٢u"C:vLn"V5.ͥl1ZAU7'^*tnñBWj :MғdY_/]9ĄԚrz*%SL(vDjqˤ.1Oa!cIbm. Ν6q:>L(:8̹ǰ4ߩGSo't,Z=NW҂h mKܬGZ|Au.\9AoRiQzH F%Nv.FySm'M$m \j&]:oGl!xPġB4#wUV0|ⅾm)^/S)J4(hg}8݊&&+47qB=tGl*L|=Tx. ih둀h=Ő."kg튺k.N2Vj+ qXFiʡjٳ''T~p3^ 8ʌ}Ts#U!@*ˋ[xfZ'$ܮx4rxM1u>dY;-Nj,!J276ۻ. d|BL:_Q"^ħ:jPLMuyYmXxIJ:?z%Wz8(K#Ru,>Ѫc{ADtTz9I>L~Cq6rsl`+S3֨t޼3@T-m<|8?ˣ..nB:\8^ aJc_sP]VTF8<=v3vZw˙f׶hK+SƴƨQTjrnv>};ssNOЍ" xڣ V~Mm&S4:ϖw->{s?^lFy*fũ,H%c#h];ɇ͸{woʿ,ZY_(a%.qf<m d90R,s %y46`$SS߄Gޟ *s~ybet2A dJ^Ⱝ0ϱd 6iE|9"\[U./ %q}Uh30M$ufWL!SVeL8횛D,LH݂6 XB+°-j񓇐P htZS`X˗?渶8hr&mݦtj7T# WTR<}QW5WZk8׏?\R^Vu +vj RY3Nan\Se1]/ ,I]Mގ#6< W.Ij Z%"7μ.gӛ6D΃"SG%h~;弾׽A[—ϑRre>w2#,1,yak.1li3m_}M A 2<ߛPuFRU ׊>nM6*6Y5s﹉W:pHffq]oN#HyFǒrӢWbށVӘbg ^>ʡ@Q~R JӞx{V @;آz,7v Ji[HnGTʞxrK3L5$[U}⫞c`N 7E1-#;~ζO" xa+hʈΓ@žK[=,*Zw`E3.xAx[+HF]R?3|KA3jBf̗^DH'¦0Ki7ח-g7YGoC7/y'?WvHi[;ٳUsԊkfQQ)g:3W&Z=:D״}W+M4-[k!IeW4qNU/M",ϊf C D.Bg:Ÿ2^|*rIɗXT_yvNl+TY/ * C/߾~q}a WἹK7~D'IomJ 6ٰG/F`3>axig`Qu"£!ߛ u& {DDbɆN3쾅o]A=ӽ(jۣFعk_l i$nM ʖ^(i%i+[q)\>[!{iRpQu/M#wUySiHw7c g&`".Zeę~ a=)gK77εHSFod7ַn?:euЗƵ|pl"NP/Ƙ <܌. E182C(u"R yV:PV'!TO^[ǟJ`J/ 1w`1`k@|e*9HD< oѨaI sӼ$Am=F7i6aŲ+wT"/9Q&^^7-iݰl]2Ax# z=з ow~lur{+ƥ 04U8c;j ;Nr x+'-uc苑TKqxSzILo5A|5eA6~\58lE?tԔ6[ZY!H kJwǺ4fg+ zx`|)rC>ۘ/T$ /$$, gKrfֱ/+VyLJr{~$o}A8IgGQ*qwe$z  m 3S v*y-}.L|v[K уSKeQ[EJHY Qc&rş^1h9.Fmk# #?H#4u"0)T bcKFsDEQSkN)!/]_tl8GȜYc8ճQCuy ŅRZ2'0[@:z+lKs*YDk7FJOB|Voj/u]P<}~jqFL]c}-*]h W -i)}`uެ ȶ OxWQеbXL苽.*6'l8Uz[bkt*gʟ˄zW0 7wZՑi ߜs ҵ9c(OelAO䢥B 4iಬ릮` <z&L5{I.2=xB嗫-HU~̙xqd0J֙M}:4x^Er6|Ed"M1Y{X^&;z9 o= V!>X:gK'˯7CD, "lVK;g*[ULBm絖\8c#Wo 0?Y49xTh\uhpV?gp޼ԒK(fBF#ߵ9QQzTiThz|lh8nF+'[[7 Ut>bGuW;pnCwB| яtJuɍqQ:`cʥ&M ٪CUpi}K(eY{TAPp*k4j)6V4*f3VH~VP=rwt{x99&}iY"Z6G{jW߹u qG]OX  ~&;zZq}NncRfgEOa'/:(vG+v63x3kR6~ZT#LrTNhgrlC=<S yhaH! ٌo>B!;% ϽU28K2.0`1T.YDv HY%OyUzpHfrgl.[i;Wțئ=я}|WZvE6uk}jDWy}kLIuFO}-GZ53,LbY-s KlAD eQX"2F˨TTx"ܙ9TȌ'RabN@SsU(]JZ-8tmjD/ ו[9!԰vWǫ}͈FSY".%f69}<=np?Vg EȍX ϹQ`JZ W,1ѣ4rb A\Ld~H1xEPFDn>?Т!HCxQ_r^dtgs+/H=!B--['/`^ =?*^َLߴ!h{nvȤlS[9|?d=GAΦrBj,f4GaݤFX4LfMF_em]Cʴ'֗Ŏw9i2A" >U>|hY•][/ e"k`!ynE1۫nJ\M(2x 'IۻN~[TP0cEY ^_ʸ&i:Y}޾81)+iÜ[N5~=4Nn@yu޾ןys{/䃋лs4L;YC21q슓gA܀uOva-)t[ #(k8>m?\X!qdv~'(XR3zFCvņ+poh 0D ;_g:[}d0+ [WMѥ3.̈߅#qQoCqL&WajsPr]GkD!tj{Wyir4RN ]pQ1Ufk0Χ`8#;`w=eQ6Rm3 *2R4)q]FVa֍?y7k5[|rT0-pԂ8VCnuA0|d> `1)YO8 ڠ &ikOg*Z&u"6|$˼RݢỤ!C`>NJǯVPB93]KSRX q:+^؞4xs#Vcy>@N?:gwڑtAgFR`dUq[фWĀ,r۾ⲧL([pok5vh$*sm7lG?˳?/fʺ\j*6 ?Zds52|wdil 9&NrApYxR$-Twujǯ[[~f-9=WtRa#f kZrgRo8YooYɈ/g)30ϝ6V#RXm5R=Ǘ~B{ Ԓeԍ׊4Hg [?}J1n"lZa#0]2nue+Xd~]p&.N\?%IяOc*<2K>CDb(56YBqcQut)tSp>Q - 0qx޿ތc^}/"L?hJ L*"-c0F-`~384.375oht7%a[$Rnm~3ʨifz&WW+  E=AۀrȈZ8uUa@Z#gqk鴷4([@-0Z(-apW֖8y}$ " >O VݡMmF5}M JO]R"bʴo2:kvq P ҝ(|DE3Y 9x-4WF2u;h (,r+r&wkY|TYɢ {܈дt>ty-pS239"DN<7=[jԼ]B_^Ϗ.cT Uo4>arc-dTq!C׏k~HrkNSHS/ylv\#,ZyYRpQkvnҵtJORCJu6I'ZVÖ~qIS+{Ò2C.\-~M*ne{c'sT>omekr_;MREW%Ofa0jtVbWJpzE:?96kNJGVN}BcI܄<;;΁̶(~b -j #M Բ2 muZR) >JS-DG *`6% ٸE W'ߞlŋY")050:3$y_Mz IA,h5Ol% )}CR"'S!gf7&W ;֣1qi$Ξej4E6H1mLȜ+wowl"}9,Hz4t4B~6l/Wcehw, bb_ٖV/#g.z~#`i_pn}GFMAp=va{|"ص<~&Z[ {Y,~L{qT)ޕ|5['SBVBSȘa~;C w}aG=F mM noωa^iS8GPkbO:QH R$ꨬHծUA?ȦzH֫IE 3Ͱ#+: ب}6Rums-Vomg-Q)|.ڵk{GF>ÔSzX!;: 锤!0b|{ìu6X EzՋnwOY5IӶ5.2ђZtIj~0tek#UgrINiM֪LQZUA> |P*HsĢߛ,)_ēOJU̩ku j5pyb2_G#$T+XIW+^A>`{4טooԬ0ᑋy;ТvU451 >r(C=qpyWܣycV?{Z2Chf_4rQXv~?nֈ痸%;Fk =|M}9(\@n6ۅ/i:#4L$-!w=^X 6{%1к7?L;V*R?t`w Z$璨ϥ2:ߥ3\(: ^zi*lX*A B48y.r(fnאur׼*e5I&zȪ(p dHeƱ ^;Wͭԕ\ѯG"VlUmz窹/#jǖ  ZI.: ]NQL@Ԓ_b,AM2S4LŒ;7oԧ;7U2qk|*m;kA?|Óן :K8i][/<,/D^<̓L_3}r*ݘ! ޫߒP 4[lȎB^GY}ڶg_?\+(F Oݚ|4߂ <ԹN_m+)7 mzUs}At&QEՇYQC~OOk>s3C:T[iOxFݒ5E?-6]xYU} pam/k 4e<^W ˅ Zth6fKx֌>`yֿNjCM0'-_E 9=}%>Xb̎=s*6/kZ;F|!b°"nvХ.Jc2w{eO3?p^ǧ8F*p 'f+N*Q(qθW!_x>uBVOpϮI2/.FL[ߔ\z 3iH_T6=l*=f |=);?OG>4a'nq~rT2ۑ.Szx2zhw?BV-݅~^XzaƋ_;kk:Ӕ 4jU*eg5ywޛ  _E8 9wK#tbpbӦY.mS +ePh5_ZW2 ,_dVKCeRc 4sJeN[[~Pgx}zI70FJ^5N<7A$L/@?l.S=X.u޹(Vg,}:SnkO2e4o5 xo R*-zu9]>10!iݸzqaYצCd͒ rZ{ĮZ{YVU{~ d 1R7{{{x+|&ZW~Y|m/g²ȓ$md}!;&]뾑 KiJMvEӫ+˫.pmӆ3fvk:ĚN\Ⱥ!?$:ewӣ${ vLb[Vk^V#kFkdZ*}HCFފ4ZP<\tV/ztW ccMNk&l,gO&ۺ)8`OhmC}]/qN0MY|]"%U;g[ ([䈚OiI$gjSl tv`nYۜ`!4TnM՘74J:(ߏ[}=XL;-idz_=pdes>jQ:O[&N w}6?/X@fykC)LRN2A~I!-V]VBHۑ$溵7r(/.! L?@'sUꙣ_&xv_|87ĻSM9w2rqmVfc/ݽiftwN\X]2L[5v [/9.CG LPH;ݥ߉Z T8K8ߕsyz 2AhY]4EKJEr}{vjBͱP`|X?۟ =Z,MSd':no~xӿFy٣>Y"mW`rA7:ZvzAmƅ~aWr]퀦_utp@Q0ۨ5h*]yҺu0\B?/|?XQCS%UV,-Z,D_2JwԺWng>dVn-H#+/P}_zmaR{Y $K&Xyf9gڊ>~Ji a=dznt^5(t5v5ov!ls+ӑ:V{mu!P!V| O3?O؃zHoX!+8Ϭ'xM4xlUZlG*WFY*l-gl*.T[my}s%]9x7M&v [q=VuT ڷCYm%JSgdlzrb_sR~5UX@/Ťw4U C 4Pۜ73qteف󓿬MZDvN%g<.!MB<D5#`%δĺZcBs}"]uN%[eUYV/4!l߬qUrsREv]4f<,ԡ:D -ͣI&yAW"ͅ9AlW-UGخOXUjԓU^ӵS.GRю?D[AT<K՝La.mmGxgTSkC_98Ze*3EW㰾IkD?u_|5߄VϷ.['Va$k24'm* +k>`!^5Bm!^J͐-x>IPA(hUy,!c4TUi>/ 9ЫT村:[ |-X{*~LXCyMBG>OnndPFܶPS(`^K)ٙVFwg}ì^IKI&s55BU//]C~<߂m۪6۪|g(3 vĖ~|`űu?0;xwNvګlZ7H@:xp.l4PqU5"D Cc6t_@g5&~xT\S;Eiyeqr3>Mcf0X}fހ%%0r_ȓ|xC #W"XަQ~5^<1W'E[Œe;wOM6n}dPo!_) ~W9yQM^Xp{Ki;)W;*ɗ̼EEWd(oLVS\reg vvPG.Sbr9i}!ռY0];(ijYMnp;} /WiYIC#$y<h7B,<,VܪRLL7Xt`Ųi7cֶM8X߷GI g0ʭ3 's[#Ѷn]зx׺a!'vc@ro`b=KMu.UIJ;rsw#u](b Ǧߥ֝]ޮ]Fzi~r~J7\jlAYPBN>` *}•̢y3ok72/bIܿjl56C2}O b'!"s=S6g|cu}*̅y_Jr'|t3w!WIl*Q"\ظ_NȻ?t"Nk.T{6J^[z)gemB9K6Ꙓj4Aa'xD.A2׾1Zryq5=[[j@} nv^* xwֱ>#>JE~^;QB"{",%2TUwŦԝ?!N΄Af{2Pޭy45w?v< Y|] *zeZ9g+*pFМaQcdAhaX6dN_1c) grݲ3(wWnE*~Le>3'#qȝ8 h"+[9p aJn8_||fXz@2㺲``dc{}8ҹDHa k?5HtН 舕"DkަP<_s_oC#9 姽N -('gstMn+h''#[K80Uu Щo:,([z;7w! ~l#w_fF/h45`a:ųV8)I&lZǽ'C܎ r#'oj_v->exGU֛9w-ӿc|w視[$VqC95j2+`РG]p=i,\Gۦ4 \SWvT]ЧcjfЊcbۣtGcX_6l눳L7ra2W`MB%< S1fšnv\,k/:oXXXA"1խ;MKV٪< Ѥ4#gb?}*_k٫H>fЃ:Zǧ&Bڮc]EV.{8 ƻ F˓3x/5xM| ).-Gsdf[Vv>%k쿺rQ6|0)ճ0wXt, q 1s3J!b@d[\ȝ8DؘM(­`R5z:hULo7PP]ܾZҾ5:Aih+ 6WDPGTPU5OwPKs)UVA3KiϙSAp)9ꨑ*-Sl%v8$d/pj9ʐt[t7ݧfqKTT;pȷAAR,'SGs^n9,szym~xLOq k!*m7O'-1{]jт*LN?EmE%-N 9+[fO__e.{VO؏d "~n#:tk^x[7ohGǚiN'l#ˁdZ߹}IPu5U%Flw卽Vcxs.+Y+rAғ\ˋIx"m9[{lvF9o M%QH|C6cd=LT? 1c\Qogʑj1Gh8&2q7x Pes`Iz C.VI o"zGuyusT\usg2Gf :2\=CcRx@0 Etcn@e鍨Zv^JaHJeTٷ"u'LX>͗&?Fk9[|ãۥff]h&bi5e&=\jIYCEL֦&)/X~g6~Z+"7Xn0N]Ҝ9~ڎl>wRWyw#O'4BugƦ58ìmn`D&TAE4IlR<糭KUvU}c!C~*}5*CJ9ϥd ׳F&}Byd}un]}-𣫋hSR2EsN\;iC(k {)]䡶 njI\O0 2;Ơʓۡ5 +(xg("f^UK}Y9ߘ- -LFACc1|Lu0Ͳ#*xrM=%>jvv4xK.mqHJ BOpT);!C-փL֠/~ڐiLR6xSȗ[Y3T96 ;볩^i\hg6h=*-^.UIHOvbN#F~|~fH q`Wxyx>ITkkUؑkYoNf5|Ǻh(E,PVIF#Iyp証*-rY-΍Um#|fӪ&btNgZJ[i}}~3XjQM\6[Wh)ד}"/j9S=ʃz)U°hk+?~M yff EU$SoVGP>/)-3^j[$k JYVY#Ӑߑ5lo|1!^F8c֕Wu#̮㯵Zaڃ h71<_,r5 ?dCCdeD(k,1 e~xY>T:`,U6(憫o~HBuy`;H:2Wָe!c/&+'5΍/?g 6*nIG ~裏 (fn/·sq?dpJK\9W|w?Ef8>&o|K[^-f9#m9(HbznUt6{&El\%ଳF!'\ ގ Dz 7#2bul-$ T5uF}ǜ>mh)EiN$6:pfa种7r9ƕibq(tkƌr9S9֨]}mysxD:&ޮ=;C84Bo_wu/M}L:]R!ݿ\x_UF7Ca37~n{vʅVo|Dɻ-W4ݗr27UD#;K=)QMʒFV/ zH }e -ߍ"̩/S? ;rF.Xj]jư=X ;mhN,bwɼ?ݿFр>U﴾Y:o`5^ @S Cل&IArقjŌ7WTy TKePi¨s KUm$OzPfr]HTF׎O㜗Xo,3z%DSjQ}hq߅|Wz=^}mqYƿ;+^+~K`R< ߛog]ǀigLiL~EZx7Jvz/xVMˇߌߓ<)+Ss1Zu*ue6i6+-/9 9G(Wk/c"riK0nSA3ېv+ qn}ɵ偛m@|lǗv-{DusP.b^ZCaa"r0\.XBl,Xnvj|A!wd''l6`peAUp{HV A+Ͱ`CeK&jOŃs"|FQ קR?}~^663.ߍu13ɄMMʗQ|g{qf~;5E;BkЍ]Sg6rhN)SQENv;#pzVLs*f/ך-M--˺ͪoO٫;=%BhĶB-¥~g~m%3C[UF/Z`dz;GΎvVOz]4{A!!;jPo]7<+ eq6x~CuJ~}]nF[ b^DݵŇw~ ZS\Q{Gk4GNxY\BQh9EpOFkvPܥ-{n.Nu%3 qУj/E&usT^ir3#§P EHyo SUYzx'ye=qGaG^ܸ&{ pofgyl-U/N6鸽/r>z8URp y _zn+EL` ڞjzd^ IJ)ac,qq,lmfolŃhĪ1gCAaSGS`dQ#j\ء``c+5 GZ3߮mG ~ԱOY:=D";u\m)fíLI3Io/J-wSZrT Ʋ;(1ca?|V jvz+չ_#{*<$zL˖1$%V V`!hu Л(CRtLj\xaKv`n꽻ְ8Axe]`Ӻv8LL/OÞؒx欦C|lz0+nݤ84"=Zl͡sHßgQh+_o ^.X[8~ť9`P5^ R0UeAz(Ӓhg<.Cwt\~X۵ BѡY!-y rTޒqx u1oyH#x-:]GǫL9یX>ӽS;yo‡p4o,%U^m\4p$ Mp5o=SNE!ʯ U5ĠU+d wS9EjO~{g&L6x6ۦf޸pa݊kswY c4Ai߼1b>hGƪ/M~smk͓'ǣh  }n _GI' e-,.*Yߗ)[},0M~~4JeA_9;U)'t%Dz@#h@O@x-;\nH!)ژݙНY] vW?> CƁlb_4Vρ=S'h՞3(PuFss]ŊV,@=:`ЩQ8lUT =ڞ=iGPE;65/.oC o-ߤ٘C۩#ǓR8v̭(:e,=u;wdajRJ*:۴b(X:S0~{ڛEхyALyL66-KIx쫀{R>=ej(\ `-/TRA++Gpw^׳Ve')Z*R蠛UJzNtgw%S:`5ņ֩Maaujgss㾪z.:ڜjgjcuǍ̘oᰀ"}0v6̌MXTzwT S<p'>T3.Fĕ!z6o=NVR>?7AE]) 118jLż0dƾD7+ʳṑϟuWIhU]דzlҚŃ*w{ 6r),%ZFRW kwÛLK){]bplZc"va 5T-]c#e|Nu;:u/[VIpK1m"-\hm{/ykzhjVZ{ג_1}  {w(6HFDg[2@47N fѺ>i4o8Hv}OJ{T>eKuSv;'36VexϝOx.ȝ~W>{$Cfq!촌D%UxSLU4\#z і<+S^ ! ~u5<4fSj}I2;=x9qziMi`ڡ3=ahkB!Gimٳ[@_P9O|$_Y8zǣa;Le쮌vLc)*UX-=Fݯ̫*͌=judv{"=?B]ۚ/׶Faf΅6ؤKJ:m‘%c.LseY<$N 5v T 0۸;gpuφsT_~-~MD; E+D>csՊΎhW7nLq3"{!vM/3#PltifvcQ}@R6+Sk)z5/ΦؕLv4uC[U:wF}:O7(@Ł_ ]}m]uOqeEkc۱^U#Wh7n n}boKVLc5FKXbBG;g>7rtTw-{VGNaδ$t(BVPqU?2ۢPWy[ ¦/Iz֊0?iY} 6[nowgei~Kn aDdZcT#t.¢lvf{xqkjv1̓l>j%݃FիFCT?tj}Ű,҈' rg {sȧg->s-U``}$m+/M1 -S8a○ S-g 8VJ\WeZD=%3 v?^.8|!eWhqg<# rJF5bI0>ߦ8E0X\Q^RݼTQ~S>О7AA8GD3X ۊs5nQkGI?8qhO[)+)7CnW;<*!#MWF{wĩB4jXd9/&|\2Ǵȗ9M53)+O7Q~6o`Ü(ݡN+}w dx"-b:nw@AɃ ` gE,K|lqGkt+gé?[W5nl^Yzl 8Ec9?E=slb!ot׃*ɇ#YzG.=/Ӫ$`*v$áʮk&@3'`ݣYԒ-|ːEg^M;442wÄ bfo:= ẅ́Od4YZS)tXZLl-  r OAP;|I1=54W^Gd9FCcU8tVn!ڨ$^V N퇎M{>8L=R&~s®yRB\42-Ǧp]c[{( EdA3gq7+i !acjx`0 \zAq2T-~PS/WE}:Y%[THjFۣ*վu|L>z>תGjg۱~1\V/Ѥ Qcʳ:3=9 ;ʄyȩcMFGUҭO?4j>T0ἕH(\@uZgKޅtWvżSrAۨ]MTxDү33Nc/A~w .-ivq ~uz`uxXowG]l=0"]Eöa̷)-=a4{M4[_/5ժ C)i?~nc+e߼"}̥.뺵s-26pnfќ+%vZc5rǘ}_I] tgMf}}";@t٦΄( ^MTk{g߻C4M!ۅ7*JYw&#sG);YŸ{L[50ɬj,$0:88.T($+:Z>%V 1ZL'R> ^A˥n֊mrtm7, /r!.=J?_-w'ak A,}mV$\tkۤ2)H) ӮQqJN}*C>٥[|.ZqyMч]+\Mqs3z&PQ@[Gl3M~\OlueK@3E?E$aiuýn|6<-xxJ=W-)Qq!!d7[*1$jmFߙu!_ojiٙpFܙF}^Oi\N繹^ccf՜+}[(+z^J8LvmyQ6_ vឃ؁b`[В]5.n2ǫg˗u! ޒ%ٟ@6ѽ'C'[skM12Drꡢ,xށ]xƟCI-<ƒ+7ORKN4:(t.djyO@sgm{T@A:57'$H5\oȾ._/T_{M=xˍr,κ1gL)}Cz mE.KFt^x SY^t] wUޑaS37ȵҘӅ=NIlڮR_CnggeOeZ+@FG;_ m]B{#z7ԓe'Y`L'7գW8̫JѧmnU-c,0V&m?8J۳?ȥ_{ U\Sĵd0Ǚ˺9TPX$?G1ضbQxQs i۞QӱrSzm.ιCRգw-5qoH"% #쨒7K&@A9o~.su>x/$XJjűG2Wg4 gCihDjEFC/ ђ$5U8N#^84QfȈ P^ 4yE07{}tzE2 .epqhYOSSڵԿ/e@a0p /8imhm&G\?\(XgjWC;31ւADINŧAsk,V6̫68 G=±S٠nkHىδfhUAsjOw֪y eJG]˚*&啣"9>eE]0Wx3C^MI0}fl~K> e2F/ޭ߉IqL^:WKVó_Ub͍-ﵨ*!`+wÇv&`eGq.`~Hv /z; RݬL..@6_h޹k~ƒOeQϮDuLjkՍ`rqΪM0W}qs K^k۬zъbWUT9ݖ95 0f 2P]1 t{横S1XNrZmK"EcڅI`0nPKl7XV;Uv;:U2clwu1 ٹ9ɴ梵ژގ/㷹OJ}q 9喜W1wIN8n=:^}+Q2c QUX1@3lNS0&z'.nMDtP_tL3mzOXJE?lskXAV6ÁFexoz XMoEm€Lm ܐůxvr5yp}) G7R@؃jOotcJjmh2Gkus -vƺo\[, am(mgc覯~cSS+e( 4\$7?mםw'go*Ps1nG+OTQRt}d;GnXCp}]ws$?{^-s55dςVwFw%nmo n^xV T"/%X #=ŝ[N)k3 u{9]5W7X$X־fʿ;޲"2KIMb[[mΗ!pŘ|áuHoqNml^|:8x)L!+ ~gW!̇*8!v6|lp%Wneo jUgƽX۞[՗v[&ܴ:{Wh;%#]jlYwf[4=ё[xϫK~XgZzum܅5r]4t;-V"@FaپCfw!>A*7yK9YgڰlG P{MvXs vHjaUi{⎨!Jp]NӶ3}L e< $ɣާƝQE;чS\v)K;tjN@٠~]R35t[*84IM,p^.FS.o ({X̔?Ɔ9_ [%m詎hW͝ެ-Jg7fsZcln4kJts)9nn'q2u]CGmIbvbXB#w)g[[aݟO+#\`{ FÝ2˕_,7<2"7tݩzBcv~%vwM: H&cvJùJ ǦG<]1rNkRFѼxbWEbqNx~Z2lWz)\WH4^MDWdET6&IW{Jl]b+t94'lVӐ^IujBRg_GAA'}\[‚ɡp\96OPڸxJL{p7(e"IZ$m/l];k(8)[}2~f܋Q$\Eqa`҆3#k 2jԞKn,ܢ^&[A%gjz*γ Nxxf߸ -Ё@T YIYEkGަ0? &UdbzA9y,ۜ{}gz ZR ᵚ*(yG;E֞$(ҷCnmGhB(S1-MH .Tʵv[j@h >8-^HK@X5Å>8lx 1P.:G"uCˋliN^?죞nzgxY#nZNT\,7Mi%gJaʻ}>kb#u-hfwX[ }nG 4.C4>?oK}U)#)XĜfFo&=i)}AzОKL\QׯςeIk4y# ivi֭uux]p}-J%{hU:Lڋd>{i,܈lS ;pA(v'-.Ǧ$r7xT͉ J̢(0+CC;o A2w( `ncuz~EVB vC_ z=?-np޲`>t5^ջmRۏZK8;^9ea1{aI6iwo܉u ߙxߦXyR r!yJc YDDEϽ9cl1ꉐ\Zlf15r>uhۊZ<$8phbJOy:SdՓdk\EN;}5$XQ욝EMB/ [u:찧բذo`u؛.c{%\%[gxt^ѽ4-7б]ņF"uJ+k*{j`>U^ Y[3G irY lH;Np5ߓl1#P$FB.&:/Vݦ55bK6`_8m#PYN+W&pypg5@jD\-i&3J"xKSn_"׽kB޼AlY9/@EĽ4I+N)%nx:iZA9;ռ X5ނi!*.3Vؤ#Cc`,=~VCΗdis3^2jMګo~.r -hBӬ{҇7F^:2+ePxip=nBiLw/)-eG˶R:C~z]ܿf[~6k磱hL9\wTGW_vRp h4Fj?n)kKI:6[.h]-QiV*{6 $WX)ַԫ[%hT7N\YmWIYfdxh5GsHycrλl5U`N;'sC'UZdK[isvz amG&Uk>:=`"^&Ä<Ų.GzgKU5&/zRXʧ2|.$wT$q<.Z/4nfI[y#[z5M3- ]NN5ؕCr΍,]:mw~KZ_[hCp0/[^c<$m7yNOi9ʽ+`O&g#:q^ucܤtYa~2dĥpyaEҝ=T{J66 .0T7КXO-Ȓ<|_?mmuX#G¯zd֬8&,i~82|8u,G~ krXwZK씎3FTyKWYվ}e#sKw`5]o3;f얭]RseMe. A. endstream endobj 130 0 obj <>stream ѡ\ZcETw[/ͼ'mܼ{/_r<\;_ł5 S<1h6JWttj;Z𽩚 ^bYVr3Mmdt+;@y[ ZEv^Qfb/˺2nGh@] s2-wXZnW9ٶ1ͬbӝ[4EeׅzMYڟK-o?m 1/چE+sjKDpB{}436-#FIiѫ/*Ç)ln\zHs*ho=rD"(H[+gk6QԲ2OBP#Q{S_vU<@RGC1_Mh\[s'zֽچuu4z}}%h/nh6%:eEoQWwOi໎lVzm}naN˨yuJRsKMxuV+̍fke_#? _WIsX#wY9qQ$]ca{! kɋQ=C3Z&{KCYބSRi='~9iRotT*nmbpbri+B7<}t8:h 6wmju?:eX10VT:F#vP )~^v?842˳nxmjQ/`=ԑ*ys_;T~`=MVRr)[ZUɰ̐ӔDBgt%Hf7}N п㟉=ov$PM>`fc6/0Y>gnݟ1 Vg J<"+߷S?#,<3Uw4ߧɃm;I'WJ5 a_t.էU6hWzdև}v.-q/ra4ks-t<9٭mj@<-߈:Vh_@puֹGݭK\!w72/y~bj֮Ͳmxٞ!?u/-4S9NW['.Z p) U N>-j??_@vy1vpr2PZX.4HX} rqȈg|ӝGo#7J&*gתfb)∷UG~535&y,thTYhC OC4*k}:+ȿ b9YcEd]k,8:=ܷٳIہ)"p=׿ @?|:qYrlԸjOmVJ#qZϽřM9 9 QsB[%9zr_njKGu{L %Wc$;wBr\R(T -$1?D`n{[>dpBbb_uAwT{'lVͫgnϲ&<5xK$ 6ɰҨ2D# ,X9I*ihxM/DD2U:;%TKaM]'zU).Y/}/4&[)[-y"&l=ezچ{s%o,a04̉ց'5=5&̺Tw'o0L1h1Z7w\B 6e\ ]FI!7{n\d ÑbuW박4`o~ ˸siAhqJWqYa /4CcX19lsGж׺㫠%W%W1 2Y>v|^sJ8/j9.W,D_("q=ץ<4U'KۼWe?ćxTB=ELZyC$!i^/UQ>S hJS*Wn:t˗*3HPJF&tה(H6 AhEPo U ԧgeGՑ;rY~fC7P֊a!Ϊ(ʱ/GTub^Ma/#4QQ SXdc,ʖ*RnP1tRv!f=(Si% I^[&L!+j l%D\E&;^6p̓Hx:2˯{y]uCs&=`xM4ِ:$3/!LLT dJC&E3W:=k7g:N^ʐ3Ғ61W*晳hØԥFU:| 1臛 d@U6RϕæG^EJ iS 'nDtE`3<C 1ƙ!F#yxZgy}Oe0ؒ5<↺n8\^ \ڭx5jJ 9o'U3Y۬XgCx[vX- ЇA C.}Ǻa+6?WZcbbrc"*ޞT9?{5Jc^7jAȈ!i0WdBb"ݹ1{R#94X35 3TA^rC = LUXf:boA tpg:ʳQxu mZd}bW~=*~T2J5V`*Sy<vnMO8V9*kz]4j8_j zه`Xqꢄy(Gp.KA+'4c/~B3'4ƾ. Mٗ~s_}}{ 7/g ́/-5LOlCoFf$%8E^sE"5Kkd@}׮u:ur;G&{6c z:\\~@s9Jhnx]p@9L?Ad_䜨 3cIzuo+ q7smT& :?tCY[CxnزkYk>jnY Y}gZZ%Y/ivAѨ\W+[Vy^|5wh,^GN3y;lhiԋ N?*b~']Z^Ί/O p^׬;<^LTRal=z:EIv"t&T;v.O3^sei1PcW[^w@m[ c'>DX&LsPV7Z|?[\'!N>zv#dn|R>sIedz}G<;i?o5FOr BГwswUlc^㟈A+@'3Q;2d" Wۭю{8'Ilj)gqmTe$_Fxؘtl܍8_{t *'(8>UA,њ{dNj"Խڪp>~1W?1;ǔ"ɩ YGapDe }||d騢EU*;|"5Y#_ށ.jMrU@{z4+PYZ i~EmR$tو=+Ky(6 M|~o*upQu^BwyTQAMkrTy$a|^A\5Mrlmn "Mlҕ&'~ڨN#MB4QR\ȫ*e*Pq# u2^HCI֭69+2;$[?\IJh6i#0\j#dc]vvj?k5`2@o9kAK0y'& !m'I`*RQ"Bߤq_~1m& [0WuݵK+&-Z2UYt?F DYls8u+x0䆩E55k5nb2$h;EP[4=߿RLΈ##27RK) RR`2UW,/n.^Z5W{g>"6L/9 fIbS#U "՚5V */xE.2,!-rDr,wOYL6~>%,SsS$=NJ{`'X:M*x9bϷ~<׹np%.iF hgkrVŁX 2Elb >d { O6Ì6lQ#6; @ AKn.?[h5 LzvP,;iB5wJ=LVױbhhyp~jUiW_7< k?ć'4Aɾ|V1E?o UcN?4coO_ & DZ;A9ߗ+X@o_Q9_od/@к=cSm+"S6tls>i>ke5zSxbCU|{dXz X{iVZs)KjǢ49kh X*EXx!"9> |Im=:_?0˂p5*=QdrY>(Ct)m:/Vmbɭ}c% D)Rie9?m!1/Ӧ;-cAjJ{"#Hv 5᥊x0m;JXB( u:j(8<+^v_3E}v>@Z -@MǯYW|ǫ3m痮 3 xi*b:g!.jN44D ?4 8فbT;&beE_&o3'(+9똺[h!h{٫"B*a3Tz9it.UM"*j7{E.}N܆[1lΥ@V.8O53/кr<ƔĕPB- T 'k˺FFDZPOST['2 QG%n{L9W_K\JyO*rWwD!ԝgyeK;sK:iO͓ẂzOck?) ?[`i F&)#b[n3\Bڈ[ i=):To϶"|;+A*K8;@,ZHݥ|m8 Q 9u +YAKQL"HG#I=Xo ״>%E v;|TMjt)!Vf4*`DQ|dU 6T3ıD3i{@4=(CAqQudnGD=>&LQۑj4=R 8!F7%: *Ε#KeT\[|a ?1臛h NQ:{?"OGU1CA~NX+eѼFG"K@A 7 p*IK(ʬ7_yuYn~h~FE=(*R32f+wo^ݮHm?o}c^JL /7/bDh]цJ xg_e0R"{٘5)oDXFemD5Uu*V@lFV?.mAdlfw\v؍AHX<5X]-`rt|*nŠ+7DT:=L݇KL=ڤ*o. cT̲\2\^;w3@ s)=]zVanR:%^{ldBo#Lerqxs$!Z/j7Gܲ ݠS|.>P8KaSNLm=a^$M5vH3³;n]o>喴n #y \,LR-=?DT rZ\σL\64:cvE6._uiX]b<9kZs홶8kMП?-prf'HM>F'Ӵ›ĘfPSte|Q .30[u,qjӢIGBmIvb<&.mKAgwqjO5r{L]o߈}K*b #_Z(rct!2c|co#TƍdG߈160)uDfYiG-ԏ#u{S^akYW0/pܪnr(,DփORknsoA+RakS-Wsp5-}48\=R2` ̢MRԢ[޷䷺= j;QF_ޡZBjwF97.},dh7QyϷl NVb^e rD g֕Uǐ' M6ox#;Qr䎁A+b*@S9J{6,=C6#u C"5!R%m>?+4[6 ,5vt6l m_ {v !Nr>]-EPj8sa=q@F pLVfTy+"4NE.N:N M@b`KbbDbП@TA35DEhTP)&<-~K~a[4^!BbmðT[Kˌ]>`S;wM 2'H1p|pSyTAU.t/A]TmF%ש/҄G!ŊmьZS0%d#n8Evw,uJs~6r"N Dtz˥H\kmzt˗A' B{q9cD^1&+tzV^igcqv w7ѥMyU/=& ΐ88֋^ĠݥQϬ$O}ZKF#d)'0}k̬0\ BnYK(xAkYGյݯɔ~ɞw ömuW:XwaKzpVm,EzH~y?Š)ݑ%cٞkl??4>o9ǐ=#[l8"xksMdfcXP7uʭwZo`k^~yA=\/2=lSoA+r)}*K>~-XQYd 턢HƘSrcs#LKpȽ[ZE4㋡H~'3O A-fl>եrUYw4t}G)YcBAbK;e 􎱦qZňsYCkj4˄t]˦b4odptĨeKuDc#Bn?D.|nӭ\DB`y"[TC\3y1޽s%1,Z3wMxßu31~K~MQ5O ̲mq+8N tvCFX`sDHܖ|.ي@rZ|1b6cjc2>Fj-ufjr?1h:SJw&Ĺ;c8x-gû#HH9͐+!sĠ^!/K5GM39qI$;g$g&&.U+=n~KW$M F:yj|[e^Nο8'QWTbfk] T@w؏Bynb<ӺE灷~tgnmnvc"-<1g`]m==M$M$GӠ=N%𿄿~Bȿ* ٗ~B3'4#$5߯;17輮]8K(tr[+3y Jk~zxpep[S`VЍsg~ߝWm?@ *3;lh[^\q4*n:0O~]j&x9xOo=0 :qaqnOWA4_H`JaB7x2NjN 7j`_AQgocT<@!Q[D!P y:D?/e|szަ.թDwbN d&epY8L"},cv{@-sLTgMN2Ͷ4拈MwS$S)>I7h2W;l#ivWm>?i_BTT,p?,ͨJ==h`1zܛ}7sjW닖gzحئ:qSId)ޔs E10Ҕsͮ (}w|$N&'b +EP91*ǝ3>T:/mvV+fR>C X :IF')|64*I6CS, vʳvxHIdTZTv~gٛ06R(u.G貶S?zЖ5Z?yKV:7KՃ%' ҜecvM6qziϳَbW'}qi=K' fLN]_^uKہuwL\pCo {Cqܱ]9+QB-)|pܖ <;"w?D>wvUfU o2fN5sp4`MVE&k@_ßkk1#Q5atN˦G˦?W`T)HI԰*4r.:6.]Z盛o6[xU)I/!*@([.Qq S86],sk$Vd``QTЩҎxfʼ\,*iT j.6!Vbb`q24"&G1{Ù݁]GU:;n%)foyNͳCt.n¨%!|"WRlp 鏻 VT-lWj .^Lgcn%I3u6o fЙ,†-uW\;6ҸG%q1D-Qu}\;\@zȰ^z R )K^$c@Iɍ$ѹ2MV,Ͳ)l2#8vpVJ7'@kըx]^ ϧz0ώwݟVPwňO|Pv"_p쀖j.b{JsHg̦}3YfSiU >r I|dPO8YNй7tԽU (#P}/ՏV"<9?zAkOse21t&t,3úQH3qU- +c#eUKb>E-Jy =>j.\2p!|fs [~6Ԙ@BdWzC?t|OkN//A㡼y8qӻ8uz,:+Zh4!ĸu>7v~IiAyq1;]s=\tDo-*CKuLwq]v 1>uK;k~ܥ1!@^j$7?/~O[/]?HCwXl:bS+69kC ^韈 u1m$*稘Q/og?>ĪT'X{i r|u 6UA)SS^O4I ~=wŔjG=_&'4c/~B3'4Aop?;MQUV{]Z!ez{~Yvᔽż`;͒b'Reǘ%Ggj-EˎRKmT P _D {M\sKݢ48L1D!.5%[nܞ.e5q֋q=wJT &*x9'*Z{v&88țS^?ҷn-#дcmĩlR7nM-XԖ-Lz~hG/|>@x@"8hu#ro㶌Pto$Э+KԚ>4޺,͸n7"Z4V~el<4[06A҂MUY|ݑhcT`8?7-x\~Icx)kjQ27qK*jd%,$rCIgn ^ٸq>_~?"A+ B QFׅ~7V{Qu=;aTfy a^LD1k%l͊֡EkqU_EKt2?FHITh\DKI-xw~ =Zp 6h)w_ 6v ڵd~6d5!Lv2 #ᶕ:F ,i>TTj9x`Ũ,\ U[%u5 |l㏌<)R[.!VRG6ݑ103Z7z`t @&^G6ip%!r*@7cųOϋRw(΋/ ; %RJܦwn[p2 HQ)зbСZ|FJX2Z4 !oٍ* ?!_PJ:9)w=eQ qT>;?wxڶ9y{&UYVnk9jJMyר+2~]͋'JGp( @g??^Hf- il4-;OFe 0ۭa٬TzvR=ysS>r0ʡX ܌2 \iXmo(TX/\? z|;V[r΀h Rv)'qѽYmvícgx?;~z_1ݝGy2{/ j90jTjFp},}v9Ás @(B?/' y V.-Š@`fq\,M]Zצ%?7 Tlݎ^~S.Ž(Nuav5RuSg gNb虀D&g|Ix}\8*-Ee#KsY]ᅲKMք푐~k$9?v潋4OhSGSH|O;01W.y jmGߊdRtV ɛ룽[RC1 ]>FpO>Ưe 3xaJfdU)@1}l2 PƮN^ַ_Gm=JryZ|A:jј&\ČFҝ3|kڛ4w~ZCf$e~F3ڽy0($`C"(hC$N-.'Zz~Ӧeٗ/ /cγ>#}P6'1~gxf mvCn~A 1B<j.HbFqzkIr&"X:#Rx^ŹX~lk~uӟdI)=]pu-%G%gXvivm% ҡUfc!:Zl]%t˝'->)֠wY-"9Nݘi2ϴZox{"ΌԼIiSl߫t}źﺨJ4 rO6}C}feo {'4ϝ흲ڨoߕP"f4 JKTz=MVcΟ~$ˡɎ{|Zq/ӏ%y3v#z `zׇr̸-e%ReM2 VoÞOƜ;Tz ^{ DS4^Omox>yxk-UĄgޙxu.NSv7&3KRgn,T0+7;psn6?-.7 giƫ5Q ^S}6vvok vf*]@Y|T/{ *z N^\ J%n&iE3z0;9 W%v<o@˸wu-0~rOr Wf 5$ng؏i5a4醛2Q \)Z.OxV.M.o0bqz%zAр?ap2=ЖnRJg3SčD}r(qh̄u]s+nhOgσA# AJn5n,C qXUJU~!0g;@UR^DkvJFW?1AR0ͧA.qqي.eEGv-!r+i_`PJP忶u(=U h ԔZ)nU۰8QąPUCFxtqޟUsoSz<;i 0Z&/(X9˜AQEep4|Bs"g'#Ϫߪœc |RJ*PX=u쎂)ݰ}llN &`U D%8羇.5ٶ'TyGNɅ\d\εqil q=^^KC346VMj.+TL:f6 r s=ϸ=ݔV&Xa XHg:ueㆰ?l\yn.1[pn"1^l{~" 8-'[^Z%@0i !=a *6wG98MUc7ybz㧐wkTpժ.e۩ggyj"Ί1WɠȞ `ѵ1 5BJU]m.Oڰ?ٟnu5;ǝ ӷħԆy4;[;+YǙX^YwIĘ뒬a?)E( `o(F__}!2ێUA96 >˾88]9ry^{:?jU3h JzRڵfv$7jͳ=yMa_M0yFXIx؍8B漾{Zctr,ؽ@-a(@ G_< k8䗖=yF~|t+FXO[ɈGTs-BSK= DU;:*/#۬~H;GHBȹ+Ƚ[D+~#J2 oPΤS& SáLC]}KwIb׬Zٟqχa&5Y~Xyu#ʫ[G<aDo΂R$b~x%A8ON$pefט9R fad25e1s]Yoͻ,Pfa}1{ m[w~a;?uv<%(__깖J7 ֥u "dUqeйIBR<mŖ/yȩ.3f)YwEo|zY9tkzZgIb곱x=ȷJL ^ZAaeADqEVBRykrP^8 WmyY=|e<.xbyY]vy"Ze[QD1uGzuz?h{#Q -8ͳ57,v uj ׻Q0<]f,131 'Wu/kk<πq|g+Qx'wmLQF-AuV[|=?n#Ÿ]p,j[w׌BfpUڍ4/!I4}iOuC]g+Obݾ;T}ޒkgP?M}wzNP1Ɯ7 *v{ 0;8<3`!NH1L(2VX+7[^%͛(0y+OZG55/`$R;5U}_跺?v 5K 5fKcXԧ5 v&Xv O7zӰsލXKj֠lDkӠonkw,!yTGZKE5s{/+Ӯ??{ `킂sB6sp +50Q:#,^hrmd?HRfV?l*A\=FqG8ؙϽp } Mߊ&^TUMePsBS*BM+;h>(jKa)J#b|ÒI!cFzG;+h9+9ctsR?(n0R 0;xj O3-,WT(:Ř%!ez9I9X]RqM㞛刏zS=Z9^ ?`P f C0_Hge8K%); 2¿_H21<<J sSWzJG$uXGpwotsls ' oX5E8K,/が|ogV2F [Xy%$CĚ6>z,H'Lox7nl+N:gT( w@-"A<@QvaR`@r;0P?"n@Ѯs ,cQT.Ƶ:q(X Bww#lztwtRy!ؼ|lgouVVC޵A]4c`sn8+lH>σ"1"~T_֊ޑ:F|{zu~@#ûj(D;~u>ۼ%`Ɯ6ւ`#REn.Z6rpsH*O[]swo՟y9ˋWTba[TK-![ұbva0; B> =, q Aҷ=gd;_f2Mޙi,v=scjb+T2JJM/D[__[aZH(ߏr|ԟ;=i-6H53\7wѼgqE"g34SճzO&u[V: 1j@L Qo x7z^]'c MlW?箝ItLGŎé7v-eݥ\ vp~Eg[.Of9ng~N#cz(GTqzpS~_vټI(F~pNDlADٻc݀* ZCld Mksa/-ADsQ kUvSJ˦ ErS9XύȆ7sE|%c4IKкL0mէ>̤/>YJZ_oQ0LI:;T''23` Ra-}IRW>U{:'a;-q']i4PfU8-%uN$5?8BP^^&[=v{ ZoV6@mg b6Ւ,|Y|9+땤!/ WT vrvLظ=YvZd$d`Y/rT <4l<黼I[a@=DS6_M+Ԟ OC֟;&8&{لnp>Fn.X8A2Va.k':ʟwjzn(gm87?]H5 -CJh~d S宸]Q-eXm2SG[꼫nRNz)w=Y0+~q%,Je\Jpx~8UW3ym-ku>\A9TO(y2J\u&vZӯ;|Ni' >?8nNm q;|s5ܧw(降kF|.?pW j-wG#𕪀 1ivju*=%1j,-+uk/j[#Z=n3shF}̆闹mD7zVR^+`rqd7̋>F:[ _nIl9a]j2UySwj HUm]effFpu=lj##;۞r<8Wzϲj.yEdKNj=Iov] }5 ZBUY,K}#0{\CVꊜͬX͛~w/#}5Mɝǖ\ ohAcβѫu߭\S[6XiQ0`N_ mWL*XXN" $P _;y02?7B# pm{a EU{ pЊ 39=}y qMޏkU6I#^ +k{vG;(W^--_(nzVHMuw!@?o6IǐjΠ]KYj v__[]\}5UEN>5jrNM}L' ScOٵ&;-#/y7 r7,(nPp{(y]"2ՌQ^E?z^JNaNcBbiZZuJ-V⽁45ƢMႬ…"; ]Ov JP~Ύi[?n'nC`nz%D;煩6I%5ScP5,혾l)B. q*=3t*XZK:U;i!r tAAp%f/JI&C 6&J}ξN\'ת0ݴ80ZKj~}RݫktcAK|4*tW3<8E߃s@Cֳ ?;$5-_{;Jf]le-ѥ*U VS#\eUe]9}`*%.:rmةK4١ڥ t^媳|7S!;K/?ȵ]9Gmlwm7')ϑXq1QI-e% ;Xx3!bAM[EҍXyqn%ڛnRl7KxMQMOچ=0^/'VcSʮ$K=Un9ߎƠZj7L/'b5pz6ڴ^oͤm5͔B/Ц۠, 5:"~@F;|QZX z;j5K.:Ռ/*(*w}JWH~U,`S4'=+דߗ]_v%`gttq:Nqs ;4 OJ/z;'k U{ḒUt,P <@ޤToub-UDB pVN+c6G=k hf\~%W1=Wuj USޗw3TFcJ\Xrqνj/%B#(VōQn@WT6 Ĭ m'h mȤlMY ˍțrɮ~{ [a+@ΜOA0O҃$3 ۠SPXO PɂԚ: ՎvA,퀄{ t{EPTa.p,,1|=A~]@5h6Aa0,(VFS\ڞ"P Xe P4,@nցą tߡ+ĭXye_^>c&y4ruApҠ?Ӌ< wURgy5w?;VPX Ȼuڲ_G&J*'˻$p^wVr66r|[] =b-UWrp6Jj__sh~ #``u.'yک%vAM^AKyyJ.b3HH}NU.<"L=3$4K?(z3G~3s[ǒ ]s>t)4~  #_d%J.F7l{?.~nf v7f9-{v~a^Ӯ[g,3%8>Ǿk`9)~n>tA;!G,a7o[;A7>*n򈏯OL_˨K;wj7Eٓ`I~(v٘-{`=k-'O|VG=;Еp[XR~[ixR/U\ddJT3 Uݔ^ s'þC=KjdSѷjSy *~/KgIO- TYwL{#|N򊁽s'%'羲.ZBl,ϙfe94 ( @c{(~?zKlЗKBc߷g/Md+H+d;Oڜ;-gf?rӅ1e\ӳӅZqUrk4ځ4uuoy3kq >$ q*#EϡO>b>cVqɭcsܻo0hZ[3<-K4cV?6y Ds˜tPT:X9;{A?]tDUvfAaJu ;[xTViI)Lߜ#٘M3c:3'a\B(+@~f˜b1b⡶[Ԟ<bc*4ޛ43H0oo^e =6zayFdy{9 G/2ΫĹ;m.6e(*zڽٳ@0B*`y1؟l8Ǐfm.ôcS # 0`‚фDPeԦMʛGAzZ.PwmZM8s(zeU"4U=9Yvgq0t]T5aK;Ifᚈujqy;Me<dL( e!C 6$ĠVuĤ6ƻpܕ9u78ۚgyZmH5xɢ`6W\Q뺒3vκ8bɧ9J}z3#LCt``f^I &XT!ޝ]E{9kL>>7kQ26~[U) ~Ȏun) ٖ1\*( # eƩϿI38K ګ$1Dߺkvn0h^綗x+nfS:QxU_<$ڤVLր==CJ(ziDeHNAN cy+@ᵄw0WV  X:-m&,]}͛z n1c([\ juX=̙Arcs%3̗չ}}<# (L88D~_+G oJ92juZ9is~5ĕ6˱[YK0p ^oD{Ao:V)]t#NZߴ XSJyŧ|/Gh:@hgY3;bNO!;Ͽۗ6[L%*-G7Øy[-Wc^|@WIa?Rpq֩P\\F@Zn_= (ԓ3{g.Ů24Ed/zV/c}U(łұo1)q-ӜxV';ý$tĂxGrLw^۰M~iS]i9xreKڷV3/ܞ`JjOKQa+)6;N:`cI1 ՈiZ:nakOvgx1Ke'>gGzjWUf5$'!'j3bs i !T|ssᓟ p@[X5;UZFͱ58,=rk*c} N]pqVĆ>PX7g;;_M8jآzĚ:yUѠYxw2soI}} LA_V[&RuZ?*F+cjC/ۃr'8QHRLF4-@sP杆ҽ _du xЭBzQnB+fdMP`[ SHbs@KP&轾2ѳP톄m{_¬ `Bg%v `Kxڱo@y^X&8w U#¿%2Ջ@۷q!L ]kw`OHvZN2ב/9<^yKU:j,)A;GXK (&:96%ѲQ:sШ6X2woxBςD\/WaihfO}a{h]|b N޻Us)aފTO5'\+ uZ+؊+ nG]d Y4H*5t{ITuЎ{XJ BuzwMw$ A nkAr鳾S{<{Ȱgj~?yLNAo 7 ]8' Wb_ZL&I=蹕 SfMpn _;k!vf?إ|7qa=r 3x\Cj} Xex e[-#9uTO f^w30?"}>| 򎑽\>y" ;Lgw]6v[ z7KAo=mTKH6}`|p[B'Ô5}F]xNs>Pr lϩ% ɢqs.NrNZ^Xo+fJuKM׉ YX[SZr~Q"#o:}Np\w1SԘ^>>jro+[GV<>JvCV 6 L͡Vڋj缔v *Z0phZPC.eJ9з|BT to~![Wq.hc?.c6Ot ~T.=Z ֟yU\8؈͈23"KH|Y @4!,|C˯CTs|Ӣr\*55-5GOwϥ;p1Fi]5M6^ 4Y SOOvej"Phb~ o:Cnv0 Ϝ.l'nE*حrv\\Rv0" 0>yR7S4ND=&ٺ4[?@:@lC-yu(f]pNnƱj̡hLjΧ,Wy,9sgo}`s.+~c_L3򶧌fT Ѩ -\pEf( H*e.p΋~yXV4[]~_`1.Y2uXaj46 gtvTZ"+w7+N{_qwȀޯ;9ð7)q>.9-igji [ D=vRs~ݼC3y0l?>8WBUuLGpaE7CO{2la6o]S+]F:[$5VM-lI~>Q̢_+wԸSſË՞D,ȇmؖ5QQLJP]>,߳o+9Buwڪ[Fv £>Y+ՉqMf'OTYkňJ(+[f̚b(FxMRɘ gL~IWPޏ޽^gu> σeZ>kAyg4<56OFJuF0ŗ\9[}Yiׅ fHB}ֹ +:y5 6jbڼ}B6VƑ<8'R?9D*TazX#jZ[-=Wr?,X}/GOJ^{s)y&./c\P8o׉5Oޱdqa r]gy+9fR#͌'Mv@ {2/wwz p+.uetNk C};@tBuQf~LMw'^:WQisnIi2N(|!'5yUdY#21֌xYxljt )}n:ւjS_ס G`{싣e]mJ#Je6WUnduj6ӞR^#W0ӲN5v n%ˮ:^ffyRi&m3mԋ!W{֩v.껫҉_{Myp̥)HOpTe<˵L[Ġ+t^/k0{w-i{o[&*U/'7ګW@;Ls;کWB~zNn&/?E˩T=O+|:'ZCLz`\Il==3&u9ӊ $ʥͥIwߪf ?.ԞDJ;=kIPj{plWγY) 28Mr<'Gn_|cXZyyy+mWߛ&F(sVDw~~2_Q ƤI{Bӭ|'Pnج }&N#j/ J%~=Fl} cd!eggSM7X]%2ݟ}Zǩ7{J]x TLhDn5d;U<WhUڜ\ɂ 7a:/ 4NȴLR#|R@~$zҢ=oK=D]ylZЮT kDyxnFQ=:Wf{zuTxnY7َU :.|䔞{Ķrq3bΠ ,.KvG.U.maRZ%UwT0=dSV[]BNJ:xfR?R5o \6\C%Ay[_10b@멖F*nDml0_f`"Y e_-׸BZ*E/G\xڥgǜ-ۉPhfFRRFRm`fd\sgR@D.=߼%Ow!"ҏ!, .z[ŰP4c4'RM]<< QZȉC72@9 IQN7AŖA=ɠ:@l(yu)C/P5'**e-mJgM HA@^m=y\ʾH]L="η=NA!/%]`QX)(N^&z d"Q ~ˀ0>KII2q,? }zfi!(3LW ?u4<ؕի'TSxM#u˙o>SΈ=Aq@F@eAijrxRx[mGa}b).= o}~V2`͒ H;d LO'Wb]"MڬϷmNxkd?yZ8 !zN`Tn3u ~fz/m(n+qI8ϱ8Vҟ?-I ZN/9+^z M, 2RFc/)\<B@ﳇqV#wPYk:XT17BZefH1tg||R!!\opɩzM ^o?sY+.d=z;UӨlMXNޱTQhu Yg~I * >Ȟ8FIYXg|=8ޖˤ`G"G{7wV`щߣ;Eeb-1V8 jBo c_Ĥ؈}?ؿ?vބB?Od[ȑi+)ѭMQδJyQŮ/okQn1Cc0tc3|(|gVpMc4\;:4g 9uȰd-Kh{̜'O}Ij5W͌l̖~\ u|3׻gM+n`yi,p#={Na= nM~)6)&Fyլ{+eWHAf\B% kj㦊a_PΖλtc!FY|LElMڛOy'XH&b- YEчzG,BաiEFӰAɝ_fcT]pJ~H,]˹|hU]$o={Ŵ΂n˜! {nj﨟 ( QM^9i/5r apޜ ߬X 9&]#~yC#v]ZzbJ+/L3GNS:'9c;hX2| Y5AS?#D /&ppk%+^ip^wmc~e2S4̚m*4C9xR1̇1;u˗xTסhq)a?PB߫ (KvۻM\:&\+=')?q7b{rmiԚթn70XV<(yy"V?9 ? i ༚ N+&bQea>vzv}\cnKi3bAY~GG-bkT(˲ GZb1$rV/Sbɿ.yObB *%3z9x{ ӹ#S~'V@w|G026)ij~xCpi.ڵCE:g46^l{ݗ\\v܎8z]/7lQ@ޱAij >vcpEt9l'uQ!4&*zw{)]^8-N/UW|{Ĝ^}W nn;GJb:VFy]ix=hCCՕ⨶w\.ׇ*έ*s8fsUôf4>U*$_GOKXhn5۱aףrfgmkչ2wm1w1egu `؛PG#WvH\ojuU-K$޼87jǀX@)NTl1!$dϝ,iN*K|pl@,~0&T.Cn+mUo4naM;>D5j 峅㒩m[հ7\n&;pE>V1YjXmv)Fmӧ ;!Se*I{<[4IOU*+hU^)Hl9{^w '0dʻ)ThVqU*kdۙdcMR߼Ƒ&\4AH&6qʅt ^bC`s^bI)>^.((h'TmrtlzcW]_ a6v%:V90#la2Z/ēltY~8oyɥ޽3*(YxvTp\%B^>,N}RYhf뼥r$ܲήq/Cd&#O 5d򤚂 :6Xkŭ9g~:KrZ~*.TJb2D\3p-.Ӣcf#ՇT5N}"Y q}~2^2[iR(@] 7V)@ P׏:"29 oK|߮EfY *gFi)R![;^ @B4C G&܎D7 %=_ M2,7z:Crxyε@ Hc^Pu=`}bT zK>ee0` MY2O`x0ѩL;Ʃk^ʈ;f  aMĹٔy sQ︐t쩱%Yx#O45nٹ!Y|%͞,(Fc|*ek@"I&fapqɈUC>:{3I_a큗 8 r .>& IK7qIACbey@8 Gt4d_@?ߏfay.)k~+qtЏKGWKA^>wVi%ݎ޻w{xiщ=wN𵗆x%U%@dV6*A3zGԙě@ЛκHf&_5? W[9׼t"v붜]68s LBe2oֶ2O~h@V/vԱy=TRNib'S_O}쮧V(4$nMD᳙p=?E//Z8;sa2`;uԷ?7 7὿4 c :Y Sk6mu+V:3qeocDCZk0K=ח̧a iWujСI̠rZ_Sg{ Lܨ2ɔXu|x˱ly1qS6X84 djgmƤWdYwBb^klsvD*)mh{QN$Y|aih#9IѦؖ2'i筪[/]HGqT ZMiaQ0 #> 9MAΖ'7ebd4xb;l` V֣̙y+lnBΐE*{SG^hb)R yn!V_,/5P8lt.n~pte#̋"\3佼r֩gõ,myM:S"S&‰ɌSkD^$L0kڱR;Q1A8 !Lj2ȑXe'6g}rwc_6M`]e+&irN,I=O"QUQOeQ D/?N5jgD ^n7w1KoV}M}N ^gO( 0'ҲF6 bօgHJٱ36gsw;S.k2x~2g7~Zȵ]76fҥԷ漥ɂE4f}wEr)8-ަ7*7\*|YQ=8d:BbuavSL1ʊNx7(eNEΎ}ef]Z#2?ZryTLbPƵsv%=<\^ԙMvP9WN0Rjee2 80 rFQLcfLENC\w6 z,5f *#`lsznzdx&y {muh;n`O{b’>=|B~ ÐHì ]{ᮓbnGn3Yf~?-`c^}b7WM]!SH| V]S"N4L.5p#7}JPWƷF!gWhrSn?BylFo h{"3Wmf16'-k(n4}ok NjCV]DV$+1:+ lRRV/sx=5܋<B|KW{δ,u;۴-:\lژBQg CԂO^GAq&ƴգΩ"ݨPV{Qoجl_A*P_jn&pEwXȕ~ܭS}L:^jrʘRʆ BH9hT| 4 TZ>UoxTladQE[9Y7yX0n0z41񙾽L5t bux,[fuP, jkk~m]ܻ^uC**ڟHdSK'72K~/3x IanF%$ߎ^$hyUa vMQHo+ҋl@h^v42SK,ŧoX.q7TS <+N}@vP7@ 21#~=%¿N8p6k,_"}޹D5qy7Vݡa`O0v0d̓YUսw// =@5c3L.y~%ޟWv~ێ sSBN=zl_L0=q`SU1X|kk#ZlnV:?x:qs}VZG` 4Ѩ9?;=UfV74BvUꇧ?lwm h}k=:d7[_JF#<5aHsx=}Uk>)ݜbqU1qzeM(:LJLm1ۻ Av[X%h8DqMI6ⲍ"48-jB~ ׄQCfiW<)m/Sx)HNA-}|\⑪E=f}`wvYt]6<๒m\/Y挐wƉ"#-N/u(k@kդ]o/=ZVTiaP-S\VycY0 Ν2OsF) 5-zg9|jzcw7Åς!ܪ~Km_@Q7-/i sGJq71B&|<8Fȳo#FoObi1o{vNqߗMJԫf#LUqk(q:!Naj#*- dj*]$ѹ+]\^^! )mf'/l.UqP^|͡x?W9oM@E}狇h .q oӶ3PĬ"q$iPU ~9_mb?VbIElPYUn24|6G/Ԍ-Pr獮)u%Ѕfg~]3 JC˔N>:<{[/įɍö'gޜU;?ZzhKn.y>] (!Rl *"/z&r{yX+?ZުNp#.-dzGl}r5:kgƵ%zQZS 憔ZfszV<;2UH䓙d# P}7Nm >>ݵbAOL6ZD-?R(fIKlei YVor'`N7goiCT wAwD\ήP$r9"1'Y!`ԯ^^c?*ؐnNZ8y}@19YK<\V,B٩h*.~#\E18)OoRФgN"-E=8$;>7k-2 .sIU"pPf|l͊cf<;-9#s֔Z h>T1'戌"cq_k)y.PiliH%2܇_Q Ҧ}޵k P[xV)Dcr)b I76-nB3T>0Tx{D8ÇJ`O~J$w`NiNDIO wo>ہ9w2l{4d29)+1/}Y bQ־/4EBF*ByySy7d h=H'm[r;Bz>k:]o* @3MN |*꤆`Yknvv>}x/CL}(N>*͞78z^6ySrp#!cGxI4Zz6"{(BU5I"xx`3=[`~Qڳy;ZLݟr^R>CL]NG]ֻ7-ex9_d>٬ﵧH]wً*`<&Qp!! Щ5Ftr,;,(iV(y>zzvOm2Fqm9 ?z[*V/ZUl:ʼnI88͸a+U FCcGD E}z{2H}o߯|i&p[ [r+ nsr}Uz\ 0{= # g:؜kja>J[v~uQ늏&ֹQ# oQr=1t ׄYQf~ьY 29JMR`Xo9HF]@wB  )ٹ3f=MĜ-G[W:mNgejRǝ:gz}yZkq'F()VU;Pȭf3o~}`$b/RO"18JThT/hLXe[PpZiTGF3ڵ kJ%ۜWV*', k@{{s*WFsDaWYWa;?XƊ: *g@&Ң $Q}.Nƛ k WjL]NBktK0ޮf9LUV zlD8x f2,K]Y)L3_,V\sVұ=]+sMTYv U9Q}h՜fU:؄?ĆiS8}hoWb ߅YBXM0dyi.*NsvVS^cwD#J4WZ)r)X)\2RN29cod|w[줞SHhvKy{9NoZƒ@?h-VM@nesL'q9͡4AԠi9{ӔbR TČS BS%S`O7&OgV_GhZQ䤘Ņii^Z]Q_4?[}%߾i>׼#NsCVB xVf47H47ll2}&;x&/v J"8VYH=o,vhv?Is7( e^>_2jrizi>lҼFisi |2Mȁ ثW)@y zVp@ޭ@TJ`!ZpRp;iaV~Gw /|9-wwB"3EZ8/0iT_YgY=ӏ%H1Ww9]#tCmF ~G] B L9O5tjN)F)w =OS00.B_eY颠cƊåS̃ r9 !m2^wp޻󽼑BQW5~2ө=/a*vZ,i_^5kߟE_%7h6T;r{+Gݨl롁bEC7)7L;`t{/+ǽ&{X:a_dy [nT4əkr y=`6%Hoo|"8t^^z[²aMJX f^O431%KIDt=ȱ&(dK)4`jiW-xS&t0YRrdᵚcHbZ6w-00ژ8X\{{,յY_w_۱&T}|lSNQlHAk6Ң0'\7'dz`[^ h˲q˼=VUx̵/,aWgaxm"zèrPӫ/j\1%|,=k[]bY_/Y)i NC3Jz|iI~u?{~T8rcf-oaZSN{u5岜_1ç4@.0,js9[#дX#vBESBaB86",r_?Q/]iM/^oh3h ;mMxzt.5m$ܷqPɄ2 =En-ΊR•ڑ7$|iq+VVK_d|*hʥg~#nASvgN319eJ,S9z$5F-{9/w" Jy5 Umw=dnj*dϿ\>wbm)\:_V;N!(=иQqD#; (vؗ޶LB'h~ڀ/r}!> 7?1M_8E3sP{4)Li`<̂yA#@E6MVSʮJ侷u{Fކ{YY bc}]p%Y;3"FrzQKVYFmuSx6uqao^4؇Ҭ gMnԛY>6\7Jtch}iqślOi;/*w{3 !f?qyѬWr .6LP MrMk%EuV= tYtSJ)SYR ?S<$r =m%{wegn@=~CN¢H]:ɥoaqSafz)XH9FZbbڨe7EZk?_:gUyfdTH{(aNU͠-hр{oovU4xB}ixV,e""5y4 搛l', V ^PR#ⒺGfc2K.逘ZaNy1T9x}I+d28޸B昌n\ϘYڿo)ѷz~rq_7Af[W+D$Kx2Vn-O`-a'IS:Y_>TxFƛ!!!sΨվTku'NJ*{ݪ'YZV!qεfKOW:Toڇ o/!Wq0xGKWF"2蚒ON}T~qG/.Zc6 j̔BYh[ }9ng ˭(Vc$spإRFQb r)Rnb^x߹8⾳|S6Qy2gnOsYJ/yG9:xN-須&͗AU:I5X #Gq>r`闲G'F?6 vOޣʤjnnp,`ӮvVK&Igk+nTPKQYG;.s:䧴tIgv33=R}t׹,1يTS`тZWkf{I3u@A$4y,`!4 m$/k F6vįSX*[& ?birlE?a*c8,iB7ڸ߭> gʫ/vcvD\ڷ•WDz"oFW(9=UZٺ蹺ϳeC乆9 }ʭXt\$xyN{L du3(43ZlI հz$*rךȔkIEaQ!jalxm:uo:|j,?fz嬿v#jHulX$I7_ 9Ėgm-NԚ/;bw:ֱq- 1=k,>lis5&T NQh֫K׫_;ƥg'XQ*T>-Ug2JlC`fa cƼ.¶l}$|to;k{Գ QFW5@jeXk ]ܽ-F~~WS[\EO>Je|XqHW)fL^K>DJ&UM>({ςf$/Yq2y):yf㟤K\^ڹ4Wu ُJ <؊d ,B JF |>N=I>!2΃612JL>ϐ$^ bSPQTx, iqNssHsjwiNYjx\Lw|gS` )")F*q*G!/I׶/=t~5ϘR۽/Mד[oģ';D47Ѳ0 HHGr;:z|Ť;9ߤ98}slהSOB<+aQ|)hBlF}}tkE Nj6vu2~%d䲍bܽ|+![`I P-3kzsֿ=;kqTj;rn|?rd ۜBkln .;im:(KÃ< CmؒȥYx(}A?㻽BRg !x9^>w;4I!I" L#xT@Sc:7bU$FPHǟվ=[e"̣ON/]Yj[6:a ]ӛSYn:=xكc ưeRtwoQ;aV{xE3@q;N{A6̽vhl q/e1p[xH;v=W+Zi )0 x|NzF FWVn/枾SYJ fUˍ/SjzT,tj!e g|dmCd]Z.s_UWǺ^q/Bo9^!2U,])Ay,*8^v oҐQ-8olѥml6=S ,{ޛd.~jƾ~*}حyŕiQd&Z)p)W yݔ'C&m$rZnXEvUo˂Wٟwp7x2Ǯ]sP*6pM*lE5b[K۵uZ;Y7yrxe"P>{,/a>'ĿU,N̴*C_LMo@[jW`S^Ѝ=7Ҭ}emz5p䜪Qom=UF=ꪹ+f_(:WB{dJ7-gt]ܢUKi+ѥ͊/_dm$ɬYɪrjn q:ZۋoMdZz&bHv6V0K abrES_{2//@*ٴ>qYl >XX`AGIOۭ/8>zYk662y3a] ]W (+&FcM'7c JPyϚAbvjΊu v3B3TI 5u/5ػSwvq^uFfz1N>~'{XMVۏFQBd5|kvfsٱ5{3? Y-O9]ќ׽fXMv%)D@E>`rRX5^5!T%y&\XV/.Ⳇ ]ȍf΄lN{6 K]?XT4oTĖU*Rg*R$cN[w7GWft=^5-njVY*m5il*rQo|= a%ǰ37wĈ9*,}*2ݘT)Blk|"QH%gnR.u|} Hl<[+ RTV,aSs'/_E3R9,j̋aHժ ,Fi;w\R Iĺe#m''S%?/u*G'}ب;k1ݬL1I: y7#{Bߞ<83|X@ }X~vZGX(<0ʈKW9NEMuERug ]d091 S}%`*JE լX1!E'13#5[q͵PAa ;^:Yg~38nX (Պ4{V6n6fvF#VDj)>l 8E #?wG0ңeJ 19 Г@"c55XH]ӮoQt*t?R}D(YsF(RL}騁Sox!S[L4ft[(2 wnwsh*wu'>Zq Z޶{[|/s/X;ۧ^[kתT{ya(~(G}9u2EG*o7Yܝd.&.l)Pu;As2'TŹ VNUsvhq>tKO[cϙtЇ-pCfhI^h9ew5I0s@.1>ٟJ6 Vbm;zqa:hDwHKW]/;1on]zͦȍ] f󚂞{nճuR]bdAab9j-o$ZrxF~JqW޽\Шu.U׎#a7FZK[Cij\o+4ۗ_l2-7cˋPi-ST=LpFxoPuPT7m{$Y]pe,Aƭ!lǣAgM:* { x=R{2Wms?/_lMvt+a]yI +FAoaEҲfi YReNk\x-`暎Ԛ9M[{k_ϸWF7vZ:֒*ѸW @UڬHntp }=m䀯 [2'JuD 6g 2RcW˵FX^^U x1rcRTV`CwN}A /Idw]@WKt((a,n+HiW ]mt/KZ=yA1RGJR=`YӬw﹦1]K0~M-wBc ?u] T v6`E%x#ǨEC vICEw:rJ J`lK$_=?.! x1 6.+mm^ RxX^03 \b8e_j3VIؽMiiʪ^k/< ⶫ`j[kAMA(! G u7Cda Y_SXm/ٹ &/Orte<;e`#T cY77J{ q(K2vZ,+b8y*a'cp \8_Vz}`^?)H0)?$Nn%q2N>=cxCҪf q'+@'ֲ)$L_d>Y=bt܊ջ(醿I!B޸WIa|"jc]Ö6}sL>Oz NtrNENOOxb]zT7v IbZR5\-HG#JsU$h\\~ɩp $gktHp{{QEY!XF5]}F6R7ůsXE~ 1 tJ%Ky?ev"E(ywy H4׮tnɏzG^ǭޥ|Vt7h%z@4`op\{4BuR] LqK z$9٫n WVu!b/,7}IC#Jn/'d ;zcy$h[|9e~d2* np9{seON4ƚԞdyiiPËyr7s?x;y4/><76ѾeՃiC߲e}[OEfi7ncE骷K OiUWSYp.}s%*K 8rG+ӕ7Z`WnO$]/Cvgr 6VGk7ZRo2MTc^ԾيQ|Mx J:Ֆ} y9"-ِ.8|Brٖ6@ ׵w _5cՈhXGNhCpWEd!#O؇(ӫY7g ?q>mċc0.gc)Fk+ ˅Y/ʟ.{!e'ICf:熣 һbgO#mSٸlKi۬#Ap9+q?~431ƶ |w}Ǹ̓eAd;aQwxeΔvǹQ@g3Śqjav;JQ{Ųx(u6>wM ˥Ij-v>ϥTM~!h6wG9+t.u^ss̐\3|%ު ^45T_PBJ4ޡ5xg1/LCYSolg,iӇvG,KuݽFW k[4z.[mYTGcq-o֣T:gW_uE˜=6qC<.5w lX1sGP(\|ߴ9{sWYofl".H:=DһN~@bH8:M <'&P{MejMHlo",x KZ5-,̙$MikE<Vmί}{3>˔WaV4l^?TȫXxKMܹLCJ[˗13I`e;7_.rGq_ޅK 9D؆ C/?J6&S}']B[\)OC9k&p:ðy- VDCY}7j/Nsw\/A*[ !xS/W&S&PÂw"!w?YFRߤbܒv9V⛑zϤ`Ko`u Z E~`7KqC'{Cg[+o~[+E ^ư ,?[\#?4}e4vߠH&Zuy5&"&"~cpu[*]/1*5aIpB%D\|A%&9%g=m#6ΖwߦEdѷY'_0ƋWC6knU=P$[.PYތu 7`]pp+{p뢯1W/d6xq]TQum;uDlG 0}#[סżKMg$S==o#,@g rT>WrjgP pv0n;/vn;Ύm&{c3UY64QQ)oaFD91ʓDA2!\؅0^r*,&%UB9}?k)f|vvWԞd.m<Z ذJM2k4{YPiǫ\N&rb69B3X$HB=wxR#0cBڋ-#SskJ|ziz?RҾ{&Ff Tb_ ke}u&;ԙX'T&e h9]e%T=Hvؕ;Tr{j-=F0J֣o֕W;ÚtZ˘.U\+žYq]z4o6D|9Ur:78@̆ݷOsSvUݗN8Z8D\J]߭<w}:(z).B\]N3?TgmT͓Q7RQ<]H0b  T7 X;XX`m^5}aUGkGK!+CS߫J*5zFU0ހljK%S1jEpWU P/[`9ㅣ z c~\ #N0qNf͸E6?tZ~K=4qXt`-6׮zٸğ36fZ n؆!s&#IMlM6@ST;#^-׌Цgܹ_cn -CP(ˇ;Ӵ,B xprɛys 2TV~Lo q l2V7Rƅ361B_#0( O$o;w}'3F OR2nzYh'e I,1-fIk:"zXRz߱BzɌZ\ Y$N;xJ]>y7K]$=/0/Qy6cIzm4gĵx\ۯ48 aE_~zv߅mv a z\^|k͐6[g!hsW֋{k%o g,JM\/۟^ ?7\,bZ+>{XUY% c+mw /ax^yAg%?R)hVُm js$RG. ;WNԧ@l} wuFьݮy(hYϫW/(Ϝ?u^=yooy jAk9ozew(?R @,P\Osy̧%K<`B>fEo#6>y%QfZOz Cjyi*s'߱@1uJZ?(jk\0>h2S,?dqEo=9-{pinq˿I~[^7Tk\{:w*X9~CeJ-wDc"uBWDoqr%Y+ݷ a!l7dmW ~_;4<]ی^=>,[e8b1ze٥Z>0Ю0?ߔK7:TխUWV*X:{iHqA˧A %u4b·Lw3Het6Z4nnX/v )]!29hzшH#ql} [vi,( =Vt< ,S͖h~9G%y|{c{:Y1J[Cכ^K;où%lu)(CӋ]NW.?gLTgmO%(3s|߹|P5~rȞJbb垹"ƶK,LXK?dMʢpuuD%zt6lzo_(yEmT.V19ǹvAFkϏTO-w &cc<\pkF& :h/pCZ(N{  tׇr;ěZN me IGCe16~B ' !Bt%BzT_D}?uDT?֞3[Oժj]Ct|􏴠lwלN7B_5ڥFXE]ޤg [&簘cs,LY d${H^'mH;`C LFmvxu! meBXr jі,㹳༙L'Q2 C >˔Yo&yɍD7ö mrfj-V?GZ&?jgmAJ"[-B^}9?xJAkx+X +J62hSKM^.bg^EuI]͵^׍A9硫]pSU1{vT^PAΧPu tQT 9 fπ~4v]ː_쾦?n3\ mf-Kr4љaw1n1gT< '*C&n}s}P262\DGE3,Jq|ܙ7^}o!o?*n~.bFP9eo|= QR|߱ڋªfnP6ḫ\_CV:|eKqxzom0#Z VlӽpY*u~?{.>&Gh^b4匋%k1rFc}>\F>7޲`b v`d" +:Wtf7MhuhF~c{oj )sh'apj>d>䖓K*<"Po`*?y,nfcZvȖԕT(in!ARA"o+rLaXq^&m6۴:"o:1ϙnsu>ygf)Sz5m\~.? dzV_yKſ;9+咲Vs̚=3䍺*LbG O- w;waU>wOG=(.2G\"G6t7:^ո-a=ofHv`33GS\ߒ1>n0w4ͭ6jhwe8`*ݵAU#䓍ɨT9qykJRu:OFn^}DI}BN֒ U8{k=1h7QZ,HmjxFY I1 [?60gm'Tl{+͆ ?FePB?o76ݺz0=ͦ^yU|A+>5R +EZYnȰQ6!;f0[cMa{;h;gb;7X1e6VW)aRLrU$9+$FG%'b"7qO,71lcV~NeT\/H<4_IڎAW[3.7c|[󽡑3 6vǢL夆Ӡlh.+@TsI/J/8Fhm Y~ga;jpuwn\RuGm۟k1|o.Y"ņwFŘ%yKJ֡իCӰU?+S7wMCOVc^Jmrx=rC}~եssM776'ig,(ӖX?[>؁ھkÓ~5FOUF=^$8GĽ*,v{@c1!ԲBѲ"Khkjt2 x歃Ͻ}/'bՎ+V]*>stream =@NP7`Phr+tEy[fzEvk\}?*Ns)y8fx L. S3(p) 47V"@{ 0y| 0KPzȸ'J/IH2y۫y$]#$$yIpOIIPIfrx̒o6z?lkYޯ0(<ӡ:I=7]NX?4WHޟg-eN.ַ{I:]I*nI a$$.Y;8 t 2,P/^B'k4W~U;<vyb])sOV@Q˷Α_mj_~{y˳|CS7tֿVy 2$=MI:x&^*(p-r!yy i+-nMrq]\ ]99?q-1<]"~_ϼ0O>8vldqdz;&{Ic^ģ{cݽk.6o;{ p㰒W\p~+sb'nxl O?< "Bb{+?8m`KIJJ0OXÿ`yJ>|H}C7rj\ p\hhKʩw[>nq19lYw߫}3 v#|S:~;[W֛:h6E?]05) v 8dӖ٧&YCY<۾{$;vɩx8ִ;m$# \f$tP¹rLQ z4lxڔ t,gn+uKڿ,2& o߲b\7\5Z?:gsAq^|}5Lד4& [٬)+d=ue%[ z:R0W>_.`y]up1u|u5{ l$8in i.g'W ]dgrx!b[jsyn`ukʂf եS߷/-f7.,mιwߝu4 dw8ۥ$ gԯNoi4omjx"{?K`m<9n-/;wge|.S6Zd{?3q~O#љDM&?iJ+nٸQc_ ݵТϺf~wYƗ4f"rcҿ7^m-%Vi̳^$ (Mq:iՓc蟏C%pl+8:?MIJQ1[3Z45{3E3JuIv0/]=4z7ŵnGT,)Zy.ʭSvqW愞si[٣.j xL\0;|gmaw 0nvpQ̨2IvdH_ӁCsT$#pJ[/+ hMC[qIY v Yu^@'#`$d%\Fֻv@|cQ2jG黛ꍺjSz7눪,>jeU3*nWE^ojJ\5ciǼ@ ],_L1ܤs}u+`5k[uUo[^>|BVgd NHOujXR_=JܞwP&{ 9. ~fVdpB>oL[cngPAat>"sA֓O/0F)xoY-G0؊[ؖޕM6Wc<037qlo*2ߕU}a8Wo#,&Ŗ, JFuL)7~\5~з4?JW {AA֢cۥ( XsQU`s±p]2h_RMp^P58_ޘ߱z>L6_6Lt4g; pH5ΏA$,D*QIV)fy'r|mՔ]V һ}LL@Jsz yzl%GAkp"SN=aGLC4+)"KhH~Aɧzpˇ-0.ɹ G+2z+SgtEzbd:ka&~=:N^FO jde(?7h0ba>UD2?fVC9 DŽy"9&7{d}v]]héZw3P~!!N8W&k &x+ePxߤKj {bǻc&7_,tB=6yl%SX m*%nvxV5]>BRGL #S#g-2+a$qFT62}^;4Fd8 19uizljxZ,}Z#So)Kg UYl:D-X|޳nr-R+R1JNn/3H(UtFy3*ߨ>f:[qVmTg;ժ)3զ=UθrXrJle{LUm|FzKQv:1W1&nNtVk(1Im5#\8Uu|~)WpJl<;ܢؐDh ^92Uʃ4ʍa[Rp) MclPCSQv.¬F@,6?c{BoxBZmhYSO}^V>-5pUMk.-TX6N)p(*[XؾĤ >{y'yuRz]c Ϩd JM sŰSz@ -z㝠zjgϲY4='Y^[-Vw.9gW6F`Hf ӌ``O`eP̈edF!M ڌYVqsH{;r1벿\W-nR, ^va؜9sŚ>"&g7O<@M ] tx11/O}%܁zHOGĘKRl[(!3mR;-$`8Y~TNS߽ 7Y^RA&@Fu ?`vq=T)̌eP#/gk e0S]}/$7y/zv'"9͹ 3m  /m힪gҥ@M]N^P#dv@#@?B`@IfsӂMgA=I$TH≮ϒn3vo 3'$0d.G\N_K(ZJ?!|Y?GЁn~+Z?V?7Wv[-]jI$Il t;bD65 3xB^'8ʏu~xyZ|OڤjZM.NW4,IU.l8ϛř>mb-+zc/m$mvI" R^,j=X|TܜzԿu/jC,O.DT]gN˶8S?9PS-B}=ͯ?gі= yq3;*@Y?}W [8]nPx;|gN* -T9 &;a*;i+u]4#x;!zH5Y;I>?H[ Wkux*mȉxLeyωC'a`wԱ]S%;#Ni[pX!~]ꝴכ:[7*EMlH>|}ҿFG\[͵l#_^|Jkp5VA^"ltC^Җ̬_>lo(:NBWaH=GW5]^}mUxi3jx,-ϩuv\F.Pr3=J셝J]oZVZ/Yx Ɨ؋;e:56 yR7FYWE;huje<-X,]tzq]fW dnR<+ti`ɐF:mx_^j9pNc_@BQZ~+n<fFn] U=aS H. H9gZpgO傲q2|7/gpٶr+C59-nͅ)#<%SY4W[+iD ~tK̹ܭf~fIsҝŵ7d5ze;JΚNjsy3 5_q(Mv$nU.1@; /?z|Z+ vv|AG1ʭ9^$vzU/pcL@|1MroњC rrO߮Q?HꁑMPK;,ʏ!l.m! ed )mU>Ud f37=5ZY.yK]g&EZ'/?ηz^U<)rhP4}hg> y? GAr*jG˵-Gn A3y]CnG5E. XU4ѵNXt!/c-d/TkwEz ۙ `Mu4P lCvߡϽf{Y)`u[lk4T5KCOΔ4M@""W t#p>è8T̮@1Ϸh7o ΍zGkƶ8<*Xr/{ﵼΖI*} ,!z(6f BƓhĎZ놽N[H c5rbl>EWYc2W93:6[u-|K2ڷ!*,*zy*otg҅&QJ> />Ysou҆0'$A$yE;ƾd;r i)DzټKZZ_~wnm'a27GIb[ѷ -_dRĢ.󒂝bDIJbӊQ ȝ_FDz>MDKAwu+sFƝh˺sMព;XQ~w.oxdNs=  1f'4dꞒ%G% Sܽ7x>1?0n( eI d[dp\2 pC>k6kZ5>zlk|ZZ@2rk,_Ks-Vu&JafP8Q^a?hkTrNl#ڶ7jrԪ㫺s !jf}Uگ ]g YT|>h(zZO2fe_t= ws\}xe D 9KÐ%2Sd ffRjU* :.k'>K},ƽ btO02{Bl 3>oPP6Xjt$Tlob~jCT¨3pݿ_ N{7 }oPY,:ZrX)-W@A,ڼ0BVgsw|19g2N h zxD̖h~ muQVy*?kwƠub7<6 abl,j=_u,I 6PL9 } /aE+^fVNVK7 0X.ˎQ_tpJYȾ_[=([PRKމo䶁Wk"z WG*;JEwlT3nݠil_.jjOeJxTz{T<~-ȥ@ /ʆuyTtl+e?gއrmbX=#>>h&@ *ǝb>2_.$j6Rtr"XwP,X{e(/RgRŒ9 ;>kt~ i^?o`c&߽mp&}+#@ wjc)@f@^6DGhz2@o)@ϛW'f$նrD>I$|7d$a cuK^57&\%K7-鵄`F{gQWVml$z@Vpˏ;Vu *([\t險<(#bG߉"ءzǏ*E$yT}fTm9M#5RZᆪY 7²Z|Ijc]op%ljwlķoGVsnvqX쌒>pk"69] #bex34?N 5#@4o(ʈf6m;d%w/id'sy}o BX@?pGhQJ-qݲJ` G>Gu\}tBFJ6%H{}m=wqUvҧWct9mZm1}=5ͬ+tpvQՕvʹ_cJҲywq7ϯ8]Ón!MsaGd }c{lh:X5@'U˚3¤eos(y|/?4yFFݛ/ f53g5RV+T:d̹u}{ .nllƺCO i.~rj4.6sv`ȼ~೮ѵ#uwJۆ/ >4$ |2WIūOn t2gPQxusNq/:7P^YsU{s` g8:;MY&0ʁdDx1o<}lhGIY,dlFLd.J&'e#&tj&9g|ԛHxHYc6 ~)u!ΩsC5׾ t٢ozdzutۡ:Tb^NLu 4kk[zH俸 "%ΰڐRaNωu/:} z HM1-xkbָ)4uz&C~+:5E]P." p={TJW{u EkҞ=h K V{M⎎ R'k2SqM(}X&ݚ\|H*Mﻚ1ݜVi▨*۵`n{EyX)X:Gd<_~9:خȑˏ8v6sb%?AkSiWOl};P>,[[HQzJМ6d5-L\)(Xx0|vM>3,>3o?=zEf>T'KҷviC~rM>P tZo*ɱ˾k٭w.V?6,0ߛNXyaIJPL `lzwرA̳4 gy1OL<2Ohbik5d$2 ]gv8k7kAќq (ޱε͒vݔ}w_ Kt¾'B%IR4C|U@9W8"vH2}~Gـ_ 8D>- Iu~"`rZaU8{_W}qw!qSRi6^C:H-߰sO#/;yQ7AxI7EOcdG|/%_Fj"\޹;=N:[F3w\N_fS b9jBԑƵ(naŲ L$'aM{BrOՊA0 ŮN+?+99@qqW9+LC(4W=+V‹d}('2ZT;}Cnf3_)](N?ɵAvQb7 ,pCTv>gQד0(=IQꉧ-u֓3}`nq޽# ZWX[֪h<u՟r:Jz5I#.^$'Dh sJn z~%x~ȵgPƢ3K5d[H5jjبFհ8gs`:jD5xm`WȑBfe#ؿ(ӒN\Q֙6} N^EXQKSlG1Z!`=ĊN3UUI-ف"u^Md,e]qO7N-zUyQ &#SG*=lZYp5a XvS֘Q~1xw/[ܼR>0WrQC1/[G(A1Tl#dqrB5]=쬕qK LBf#Hzz6Zd`reO3.#jc%tZݤMq8E9?pᙢ8/e$.T6kox8<~]$=,UH4x8 [p̥c_5ף׭9ZQTj=esd/˵2>YH4/gɹ-ilx3DFZB_}ח,arcWĥYj⻙5aF Qڝ< ,$WM 3 cZ}hpNzEV)|gD7.d$d݇|vzE(āfx g$ 1 V3 MED13^?kw;IG 'kFS.z;*a*]0[+rXBdg͝KqW['UXUj([`ӀsFF& %@Q&ZP2}AaO^g3- &ځ<7j!}J_ `NcI)~ d@c-3qM--ahoz cU96`0u ȈkZZXSrQHI/K\{ӥ8iJZiil@( W:g0,h,=|<_V<V;C}tdٵpg)9Cp,#8lo-ukR>G}p&(u\)(䋰I?G`?`v;K.m. அY[<{*R 9ߡNFB_dlii*/AJE0N~%VΈTXnWTK/ӫ9/HRk[Y- Y^r0-clξm~o֫@YrZ6~Ko؄jH߾t]K~ЫU+ݼZIkҬ .>RY>9) ׽?v2Lwz^io<+Cu^]-st/eMRZ.Ej_ϸi?'72⬴iխwm/ּ IvAcYe_B-렞k,VQt K$F.y+?4;>Bԯ!4OSٸM\ I!GEjej{VݬA}r=;m=u_p䥱{fPݫ w2ҝW`v|>YQ_FUMO Ҭ7`lŢI>ƚ*3Cȧ'WN哓V=Ai[\nE)̫{eٓ܋VrZ8^S(wp \Lfbuc2\Eۇ"m1'yxn:qbo -0o?`>gУo/}1VIȞ}y;mk6>7mѷ{D7Hߞ~6;$Z9 Fh;4qr4%λ 995ݤ2w+/Z?ԫY<>OCu>xOn_w5v]}4)8tco݇:jTI<պK+(D[H2CRf +I< 8'9íY_l]I> 2"Ab}z2~*Mq|j1kM0VLBIWs^Z\sR[wdQg.D{'5A\ǫ&h AT2kr.tyZF/4ϧėZ~`r3U^ZC6ʹ/7[scH[BT@Q$LXU5jjS7.?J6ZVa5Esu{ٷ]zAu%hS;,K6w3Snh}ty|S4qk ;cS([76,f{ʢ][{\PƑ涚j0z}"ǖ*Q8+-)g`6TyTm`1`JÿbΫ֏-T MH1߸ oɦ6K2\mw,' +XG-rFNeCO:$@]QF|2DO=itaNݳw>[==ի'BVu$ňY#74R{e2V<5Ѳ˕r%[vQ Xh[wQg)HDPxhUkHzd_]!ʌE&NLdyT=**LՄ[ӅdOύZg4ZgpyG37_#= q r$8tTD-mD#p  84l^] 6L1 dx 2F1WK÷9~ަ޺͒hsP9F uUUʻE۴_UX؛֠-~v΋sIwe 9c@c^g,TX(c?' (Û/L͂a=Jl*+d|.'j  Ub% 9(# Qd8;|@/"W~OB?]~4{G?WLʍ碽4n^gAQpHy4^pXu:d˕߳|G( {"A$:rƬ &t;@; " #ɸs@γȋ\k#ceIA޳.! O_3ZCcz5)X8Q:ZȬg'uI@!<(Me)~&jPhO~|g+@в.]S :(O"?=U|)!55[cGj!JMϓsR[C7{k>`)LoLܸ=w. `O1`w_B3>`ߡOee~*)4hp{R^4n)(y(wۆG?:R+=ۿ?<מ]7YPq*4' uo ):c }T\W&tKS 2:nj럝|6Tm񱮷~qZw>ޱQ8ijf'x[%}zHvy2ty6NmˊZ~*c{7oh X%#qMZ8Շ6/~QRԔ~ׯJױݳtO}4?kQ{S~}mӰ/SV)C-O&ȼ"z*Իctz5i&8(E9B' G9.O?JƾR~I{,o`b-ܓ뷪_ ~I-a!wBUyA:eXOz$JʹVrUI6G{d>֩|HO`Wnf@w8aQx}=7WOivGk6{H#W뮮UJ p0gӷ3kSqgJ&itf[Ϳ\pns[؟xY-uM9)7xt'HN?r>tD=Zu xtvb}<^N+huSڢm|ʖ,mq.m`cV#?|})I jǹ7m]guqwt 'v祆+NQW\wC"APO57=/iiemfo^l[gjQl$15Ck\ꊮi~Z~_Dj3dqr.'c*x?|O5R\)?ezXNթV[DmֽhѷM~.l7ǍӓK*:KkVUTsZ=$ҫҸ#ye7˸:vN#*fzr*7?pw?DfByx\bUاv'2QaFd1l֧_'iLOƣ-n4*$%"o8H"XI"mф7rS8VЈѪq9WVOxcB\CA`Y3b̰&=tJ9-}r .%m!Ԕ\P-n^i}~!KV=\rI8Q b50i:eh&RvEK}9l(r"6, !Q\Wy8>R{\=~_z*~TJYG*-y3.kMNUxd3W:}NTto%ɂц6.ᦁ+k8N%e.D#:V}W~:CSOc;kTdKeT@r\%nN(9GMbŕ+i4tP;FZJ3 jU~T>(L*T^%&;G &h ,hlsU DuK% )IB,eSE*ql-u8X*|U'TVb22tEt ult1e\1DSRַ駴ՒyJ[%gc)EA\(_°4CI{Y[E[4[!ܖ9w|Mwt(]xv|S佼7^e6RmT*UdTiV[)l|uҮHγp#ߥpl HY7+xT#p]a\`ap{3?[u]ikHk 0GG I/MXfDS T}78 Bw C(WN,GsB~nG7"g>87̀jCj6{5znV2ĎW)u*Iq9lL i+b*knLƯgΆ&OиoxI1; ^Ī Ƽ pngh%xO;Zpng,%v鯕'IMs;APDf[#QZu` ţ<"yTAl往@4d Z: 3NĐW1 m@> M] ( 8qo wdc.3'풴6y ހ0d xr+JzjکAO>Y8`콪 r5@x6xdWU& (u=Ԙ:j}j%Tu=@3>D1!yLNiv@'nR!( DXhK?d}uI"14Um ozztӁA%`0i0l1 +Bb;#,l;Z7Zzf M}*$mkq?fp35+ý\{\nsB8Y}? 錷(BE3eB̈́6f{@ sQ'bxw7ب촨jAA3~xfpyCZg,ϫ爰n3[ KC2+# rS!(=1oj+}pMRm<=K_ia>ߝwtittnKH"Qg?yЯlOeDZ?}רnGޛvԼ>Wgޝx|/YG`~uU[&Kd6/07__I A}=\ 8XE1ZAb` |'ϹTrA~5jN>ڛR>|w >gk7}-t=B:N&Ly4VlxA6u_ok7>pKas`䆃ݕtճXsB8rj ) >M:'|T(dZUDELO/0VYV#7 qwkvDgCNص~?"? G㫃2ƫ?Ǵ|A7!t>UK}H =3'Çsy'{) yfo<lCZDW,y}Q$C gSp˱rMx`>M/Z`5euv}-QfR~+M+nDć-5Sz\_Qe(xnܺ݀6NXb~6?ffmw8Xv6vNkqot´tmlOlb x_RyqޔՉ˴* /=ο;'~NaUIZvsU_}&/Esn Q=T=,\sn Sox5ma_+ƨ r!1Q5:]TgԇjZ}߀lrhwn߀xu{]d}l*Ýؑ1+ ;EƢBƧN[$.}#=GF+LźU{C^lfZ'JZqn&_ؕ]DY&nߺ NkHl>m6VXb#=TU#(sF ssi) (=Y Spenb}ɥ=OIoK-x3{KѵeŽ]sҔanͧsժI%1]Ƽrnxwclw1F_,ȼ 5;+lI*j(xYl?Iwo6?R$]ҬӴ٧|ϱyXWl[R7/lbK{c 0{`d: O܁C{͛a_I$K5O1G4ڟ̥{\6>V:9(ӚQ*砘bU:Szg{Bܔ[Kx^ϸ|D mk |NGLٻ9CVQÌbZ;][>xHM]fGco$|TU,='uÕ9kK牻Ӑ3җ/A|m]JӸ/̇/oPGa^b#σ1W}^:泚C1u]$h5d,IIzU*mʇ!׋H_o)O$Z-Z})*ut-*\:me>]w[[>^F Z\?0ۄݚ:X{g-V❻JG6B\O.ttӦ]_qM"3QInӫR0)!_f];lE@{m[Ghs{yѓE#:z\u+qn;b/,72CTԢjx7HˍyQw]xM0pIJ`P? o'en7K+VUXk͸[bչ~R?Xy5^/Uzsgb'qe*7Fj7;_EUo X0*.dˏ4!uBybWucKb\fF/d:f*90[UTS;AMpmnk-2lI%Ƹ/4.d>^c+񙟈'o߯YneC+ ] ęb{S Bgzѡʉ@SNǀ:Ot4>"z?Lr($I^k|4foac:iݛw?Z]B Пp}~6:Tbi"SŊr埻(dlŲl) )-MHdSg ]_|@P+G~0UQ܆kKt uD❎>~Pi C戹 q冮-0uX aq!"ioS]QW _;(4Vj(_NF+Vәzn$€oZNI'~&l*-*3#Յ7Cf2Bz^8Їu<qV)ꅼ0],|e.,l>P_,!Ho07[r3 mxu!y-V|_׹dQ=0BG]/+"OOs| nBZw:^Pmҏt.7]ٙBYu2Kʔ3Nw۶1|Ax]@`J DcܱJN2f^T $5_ᛉF# ->VhJ 32&qzsPʬlq\uzR)B%l8-y+rg@6E@ db{bGi>/OܖV^")d-ARv׀#; hXGS h6S,R,@saC&lne@ݥRFݫЙȑNg𤥬[Z:=鵏nkAGXϵPh 8!01*C0#5= `x=.LgL~:$AuLO>Ud0` ؙCv{#pҮ 8YY9njpRc QS@ -%h Q& Uq`~9DdA usTgp%~)vqKW_$3"F&S N3{izkR6ʕ8$9aUtl[YH>>shI"OONo$ _-Ak@ m ?vH/t)ρ݀,T)6k oU{F@f[{u=us.}oWqx:@nC _K{UFMjL:*^Jmeǿc_C27cSÕ&tC\*oK-ѧV>Ź'壼}|M#Fղ~N?J( oⳟAû⛷W-\kplP\Nglov?ruId!`m|6Uvf*FVhy ɲClgm<30Ӆ)SduП}*:?Tt֘A[;༶m,oAN\<@wkn^T3wL1"{< s8)އ*!;46Р#}>?Ws ' 1g0|޻\'kKsq"P"#v% " :, e!&Wz'S+wp ]{BvHTVnnz-BC@ߗ/xA[j@>;Ӆ\uƉMGu cn : 7?(۞ҏݩaݺnuN)^ejhh%۪c)>DK#fGynQSx(FG.\!> čF~LߝL.C? 3kUfQWljULg9>a{#-u^'6ڶ[U|?4fexlo:KC~FEkf@EЬ"rK ~rҩVũeS /9uwtt:Ɨ*h)جT3/%(TtFQm'{rr].3{]q24M {B@Ӕ)E:_): ֋v޲ihG:ǼQlTDz\cYC)E?ЬӾM.Cr4khe׭58^{[`[YyyaW1şSc>]/'u'G7980;c*LF_zcuk\*j35kWS^˯)/F=ni䖚j<kXEkMtfvz)ݠӉKȎv6V+wwf!pҌ1-]Wjѭw?fOOͥZR'C9es8SHQH'¤X[ /F?hy>)B%@}ޟ\+/x4soBqfvkxĽa]Otm kӊ#.GQ-ub *ۼ[QNK\QS&ӳ$ǒ$drTLI7\=~Vt,Fsf(vD|va]=kh>W#}mf:T9n~TW<֑Jqy9B\tjRj:bCx(F %<3 \x!GCjDТ.2ON,Wn wl4͋7@7w %smzZY8(ΕJ},&[+ 5k^؞({*<ٖ+Λ.)+~D~|QWK3iecQޯlv/HsQo$͍,iL Pe/G{h,5?$ɩHxՇ/A; RȂ$I5BnZ۵8W]ņ+Xˬ_1+,JC ֯1HYVhbvѻxS`:N!ORέT1 Ù]_|u)Vg2 :][̇NMsMs]:賨Yk0>audW非 Rg8, h_[[vz wĩJvGfzf$ tyk-8w;L%59de62e2vлեk;+tO5Vj4G'/{oQ:et-IXSBh =>#7ܜlZҘz*kM{f(k]H:OA] '5Qmm)*[A&R<Jo}GlZ+'BfurLu3[.]GiBgots],i4 EYvt!X($UZ;'G˞@&%|QIdscshB֫2rT쯅e0 E[TDh]R6®ljeX``t?.$sG;oV`RuX_Z;H5Z)*ף@itT8amwzAv:ENR+QF$]o mIVȂ B0-Xt{c@4=~х̙-2uC23__(j_L! 3h ̶iΚ֑ />ϖL%2ĺV!Z^keQXkg5u0hg^| 7 h03ELSlϒRE'gsOQ|4ۢEfk:K_rGvB@`"TjEpo@y7ʍAYPƱ n EibdudNrBIId@%  b㧝O[J+ҵn @ۉҀoP?wX|R yť߃m'kv&uۀ<{|&)vs@! X(Lq+T uIkP@G>K@tz߾ 9n58+a~0l H](%w b.A&֟dOw 5t54IRXk@K ' 'ui) fr8E:i^HU'Nʹm]tS: }|Kɇ|tVa* = ,l`09L9fi7?jY&V*`{ Lx*KJ7wTmuTS UGwz½X>nYwF7N߽Noe[TpS\#` Ѳx^|H?Τr[~~mIqYe@߄3C@9oi2'+~8 ՑrAEJAVK%?yv+:0)>ʸ  mw4|F_VYY R=J`[}6[hHϧ)z ڔY=%l[u>W<~|.3x> gvxNg+K;ފ|W~xs9؏h3Mywɬ4A64MfM5c8nοu|[~rê}CjqxśĽSG}TYwzFa眉sv>j[ U²CY7EO[(̳PM /܌" -o9[f9GtY=/h 96m 55;W\Sڋ>}?hn^ϳyYϜg7]eL$x>9kut{lUF c~ 6?ǻg{ZI8\f~Ӳ埋>%̜z3Y'aOOW}cjyGwU8A'j}>gS;ux΢_trO $ 4W|[2]$Ik\,G=|ȧQ\o=b쐦PT;~^@m|ejQ(>4$fg3VtSx]} Vc>aeIc.^(}>cF2@ݩ^v] :>kOlU iӢv>3)fO{,­m:BC~ spz6cF# "+hצݼ'⭺TQf9_RfczוѡXA!!>ڪb!שPj.}ёF7׵(>uFaegɴ6-V50{";QY\?x*2uϺa]}ogy4-bo ?PFB;UsDp7eI(1Rze]IW`^,] r֥V/8Z ֖mt@%=:eXEihd/G)&k}u4\هժFQDdr 07P|Z> 9FxSXR)%Kީ|k^t[aYw[O2.z(,t]n6]ۻ}NG /_'u9u_Z3V~k{>!t~+~٥ܡٽmچa鴷o Ttg֔2c=F8$>?Lr{[S߲aAusE >cn܄PΜ9g\F(8hG8hXK\Qz¶`o''2xZW'()Y֕k+"5HRXp_xDP;ޞх7g79GaUzJcȬV ¼Ģf>ŞbVt k*S nn ҫرBpO:5֎xm/J£/ GО|6rb-xzvga11A3\$=te;@4ՑATC*TzXHFDɬn%Y,7YGJf\en ﺼY)dQeֹpΜkIB'LW>;E@S넡eDR%ǵK2C'n;vC'KƶC|5>(i$fr6}% \4ˢU?n*׸4zb'?"$yG(5.| (ndCEم ˝LwcЗ}<.SlE7]QNDU_+ʢ7UPEJSs`jmeyPޠ}HiAժ u;qs7 XnSR։S!8؄<RjR-[#dmHv+l[\b/j~YyO 8ipçygaG/Mt5r}3]j6Y\Փ5H5nx4nR]Z)P1D$Z\ܜ}R0XXo$}#-P&)ni{6")lvO).9P$xcHdË܍6 #&*t5%̙I9Z0ё)z3x,VAmGꜰ4e1\NrzeG凌Fb#ef9;0?2nG6 DÇ4G[&|6d(rQ%o"E Go3TiXw匒WeJ%;Yef$Sl@L?(+`))XL+Dچ_o:@PDdt<'wKrLED\z1w22*aRgBmf')<h6HRms1yhxI\3x.. Q/{o~N8p:笿>v?7 G l$Hy1MRaGΫP6K:: 7TBQ); T DqB& to ʦʀH@[ސ i,)y=#|F-d;eYR%7lqmk)M@L=ٚ28n@ zrl)%@N >ŶYdOiҀ,991%򊒶)!^>mh@^} VS<1u@&Z;xk\Oπz^< h1SkVIZtGƿJ/_12ʀON[G|Z.Qy 8;_C@uݿzM{i3@_L5>6L$`X, )b,xmy0[~kټ?s216gvm!n'{`i"ھ3|6پ{fG?'p<~m3(l\|N3a3]y+)מ5s`{yo-o޿ն_yK#CÿZW;k *~MxW)N/ mQA)i[q*xbKb録A &Ù{/WҟJ[wAț{'+e yli ty׉v@e(y = SGw':o?Aۏߝ|yCϒY;x: SͲC ͪJ)WדTwk-.oΞu5qULz |KWUy |Iu:Dxvxz:?>[k `kl0Phv.*FV&Ky/d}VC8`潧Φ4Gԇ/Z޼þa9ĻLM5;S- ų1gG|ǫ2]hKwM.t'<7Wt1:t2bwuxuCt$Q1a? C~@g?Qf6vܙBq\?cjF&c2L :?fýݩ%7n.vɪ'Cn㻷JcU;>M;6$yct(n9ؕ6v~_ȍz#̻S_8Ak{@+)r* !b|f,μƭ{P.}+8aF}kwΞkc6c16>- N' JJ7Uq/>TJz3vf{,Ͼ0um}&,(զ^]suoTJe^?rҒsR_cֳt}J ?Gu_ǜI$JNqտXp|v|o X" \g5x>_V}dTBb~*'\$b ;fKƅm*s*;~uJTQ{]4WEn嬻ZX0_f5_7jnާFCaJY  N'8^ KH: Eh'ݰbWuXgV=\,NERfW`n Aņb&:ٻci3<ٳm~b^acedJ~bDt 'OCuqkpV]r6bgȺ FaCG;tşAB-j^چ,j){ruxMQBA:b6JVuƍs gG.e!,”H!`ǪOoҎ. ].5$6]c$CoFLcdR^]{f7tX^[2}-ӨO]QPcñqY?̲Iϙ\MrI;R#0T/||:>6IJ3ƋHcчbjP5^+í݄1-[U~[LջKj8(J,g^c 4o1_d0.@4:4YL=_~A&O B6q'%]<&pE=?6uBȸ"ڦˣM+zJe9]M)7;`%?_e>tj_~;TDJ䩎Uɦ)ZCR@wK{V,` -- JIlxҘ+Y`>4ї/mmbn'RS/~ :@b=c٦]8*jM$)ML=~5R=(OqmLb#ae@avNGN\C<2Ee,G!^@ ʾE#cn9kl+rK^gH'ԉz"϶C(ϑ#}+б,Qm`JJ,{zi\e|uD# C4V-/DXNjQ!x|.r ž{)gY`6hźIwdH B(MŗάMC=K E(zHEtV4MmL48Ŀc#_ï|]+-O%ثSD6ZSg) 72gI_[xEIJrD8#%tVQHHf{ M;_o3YLt=-vUPK j_%eN %$"c l&#`SL64if.b{I0 ۵T-~JtN'/6O 7[h&Z{[7* (J=B- xS{"v Ff2``z`2AfP3~ާ3wiDc 0QrL\X- Dw HHfu:"6uv (<'s5*%m[`7`-5 }}5c9 ؓ3ʁdu?i'r٫L& 6:2!N3*zzPA dvI*KɛɥQrrV# ȮѭS 寓Ñ +fg]_}O!RW@ۿo+Oܶ< @(5:ImNP{*Pu`iuhTÿ%cRx~'E\5=O'*_ߦn _W}J@w9;0ppÚ ?]̲0r51Li_%k&#\GWp.'r|c}TŇo߬wػRsKh5:&953(+>.**w z_#97pzuZWrA=@71/K!CK?UxrjnYJKm^Lk-]^JShLc~ ٣̏gMm8'wԭ19q&_*"&[WQYWc¼&:vlĻUU=/pPE䣎t($iau%֘@(_@*~hyf(ޣG}P׃\ Zgulrt¾[Hkʏ7d}U]i8}kJ1ٻ6!G9f=h]-NGt;4z>cwwƴgopDm- i3hnJaLfFU>M%u0WoXPj/ՃE SOW.թ wǩ^:Un{,6=nTˬ!^m:֮mZ3hՁ|wՏ:r'J.Y鹏feJr,߸)=MNcԭh-QWCu@!%굱jmlfYjt=rarr@2ZQ1Pp%8VM gn)h_1uZ|;ǘnd1P*5N*C^kUf>Q,rRȥ⦒}UbN]hXu-n&Lü O˹G|i5Ⱦ"1SL B;vuY3LYWĊdYvLfԕm8ՊhJQB^A}T&ss38;x^!T&.R\&)L=I0CmHo8[oUӆ1mx:۔ڹW]Hd(<͂6Jy3gV50n+E$ *\&##UNcENikY3Ԫ<;p~z>vicɏۻ;8[93/a-P/%g|:RwՒ'Z4۩WI)vۙ5ywN$%FĩeC(g^e킻IUrycΌU;%H? T"9+b{ۭLs{9&l.N;Ͻ)Y/̊s8rjiH$PVF,P9y0ihf N0t}{fhOZ|jJjJ%kJ55M>%ߚu~Mʅ6;(ޫzuN޶3()сLAGٲ;2--,afTLډ{FqYuUe)T/Ž{SJEh,iJLkQxft ~Zʉtɣ9!$BUHEOnN~nQ59UwdXYFP{q&boB4Œtk>%#p`sUh_ &\:#rkliA׫ӑ5 ^kB5]B)S^~ڷd;cK ړ%+|$x.,VWD`<Q)򂱒\uirr!dXgI=ފK}bG2;2`GaO'l, CW?p]ӖEQ5;B Dg%ʊ$˝JX GE E81[r{qɉ=hVi5)cU|\s^υe$8ή{{CWXK;k5+Mشce$ "ոbBx{:08\ >-\|) Wbc:!:e,-ыOivM(LFNۘH;tV3mF?ٌ{7qFk(2kQJS܌(Hq= ˙1ɞ m\޿= _Stji]jP1n1$nYP"i0"ǙX<*$1d݄:6:ghSznS;h-LQV þ&&NoV=Ij^w.@CPС|lPӚ Ja$^iX+5H<28oTJxhҲi+{k+ФJY O%gݣlBL7b^C4L  ;#=S!I'0%zDa,LQ7K{wU 2<&m}LO?(ڐ4=RELun8!zX/*d*_[)Tk1ݍу'M3JҖ7q5l?QVfeLLhhc$ә.[L0=[dk*ձ=]U#?7,);pUaT4ht`*P@Ro;h}'}*GAA$eR[,HGg1-ܷO FRv!}y l`0|3O,J]eY<̍A2vaiȝhRUKp2`7`HrT 4U)"C0@d # 3}VDJu@h7ۅ;ЌdSXA('-+[ش9;Z$I$@h HpSob9@BڞjVmHD@29 5$J^U@``U.u\P;? Y[QЬ_\G6iK< dرh+\%5nWZh034  yQa'xys I!S'{ѓO; v7KȍO\@N/C@[w,-Zg\Se_O:ӐθيLe@!ѓK!4BkBP :< ST5|@m&vqP{`z:m@-{@-* P Ps8}"u%-_[:)",j:kDiKةv! 㡉d )@7:,@7"'>R0MpN ``s0H{=''6h8p*b#{nMl&u; V=,$YI%cG` 5Iaf*Q?vkrcM\ACisɈXfiҿwx=V~SW7\|Cwpq8Z䗇k6nfIeq!ãM#~P*M~W1az8cVڳF;JV:N۳,tl,Jbn+q7vɣk]k]v3di?ubA \[*{wSۯ^T}kݞZ!yٌ;w(ިJ4[?5Nm55lU{3:V3̯ srW&{n~?wW<W))$frl+-3Ĝ`iJEv m*/a ) :Z̬7Gv w`/6!)"אVZQ~?pߤ aUWʅSWvįbo{M1r)bdE68 ``&[_L8%ōfwo/cSY G ~?hXUދ© o ?ԧ̷]ʛPzG,f߳Hs 5 F&.SdYT r2T0(91-@\2HC6- 8a5|kt-/+Nm.߶%4f7 N&`:y0 'v>3W޴i$? ֫i9uTuvv^&oFN/N;JE=<)\SX*޻i8uYKr[>sI(FUmI;u) uҝxb<Nj+2=, ĂlkZ[o:ϝˈs̹ %]8񨌢"<ܰN"W _rUTSgR+Q~PLcN9N/C{{XrJj6ZV\m@-켜icX:oFmQWlY.cϜjAdPjQPU|/O8Wʴ=3Ԝ߲O@u҂آhaoK3se嶖5r^YqR7sKRv@Xn&Óx ߪ6,HM^Cż3 ;֕ެ I9x5])ҽaہbM[\ӔIgIe/(2NFGQM;![/z Pqҩr?F8d- JJ]B(/N'f&,C Hiy̷C$6/{ju8AlZ9.{w'%xhuZ䳤\hU//UKd9d(},JcU3#9w,fεH4Wa+@j2#:ļkɾ૑ӧ7:gUlr6u󂉚bQĶR7IZ^l`cۯ:.UQNYBX56_''_N|4s%hJԅ Iȓo9ȗ- ^} /.}<\;6cmm^_гy># K5_ Opsjb Cl'g({ʞm8 ';By>|<W@y#"->nN<~ ڭVdH?%}FK|U䯀rog+QpI @*K &cHS1`R/ϒ@=|  i t8=ߦ'\Tɬ}Lܸoeyk!o_~OvOUGMq4\@y@9 PVhaV?y]ԿYdyZ_[_=Vn_o23wp_tM%mNbMWs_q;njΒ׏{@e+~rv;RW˞KW9Gu=|X]j&73yí-S4}u:I ͻqI^:3b8dʕ5Ҧ94=O?h߸p~v0hv=${“ZʡM5~*b7zף5m:$V !TZ",AU*u48ڿVg81ޣ!#=&ݡRK;qJ_kൖFb֛V3ic_+]ҕ꧎۪7,yL2J懯5Mo~?ʽֻ[bz6"jmrjBmn A\ƍp6eQo(ZW/Cm.5ɽ=W*qxX,ǹKv4+vQNd<+SWKWo7f~oo1#/Vo i= Ӝ]:Xaꐪ/9F9rVZR(FH1WC1 癬 smT͛{,vJ$_|kE~͈r6k8x-c0"~\ Y+1)Eɂ//Lηݷ7a=b>sp>Ⱦvh^&w`VANiy%t>zew/}G~~_=~*J!3~>o'\Ws2oeߓ G,OlkނY{91䱌Z~P6=Qse{dXNqoν."mᶋm{]7/v+*H!^V[U, 퇲Y қfUMGW#Oz囹L5&mgky, ~o[=,]>qE+nt#=3 {YW+2|U:ar! WRt䅼Wp:u68bꠏqz\u:a)_mݵj<y9umZ$X<!oFWK| q x:헹_a3]RɱaJlk\rTW)Pq;)s}p,"Q+._+ﴅ ޜ5hia75oV>g0rQ =Jz 68ĚL +NjЄf*(,+(,Etj+\F=CXJ֫0yhN6;5ib ƪP|a I=raX cѪ!h2R,ku몔VVN1i$?vdžܫ}ّ>wN! ~*%)l#&8f mKxs{HZӴ{VIO9Bߥvħ.7|=sqRnK1=HA޶ANy(@)1$o{1Yqe1ضZBMjY{"E=ޒ"}/:* jګ;WO6 "W ;;sP]v2.raeeR?%dC⤮"~ia6y!o@m_g>__T))ZqbذG{Ee1m^gwo=Ip - V>Liɵ1SV >Ӛ^r*[J!f+fA$YȏdR;|Y\nq;@sSĖGqڣc.ΰ´e _+koh՟: eUP*4cT T ïU.Mm.囤KCRy)azIs Ɔ__%- N\Q'X?(7s(Ӓ"}n FҴ9EjPTʾN)'O)%"[+D`l([t9+`,N='碦/Jq N.݇HNg{oyk2sxMX̙vf ёz]W/j}i 29>6myB1A{|iG(XÙQ+686m̳3(uEƮ=KOjkR gC`\쩊/=.W3ca'=H/!l(8P6?$Vt1s$Q 7軌 μY,wX&YݫUBtGʢZj~RU+cQBh]aJ~o7GӉ`\O%c֘hH4!'$rkEPA;a)YbǂŢKŢyDŽ$B*G;;A,#g!4A4U#k^u ppdA%{s;W]GV KɔWնIt gLKhM2 . *_89k4Cqm;)8l14l);9as7]7+bQdC:/#,.R%sc~tvI,9Ƃ 1&z+S.ZwErD.#=";hV&CI s@1vAzZ܃fvlCk+ IXao7WS?wР3_BfF/IiTkD?MpW$s~غ-.ЫsyAC!h,aA>;#}hG@IntZtr :)Y#J檽tyԿb>c=\ytё7+`2s|SvIUͶ6,fK 0|עDE;A3h&f?w/c,+9m*yq{S3aʾV:A̔tx!o|IA-4 4.+ߦ@ # 8 ]XќX@u5A3YDtwRzK .! ) 7 4 [#MJϙ AHj҅@E$ C@SW Ȗ2b n( H'36})pwoxMz(k' Wv+Vg@ M 4 (؃kѓ'[N0 uZ JS@.'@K8愙\EwFD/U2v{b_SvL֕2H7WTn1@mM̄ )N|+qU0)7+0l :'oq^P{eX ̳[Ltb nј$boW8蟒ը+揞|?#{uI`[o7/!e wv O;^tUlLw6ijD1 z|pzGJKq&?y|0T[@0|CO?k/9+|s|rYWg7?EmqW@po)*_ W,u~eυX]$a @*/ U2+9hŚ̗m'W`qFq+ Bv;ߒ_IoO?mnz^^T@Y$se$Ҩ$KOOh\.9XY+"^ڢ'OnM'zv7}k+~| 7ugmSChhZmG &N[:cV5ZkqS1Ibf#.[vKcP^mJuO4MR۬4D&Ur1~GLs8Ė(pYomC[/%s׺ =-ks&{Kq_^h5d9t:Qq5fԀ(WqWExK9]gp* yZKq.\hML7ډLAz;z?ɵa'ݪTرQMS5 /š7wЫ;ް~̚p]*$BaF; 92o9 sM{IRVMѳH%D[c<ʔlTMZEc,]T2ZDXDM7,P^= FiVrzU,&^,W*lA(b[PvY_/= vRĜf ;*V}J\ ۲穧W0"u;/,iYǞCs^ k[ťT N}x++VRLhb}A}:/.,m_ɷ3b#[^A墯(K);8[Ӓf͆v7KK{4aŔwF)EV)e\qN).*e>k5nrmV㥒! Kɷ#nnܲzyf;uB9&3L/&Ӯ]ϦvB5歔_fT,YJ?&ᕨ e3RM1Y8$p}$zDSrh$sr7rǟ{VxG4 nkjQW[s1fkaڋiuʞcDzpcyI1^RNԽl0zG3|Rac'.wNԜ7׍M|axgl b.qslOv K7o왇ޱKlFj'Z19m.'̬X0o.HZPn#lIp2bqbEJt[n_+.6_Z+BV1>3fb^.:lĕVz-o8mjy՚t$yo[Tm^廄Cyɦ) H[d#d~lll992cDzOX5Y+pn :& "u 6u൨̓z4hv-Z2ͦ_kGk>sZFGʵeE&8Uc{d9['IMM5Zl?Bq|+9| c#N>`^fͤs,?6OFn>EpyLXEL81],1)[FwhzSD^m"+=GwxK:Q"ȧz*" |+<ѵs>Ld͂I;/FBᥴDLJ"7!MWgsON3XN;:+p,*~g&H>"S질:"%&_'b SZTFLD#|;Sszb6ي)R&]Uu a=3I\M3P,T!k4G{oOH&#Q h4GW8S-o1⑫{^ż{IF /6Sy3꨿I̤JBRלLDo 6)6O zT48:;UDc] g` &QPWLV> STM\<{Hj܁zxWjIu`)>\262"*EF?/H9pe tX<2Ơxq !}`I8$XJi,Zf}aTH٤%twXVy3~WgE-<$^'z a ; 3EQs4~W `m+(`  wH (z`/tj.0cl :TLߥD{Gg뎮^6E(Eږ];ss,J@FK,L3 j neAq{n'>0oo/l'^$znR!v]K',;j9I,#XAET7q`9G(}WY)KqW~ur{" X( i 6txd~w37' b|g'yꙮA:"a+<+,,gb`EL[IY(Tրh 2>bO@ƺJ{g$= 67[a-9@,Nb;ѼcށyE9D EnbD'UaT{ Bk.o@ְ )f? ^=^R)( t=~A)ϰiHNd2#*Y:AIx~U0hS@3Z4ߠҐr63 zn;XW* M;޲mVjhY!\h5vhX8[ٰM`/ rtw4q^;]WnwcO~ڠ*:l⠅&\ ,4)kP{Qxx~LFtA2JsL CXe4}(MLr6Zv'|lP[NK`0#j_oȬTN%CdQ|4.=w<)L_gw}`[QzsmIvhi&eRbW<[qT\WjzZɠyYir,Zn`_*Esν;\TRܛs޵Hnkֲ(K(a}rhv*YiPG/=KKO;J4)} ch(f,WDfHh.y[uyw19+Z.,ji5sZ#q+e]M$-tiiC 3ɽ jg ek4vm%}nNޟ2G@DH+9YTPZ2I\.]۪3LyM/oTc穼L1YJռ$ᚨDCYSV<Jf}=suɌ>.M:C.)o8){:}uBTP:`_KME~8u>0 f]4ZvyKr֨yu(NvsmVg[t,l'6 e8f<{.2F.~g3.UqtPnk׫bṯA)6lgڱ8=5xɸ\,E]7svMn m]Ik>Ԝ_9Zcs4k*}4We4EJjsUlnbq|`iS;n&3:G*1.<(*1LoE?;|,8ZU+MZR~bLĿɅy咨-&B4c#{Dam&+(5^l0SEmF[;&ܟvU .@J:E|(þj'ۃS)4Z:#K)O.V Gw8XpKepeeHF$ēZ{EEfѬ83l>e \E}5!ZBGg4*eƢ&U=&VPZ{ 3LX~c$acP]Íf}F|'j(f2y2\֘eEE2 -3:&$4Mb*W2Sw'tَH A C\),,dxmX'T6v=|w0"y7Z.v3l;;h?0Ad}/6HezweŽY͓lvRmѬ/k )="ɑ4"6X :@0'}c#|⊍^x# 襧IqC+FdAhbdǫ\y昢B>ai7 Dbe]*D.f. !S!6zCL ?WP$ Tr>F$-$"5$o-ؑt#ڄr g䓹A+F3 Ҏl%$I-Y,;7!W 8SAIy!vT!?zY:"f8-A l8H"5D\^e*HbHH6~YAwT;N\|2^B 2S Im*#|(V#`0dGhDb=O"?mvirB E>].wx@ Z;x{"Y9x?c Fs"t>+hI{sÄErq2j]B` &v2@ܻPYCPo2=ʳШ0(/}bZx @.Aǃ|w ӹa8}èyjK&[N"su3#$B#5Ňd3TLF-82 ѱ:eL,@ !ڔcab|}]Ct0%,H]IʌJDt!q C$/ң{C} `x|CƝGߪ,?9F72" @<-qZѰ {hzІ|Bkըߎd<’]I@3(<'G]h8&!^Bs3`K^LA7v,x_9!Z*L(krL)Ѱq^/Ʒz_o$N ?`;< Kn4(bK0o"cHS<2Y/?Wp[vH3P,MT.+Wxs|rt>2<=EzOۻtmi[XF'@ d8R yOrDKՐ X } =<@IJ9 }nDD6fM1ݰw<ڑ߄]}5AR< -/e\&(Fg0}/vwPVK!R莆wC6 h{)9/}eas, }v|Y@j=@j VIB+\s >{sZH;t j3oF{oQmYͷֳ!f kH,\h윛v]9XA6-<x 28?bFhu:36BR}ʥʔVw9xN9&"\4V䷵$Vvi0o!1& U(pek]rC>`kkHd^56M=o0DZQp*:tU#z J&N,kEL@W^|[hˊnmNmMY2+e`nmsݚn~NeM~u>ۯwqQgL>m?{GD _u%";LG.zI*\Dwވv9QlFg톽pYl|0)m6.$qYj+3mٺ!1 4\_l8ÁcѺXOPfCJ6uʤG=pW ( ,8].vkApZRrtzh\Hv/mtkCæ_`ۦ^0ƉxW8䴖d)M1 5V]D*҃J^ۋ76qn{fOY;7Is)p)4z(`aai 13d^B=ώcN{75l<׭xj>qd>cN89<|R.݃OcGOi.=&x00Ƹ0X?R]`*f׳vK`-2i|]JdQ΅a|x8C|re&fK_YVx˖'f0O!rS$sp<:'ym/Iwxv`}5ԭ~=21|`AĻk q]SDF^&:7qQ.C)_vYb;\sָ w3WZZHI')Т|`Vc+qRP"MlQ^ {>)JHpj1JB§S:(T7F__(!N+']gv3@YmGkrf^ס12O`65@)/ %=3Mf3Ncv UZ2(V ӂ̖}S-Cw3j]v[ j6G *l-E I;a2_V}{⠑NFFZrH lF s~?#PI橓ewYO),/̋R.r"0lhc+W/,|7j^̎zovjwd8fmGIJS},aZG*{TOkqm&_6 .U/;Ze\8Sjk}V0Vn9&rQOMǟy9UQFVZ-r+8ƺ%9߄&m,ն&m2M"<$@;P[S=;ߔg{y++r+`9oSLU},̫0l$M/$۞{Ko%~sfRAht+w3eϖc#;?n`5)eθ9I-Mn-0{fPnbpmfz[rSx6Sinw7~;?~&,w`5Mgf&W'>Ą{1*&G񄳾ߛu,%!-Suu;]!hml>5!X/p eqAMwwF`<[LO(_/K i  =(0z:o6W?h2̏v/b) NGA'W!XИ(\p`ˬhÇNwwmAgV93G&'f1&fvs`Fz>0\E2X6ewKەoL_Pf"%=y}|`:/<>M:&Dctxk.Q)+cE@_ߧ@glDcoG8UGʌBH4xz_T9lU F4fAz*Q}.Qm*`а]wBɿYHz]!u(ծڀ*o=lG,w.ݫˤW/|Wp/p Z4Dw}j3h\2#N>I!2OӇ7Y{/Ӛ=N6p/c{wո$xϫ[Ms6bc󑅘zVv`deYZʯ4ly|'% 7h74oZWMmd.4WYH"p67[Q}BrﵜcZUy AR+>F=5IW{N4]!?E..ط}>~A{D \n1ӮڎAھ uzZooTj3wp/a15h2\Og})uG>/È.*beM]mD_F@$PU95OZ1%EҢ=K 8|`_) OC10tz3`ٵ9sZS T>,"-"'RZ8b?lw \/)y^Z *Y0ˋJ'bWZo>DRЙÒPG^:Pf?5'5;/LЫU%3՞ _0;xq?0?&tY,sF 6@FX"C^tݕI{'qyO1=}? joOQ A԰''ɣ\}zhXĪ;d~pe1^˞y5(gzoǼ?}wg{ܒe>E-۸ul&9^ITkoPO~-r)mbl |rtkm:pz5.?#6x` @'VwAXO(:?ޕY>ɑj/Q[O%GYf b8.?o?f3D~Uj9(j_V:>wWL5cxr,f/VE'3pB?9s?nmg 6)ͳ>JBq9Ǖez䯫Sm#ku4NWr~9ړm{ ]on\g݂LM<.d]KnNƧb& ]\p20"}iP#GG9pmJ8ʣa ޟVsi>孻'-laMz Ad6N< tTSa߉jdSr(e6dUj`V7GY:2ZƼl&|[Kxh5B WBGmE z_i5GJQ-jUe}gAR98C|]㤕)H{4 +/Ư8&ȶiUoĆv+D+7[7SgjTaXIxAج]7_2|&MT{cjwտ !El]b<16𼢭դ*ozާ.]+I3VP endstream endobj 132 0 obj <>stream d[j/vgN-%aZGm>B JOew@zfmkiG\/FT=_9V_&Dz-ukވz;5#}Vl_Kt7<\I6~pfi/(gď'}(Ȣ ׮Y܍xj[{sܯK]JLߊ\qqF`ѤcUh'߀ OȻ7@i?~&\,w`~`91?7'b½ćp{x9X!9[_13vf=:f}= hܭwΫN;ZOJ*أ*gSYffu7 ;0яGH9!. &af+mz.}b=Wٚ%wL=p6#)bF"K0S'U?C&g| AT YZ% ; \"oU\Kg-&dF·aQQL:IpG (C!(o_kk>4C;W2.ߺU\4z4ѳai닁Y}W_qMO_[ݣ|afSq~P aWT JjJ b//ͷݻZͬVۮ(ft.3Şk~]#?#3俀k-5{_ .Y(1_Ҭ4gΔ~t6]떊PWEp@~!~KciofY>ށo뛵0]]w-:ξUFt:O_Wg?d 8 _|Upc!bLv jB1pY\$Uޫږ8R8H3wݧpOPvR]CZoP&Ax:hf Pi5)vXĺ(k{F~%#NÎZ=[&vbv<>w~vujm! 2WMAf:b!0V wg߁ZDd+&$bOs"nmGe2P>oW4ye_{XjB &(ŢG;6(:ChKTn,]ebuȺe|Tp||`gP1:ńҚ^=vS0wZs҇{m m_#·Iyv EyL> e{q[&.UTʎVuj,5x^?Y>}&g7BZD't#Xۣ۬zݚh;ˆwNKڡ;Gxn4![&s 纪ȶ0`V9g dPz_1\{~(,jEo߾֠7T=M']1.G"nw-f tcUwsk4,6a5SWW >@J mPRn,p{Iiw`I̻{9tD{eg؉Fz?Vuߠ芥e2:giq%>g`x5vuu'Jq"9)zG\|p2,K Uoԏ(X8[w۴bElK[鹏WQ=A_/pD>Ŷ.lf1<ϞlJzKK%.v60b_pBHNC|MkGFUGSʪ \u}9|]ޒ {yw ݏK1 .;JҀʡ~_7ȧ 9S S6otm(]FXDEٞג[| >lQk<ج1I*Fl^mƼmES}XpҎ`le7#kLƁ};P׾㧰ǝ ]fT6]ƬxuNo_)*n.wUo[ T_Q޳갯7_bZkH V7'\5ߗX^wC|]{/C|&t|~@| Sxvf6T"t_;JFwS Ηdsݨ5M%7?9GGo>K#>UƜf5љ;Yޤ`IAiXb㭟Zy*˃']Ӡert>A(#ֻuc)9|E\zlDf\Kmώzo, +]K2e*v\1o-2X-ePBI3~qd"MhO)mu?ڈE W(F:5O#k:(z/\8{pW:Zr4Jjrh}jpay-Đt,!h)#\jD٫^Tx{ !z98+ITUtÊEHI߂ɩű^N?/SxPs'd7nC QTpgyʽzy\Dרfy#8U!{'O׿'@7:Sg/QH[ڠrϙFNkYY eG~.}{'nGmDS,?|+̾%MgG2~}D#[Q),/^53ֳ߭{97]J4(_}c3c<חh-Iہ}ywDR&[*;՘hLa<;H63I*1D_(:~VOJlYKhXda7ǪVscBwS6+$ PIIhXPfa<{0ȵq#wc֚y**YT5&.:m1*^(gQ_b߫8ľ:7 v.E_A$''V`[c]7chK{,xM,Gӈ\RğZ&q{O}@*gpjw2H?pf3uU.l,yNѣ襌XMJToysp h$JHXs3d%]~бEW y.3O&Yh<][#WzC׫ԒZwKmgz˯RK`w_%[9=i8mӢoeU؆K6yUUZJP; U 7_hFBCSYoIpG8pMk[nMv~а5)*+$~{ѫ%0v,+_W;瓽4v% B+k9FYFGeբAAF%V޳6"vMdM>/c*jW(z(dAdLZ 0?J^Qa9$5! gG%6ޒ6,K?$S+a\~Y^w E_TB6}=薴NhkNpR6?Wi)hc41ʣIahToiD8E*yr`q?-J5̡Qʍג]+f{:OT+N{îOXg vnq# !fܯ7z1>ެη0뭦L?[B u %?섾iM_\Lb]7dgNI+ >w,m6,GU͵K`+[^'[t!#Ljsn|1׹5BXF[4K8NYErH38hn[յc]oo/j/˝?n`@p6Y8y Sy;\rq]QJ́ؗ:2'>" .$[5^mjڻ@vTfä089yb,Nʤxձ՚icc^GnncFbȟ.-tòDfYkD'҇t|k-fkӥ,̦zw=*}; bDrH1![]Ö>8]iЕJt[B :ȧ@<4n3k .5cggDZ>@y^X'@s4\IƐ[򄠮5m®#B˗b+q:U%Ž皩VѴV^IGWwOjŋo/WgohƐ[274cȿ- noMy5a |=T ?4QC3jE|&9Ǔ^ sDϳUJ_:fE?w$0ʀcF-uƣK(?v-(Z`mJ|~j~P؇N!dVpq1D#σ1Eޗ94fUIÆ}?훸P-b5=L{1O-W†/ް+Pjƭ(%RCbHgtf]4#*Z=q+̙\*  zv˥7C~t]emBQYkCxܦK6}6m#WP4?aڄU{eAťIW<W[ nQ*).R:y@{y5MObȳY:orP߁=6y~~Q\/Y)]>-^rFhr;t9'hTH8.Iwz\m]N{<U}O>w3Hxm>3m^<ѷ%&eܜr_^GФ\Dە`-`(ic^NDG"0m!_?D [8^}.۰s[-?MRneUjC;ZqrU{EyT9[tۃlCNUz DONv ^ +=;^C6%UO,k슗ڑ 6T۞S۳0uQ?a%{Y煿@7~$چloTh{6 ╳߫:qZs`cWԪ׺#6 zlVJ0R؉RY7_ElzSQl PSBMV{d*mw X$<9-}[{ĬHTv,NZ[ҊW~}_+QN*ڟC/BJ y ÙG'sCOI%URՃXB4r;lNӜg>Ez%)l(Gn1N?ҊK)[_ ^@wmj%g^.s-=T6y.ǝ5٢-'A%CbOVyקl35lu9ϯa[ [<bu3sRjO 0b :X}xd"$OM?Auf}Q_9r%Pd8\lW(7e *mb_,$[_;'oV~%lMucH'&X+zr&C%,:3Iv(ƥje*tVmt~ C3WW)'e =x63R=8Õ~i~*(9rEGqÜۢ3Cȍ7`Ɋ?&j5xToΦF6 o~%:JLy *Co5\ s-V{l'Uj.5Ij6wpфI)։c&\b9 Fu{ؔ+ޭ_5'FК.IrV1Ϯg'E ƃ)p8-hRqUGXÖ!6cg'ј鿓3B?ZǞD߂ A:MC+<' Utϐk) 1@I\^c(rfܛʳi/=[.*m zuKŐ벿i{gаt'Oi3Ɵ֦f+N̴0_Y ͊n?yzհGs=cP\gSkmn£ע`Ԫ3F Px@y4@)CAì$s[ !qm7|Lu@VkE0"_*^_JIGDJvJf < U2fŴE*q&\73$}ЕuxgwS\2{1/M8/ؓ7@ŗVp67U(rPtN@Aiܯd ٖ͒$qQY4`Y@ՓM˪ L׮m#c%hV}訸tz뻀& asSs3Ût[@-MeE82o8oLۣ>Б;+]R1T{ZU-*.*N|8wwuT(;7(( 'm@G5'o`KLm9T3*E^Gt>ǐ fv<*1-Z*ιjJje>[@s4p+{=,w/UJYx0S(:CQƇo$6/ePgbvM/Ϸ eogNcǛOPRkmnƚ3k~ h2Gi'ۿcH8rM{&]oYZt3zRx | >3Ghxq*ns M {p (ѳ8(Q3 #|_ z9t*&W]=KFRfTh!z-{;ƿQı&ese~zB)^d+V/Ŭ) |{{MRVv+GnٛIB/!"@4Z{l-s,ݑz&n 5 0⠼^^U)7WĐ +nu-=Ey>hQJsؕymР\ב}] &2'ĐPPɟ* PT,/^~q:XlKjk빺!u4[X]TZk4Jl?Zootkglb!sMZ=aO.Èѫew > zya$i,52@Q+Ɵ>Qin#@-J]]nqNTXJr 6|7Mebyܑlօ>m<_X`We͔ qBਗD{N[P&3g8O)+)!2e=D+ĐSt~^C*^~>$Rx;p*A+jHm{'8[IA5t]37]>%ˡJVA&G1"z6tw5V\CҞ`: xސMnP9ޑD8̒_9d2ʧ^#z^&oTEm9d{7*[Fa?`:c`rxwɲ \1?E6rTh;!57%S3P>VLsr3SlUh}a9ڸI\.kʛ=nJJ.~j*S.lqwGc*Gq+xPDtʈRSV # +2L,|`ۙy#7yޯr^/MV1d&$Dc<R^K4 -9OcHجj(ʖ:KjVX:ψ!A@ĉ*Sa7Q"قZAHOb4uUuiKmui.(tI;f /(Gs:?.'|͋x>' e܏/=J ujo@}/̧ęAbK?<fWr/8\Τ3\Lf~ώe.e2Qr4nfIڞNߍu8i Đ@[ maUXn9Y >#2;jO3!nU5 [yse+wO1`:Oxlr!$OskPoָĭF#{X~e˼V<6BNx C}I3ZK BNZQJ=yifEfQwӎ1,;밻.Ѷƴ 1O"7\B⻦!w5w;=X,'~;䘪 !ׯ A#W CK9::~k[ۛw}fZQh'dRqWI kF5%Oܢz1\k̐K~2;/ެՓW^WΦvY-悵чDށmGVh2#Ըˬff$;_KP{cڟ { PlT 8~ yV=7Ղ1vi켽\utף-[cJ4N΋Ny:NbCpMU@1/Đ?]~C3ۢЄ#W1_]@R VtMPH :w3(û𳄏ݻxu_֒]Ocksn^4 HkydW)ծb-y\LGs C*t@Q UmA[qw߂_S_|P4D9X˟i/n,@-ϻ k[] R:  Q,zHtHP˪?ާr5JyeznT֭]G%?'{DqF⽺k]NW 1O`0[(" 8 ( E)}u%bNm:Y-Fw&ݲنϗkTO|1>)xzfM_!E|_t8~;}0r1`;g:A6AI6A!Te):x4A*{;_́kFUZ79C|]ArcdƩVF/9,+5c;~\2pAVor@|.QJZ;ڒq./;GON/@4G^/,mq*Q"k_q3t_q. x*TI/k|=7)hX#":(vl}((O `t/qaӰc R.a>zh +wze¼+ԼI:WI; I,m'™"O= @%'V/C"̢|Bh<7Kør-C䀽`tdOV|8xUH:'mh?Ĉ@xEPsW0X sQRgAyٻ?:-5_;&nwo?Ȋqv t|+<9v{ǂWrψ!_P0OQ P^Ds{|ew>w"r'4Pv*Cwȭ%,暤=!g>2O .|xvlf7S<. oJ2Z ʎvxU[k6u7eїWBٔx*q#{pM 8A6SKn7t :3@q+.\a)C N9-2]nwjs;Βtb0v1)ja"vzܾ[j0~H2fi}lQoɞh,@ ;4NVt=W[6tX~"|ŷ&^4ޭ4-iS ՈW:Z4 vrPyGu;rmzvc!bR?Y^}'FytW|}]|E MU(uoPsBmO!ő! o *(I~'@gThl/!N@k3^؟SEŵҕO3keVG^r}9S6JeGDž_>ԇ=EhBEӇZ8*O4juֱO'#lSL .ǧܪ&*gjv>=xaܜ[gwM._p R[z f n.mn} |VƓ|BÝ1N@ O{`mW7e+A2K 巓H g v,8oyiX^3Ld\WSU p8ǟރc=b-S )Uyshl)g^2YI>)a"c&U76=O!uVů4hS s=4. }qiim}xc'.nyDfM*#u;F)aܷ\{@|kIʲyaNN*cV3$ec(<P?E_ȳҧnO J=wר'RC-yg(X, @ (+>۩9K#Iz ӌVdj!?LKǏ>q |65/.kuV͉ݷƤ鏚h؁A?/xO7th@f;sq[ 鬨kS{oịFVZv~n=zf5 䎃oEnzu1YN?1dz׈iGN? ^菳x7+] 9ov"3N]mSNѿ8-c= W~tfJqX%Z:j:+Vs^=F[Z|zgĐ GzNMB\; '<6 7.u_'zaQ;}UÛ9mtڻ=;˭+-}GR j O׹6;E5dKϚ~C3h[99bE;ȧ+ȉ-tJ43]fW!aXӾ=^ύ ]r ԅ O.k׮ګeTX>YFF +G*:on6?Pv&,xbN95ܽvh6B;)9 *+ܗ98KZK9t/ksEVg?bjZ+= S5Od',&@[F{"~{N5qf> &LkM{1;%j@Gf4OiaS'YE(bo OCقAg!3g]ј:ԽiC~mǐ`{ sI^^y/|$9>ݼ&+#Kv8ea-*ħ3@~4Y[ȗl  e #r/Ż^΋!-2Ѻ}YqNn]rC lE{(V(7W{2DB>o$dONcoѣV^no+-6BcU!9 A铨C~ t$Y Y SQz9E^E{E<"!x/4Y{?,{Ű|Ȗ/顷xp]ҮrLD:Cjo;lg7ބi:J-Ν.%f=N }L?\+VAԙ-Z%8Ňx4v6읲h ѻY|blmd!Z~'cm)^) >_$GEMAE zAૠ r (Zj#](sF,5ݞO${06~r$uZ9)gĐ?]ELyPAO9x0h?wמ~F,uK4bnsBs]!dLs`;̹3i0]6;[}Wb(Tm F9-7Pvw;@-W.融}?UB9sjNi/#n/qZώ1)_R[+Z{ϭE6PP Ɉ(0b,=w޳{.hxYn(a;x'(d+)`p. U[tuuH Of\C 7QvfC,hQSp4 {y_ 6"%wU4Akvgڟ-5-x,E rVz\v\_r]}NR|2G֬Mhˤ,봑nWe|ԹQK^w5g:' p yYb5^yt0gF$;(lƨ, a?g෕s3uJUCgUeTUaͷYٛAUs:f 休yR=g*-ɗyp]&3ѯYvx#Zf1:eGc[+Vg.(/Z#XJG*.Z7Ltt{T~_0c>-ߣ#8!x <䗣J&h]|*{Kb; JE]~{r՘-&'L rtl=RUՑZc~{Pg?h}ӡɫ9K6J9"yC֊2:Uy5Lu$N&fm9 =,T¾#:s/W:F`=/u;2ߛ?7:jgGZ f{ZC9'pܴ2gS TJƎ|N"/9^d9if{~yFrϥe/G3k]7?$a/;9^t|(\XШrѼS)'@U3٭lЩH\'|#CJ;_]oE,?)|N?IM/pRsZHPޚC2+"ehA+aH^Ee^|Rخ VN鹮% =~?c4]Mh 0B@J4;^75?zFۡJƗv"'8xG%NFAB!q|oƅŵ=3Sl.DlAosK:XkiffQN E_A^(r\ZFIBNQ%AAb|-r~̑h˵cv=-ol=[!ZƟK"Un>/ Oc |\IE~'"11& Ŝlf{{53Iy4g(Pg E ss{ v ݇5D>5,J APykv#a3'ngcV:ʽũc}?1D ?y b0 ]{$Āh[Umw o. yY47t)a0AɈ3]Gy5 %|?oQ7ޅE(J˃xHAW[3߿h@H-zY7M:\>>j); gT'pW_jv{:ry{4L69 |ZXiIR7Mm<6 ejvS$MC!i[0:z:>k&>l fWlDԆE*8b7g| %H4<yk62EЖh%IfB*f9ҳh̫[m=۽?Wrp],>6E{vz~?Pxueme'=Fu j @. -~ <.Is@>/iY|40j1kuvS-QMc:@.O&ϋڿ-@bvk?9rB#t?Q :a P3R#$,5Ǩ]E# Mn}>8TTg[{:'L4^9gR\A(P4%A]k  _u]:Πzj#4~.m '7p'L:xW=<\}uP\[lY\<-ޮjWV3iۿK8PnްI9f|$3!a_/t.,ٷ^~zix}Fi~]_ϱ9Jx"!l4f^g|ᄉq 6N ۦ,^@60 7+=2l$χ_s+ EBRl)_Ѱ?g.AX&Nn({ Fcw85dw~l1|̽ sl28ql'gDnKew9[9Vt<ۘ8Cm\zUw\TFeΑ~ @1loXpet}pPKW>6>R)0;p"ߧM4Le^Nzi1_n3sawAݕ>R6\LnP4YC׀b@xfnmmIzH;QڸFˣ8:0Olk^ 5}¦BO;xSV./TQ*ԇ 2+cyxO`P b59NԯMCK?È\(f{Gsv{[gL/WBf0۟Ҟ>X#/TWwKSkIvxVp;o1y {=pxNuGV}=ǣtNa~ sedaжwc2tkvX(:*f zi~]q< v%|(;B+[~vփ]g% .KcN{-]Fku=q=3ʂtHךnEfzxGYAp--o{:2ȖB$|ϧK-NZF.V|[>_2Wˉr9x .u\qevwYTjCpnnneELҮ5ϵ3M5%fuUMd?*=h#߀wvNJ6 gPGh,Y]멐d#"8}mtԎeB׶_G̘ߔcuDABM^u͢?/7w_6`*d}3<ȝN:Υh쵤sAWgEkYݺldKU@zTNbPiL>K[hjQ/_π9K%5 FR6n!ޖ#ts]| =^+jpj\OʕJBQJ}Tk^:<kXȨ*kh]~+W… GK'Qh捴i  Iߟ{I}/[vWX[ni2_ txh/Q(]l3>ESDcuu`[sG'*?-) Td\%lJ*a~c#_iʇ)p[I6zK(.xvݰ#Onh楛nsT7؞Ǻ6pgTyfSåNrFbrʚȷvf(n$+Wy ]V|ҩl$M<6\uoVwqv틛QkK}4tqS_Wo:qFU}- )Pܯ6x̣[zn$QOIJ{hWl'P3NnzlX-C? _?+,&,Oֿۆ6\tjϩ8P>D:/t",u/*ID.zM[,,,aA/tB\X 2] (ݵcݼ6-ڥ*U_qIr}~V[6ouJ^U(,0vs1f*r1[NscK8]hѯdH  mZb}2Yzikr#jY gs|L:_l62y}]` 0m%N,>@ kxvhεT:9k/ŝYGJ!=-~l3Oq $Dngݭnɏ./hEZP%ׂU_xWަvu|Yh{|~ Pp?; / i=8@ ] `† ]ke&ߵps| sC PSA,fI#n-=Yܒ=f9Lbg1yl[H@ЁrD~q<k m5*],ʛڞbߢ ߠmX%TaQKXg~ŇyZsGa ܩ襮 ??Cv)G)ȼlR"Dl5Olt%t<6oB`|m7KEA?a~k.̅-Z-/mmϡ[|BM>Bo2AN|&PtM\7@/KG$Ť.Uc|xln/;Gs;mo٦iR;~ 2t q ( {tq ' # irC}̄Y\oe>a,O8GV  ]kccl!OWKrVq>J3G;N20>99<ԓ7"Q=5zvV+pJGgY{ϟrNř[Touܬ,?lTqv&Oƻ[@=E PЅ7k{ti32 I)Oa]u ymWak8ʾ]XpF5_Qڔ}⤀]qr sXy~Qz߇3[8 H#)r=SkΧ}.o7Ts7hˮ'8eRR6)pg}zы #P6 RTMYvoCW7+!Hw4͟ ! 'iv8p5bojgہ `[uTSyh<\?8{ Z~ @X\oo&%( t%S#kc>#Η{;JV DgϨe.= W)M0.S .XNoI- g'~_.]X }[@`M^gR =*G(}L2bv=kOZ?lCb Rj5se{rU8~ Y'bp7Ȗ>2` xtpe6 da?gGz%˳*M&JdRo=бͲM݋}uϻ,Ğ{;8u憄DX` P BE7)/KS& 6-IloŹi\äQ>m^7:lkOЖu†h57I" ~ů`gB`L`g(`dOu_^S3$j>KHmyVZQk\ʌrjT1T#8<&xMI?hLx-Sp4`'Wԫ,({]vaX-8NȼGF}IJO<ۆxE:9Y<=۵դb}0#kgYWZh^%zN o}[a>%n.F EP}L.ٻ73Eq·JGx֍JzN*:wa1hcfdm4:/mC=LH2$D$ۛamSa*p?v<+:}/pώe%݌u>v85^iǑv 31VjuF*Q&b]9=`tzèG{8@ZA+}!OZk*o+~aw>(}K6c127v Ԓt(<6Sad]ӷTvIEXDWrTFςxiU^Kz3ΰƶ}ikS{kқIj/\)z0vAeeQ|)˨N$ĵUA @MݹyBdוprk;/t0 c zSM/UnM&h]|%T!-z64"j/uP$]_J)eY(esuNh;دH/vjqDtQҟMZ-݁]L P1_~PmXj#`Z-I5Q}$R8B0VEr5y}-"w*}NyO. "@#[\ ›@0ڙ=|ܴ'H&|4$L "׸;G)8y#bf0<#h6(kW)̽\&j(blb-}DzyvL9Cq4GSI-w]0/<@#e P"z~$") Rӫ6>)" 2HߗA yQH~N|vM>Kj߁<x~7H Eڮq45x:Сk?Ji \%fбfg(Q &oPp |ܻаmޑ0fޫ 0KiyNueXX[:@+1H_^ALNP9NR@r2<\=J^ڼ[ m?`Q"Pڙ@G,y؋5[s3g>4tp5\O_ dW 9` FAw]=J֬{}h+JFfo-3E)ezp)X]Wi"6lDVGG;,ʫ@$_mqیG?: s蝃~q,Nw鷀^)y#jN2y1@d=%0c*>&~LÊ;*l$U^D֛?}|=`[-VGvӡ gWZGNx.&[/e{ y2433=fgھL%=~tXduss{ŌKsdrfx_lR ֹނEIlqLoZ,u.Inȿ {)2{}vj;p9ۅ}ԉ'ȫ}k0KZor 风0GNqG0no+[w/h(3]v|jutQ8#YqXv|-qi4a #:  7k[n=`'Q3tՇc0;]qKThyT;3 Cʛ|t¤L`F&E}J8{Wu&5*eb|Xa^/(htz~>eUӭ>tR=)SJ B iqnHʌ845Sv'yDFJʋ`7o҂ j[j =Cբ8|V(]eRTdgws-4^稜ҰymepVOm$oqu-{4]h&L91LO-i>øt(2|Vk5u KGXHmgl:u>AC|Z9_JLGs4#Iq:X~iV7u(t8::̣:v-t󞂈S',tZmK+0:쬋Wx˖V8ݱ<2~z+,dWⱋN?9̲}.z'պ܉3-?1?J~5_.i׳ l*{7HE~𙬤9Z7rbn4 Jn{;u@l-GԻSRSAcomWM@b篬EgR,0μR{K~kUV6=t6ݏ[Tz-gUc۳M=|j?صɹs?h =F3\,NTgzfb|->zYkj.n4:oVY/hYJpK~vzH ?Xӛ~:4de jqN+&OD3fQ֙ m [mljffO>~ B(z8 =vO&t<ㅻٝe3Ȳޮfw`ŅY=v:fPY8룍w&KV\Y߬M^[ȆF*&+gA~_@(/nC8 eh2)5ͱ(\5[ d\׍eq֭ ˥tPw?Ș_Eƪf/hhhiOew_O}V?1{-`Zi +^G7 _lt~Ѝ|9ZmAv{nh2dEF^}"C?1Ƴmzrue8aȨuV Wv[+immET_k죾$wkVӘLjlAgzϕ-t2i]?^}:[ H/f~hখVZNaNX]zK{IY2 ko'jF?2VףyH4ŏD[=SY46ݚ9rͮyCھ8ttRe3MѺWCnM5=Y*/%[h)-vLNBi]\?O'h XJJk"ʹAJovިJkOa2zՂ-zrgbDAuSg_qG˱,ky^_$E3w a ,s T&HHIDWoq%nanQ9׸ nn$Hn×~l.Z !jxJU ˞g fw{aπ?TR~֚Vt'CtkLxԩ~+&x8ߕ}1\,C}g]ڍ:l-dnM]:{dkº*s etz@4C}{ o3$c ݷI)H_ kǹ\٘d?ї`Ę@M7d\\ddU z~&MAfX؃ތ} ÖwAT>tA%/@:_R)һ. 1a0IT)!cz0s 9X K^P# P(m9ܔ#,\#dl8fd.2\}}`H5 Nůc d&9!;]7id yPSCըP}~mJytT+E3=l@^rH*.Af߮@Z ]qm8S/S~MQ,&ĴpY6C4K(:v?y`0ft Z|D'rQWJ4.%a z{lNp窏>)YGu? =~aViMw6 ';C_M~@$m+"@mo䒇pX|{r\z,Kyr/G_k);.]|Bsw+Z(P[ H>y4=!?"s %XC{J2m3i>f튺 +'ꥺn"o9di ^4·= 4ٜ.VQ)u4I(4(㖏Gr48o6)gq׸5}9)grvF"kt9.kYL p&=AEXj|qk@ :@4*ϜБg+>F.]˟[+:/5v/EgY=u:z*Fd{q\'EZ۵v1_L̬=i@g8$r<c~DcIiO;>Fw}P6Rb{ʡ*d@]-q|^Yo07_qj7:̤InO -sUa]*GPAg؁("v؀bGwk;\œ1ˊiZ~hi.}|ZK$5;H 粼mcFUNY sYCOFC]\Bc }8ko Ybbi*#X"OrǪ1.˰<ǣa뛁ߺ'K wмi%w'lk3AY2Qҧ_iZQUAvvAn߃|<'=*^];ƨw-F{Ďokew n9QNGGbvb*|db"0!v'b`ؽ}JPU<7Дg(U&iN%BY&/llUuD̥}ߤ{ ]ҥNN\ĞmPM&5&nQȢd O=::ɦns/s~^=dIer;z1z!|Wô>ƃ{DnۦۇD]0gZsoZs bļrblKDzhI]OUM3qQk  hϏe$':z<:9{azFaMr!y_ɾνAvMm&0VM/c嶆Lٚ z$o1$W:&y){ !x;b{2fT bFi7YTuMrmOkSj5Iة!ǥ~<Q9 knigin>/*"~Vq98 "/#]ebkީv_ާo=\lI0rV/ xme3嘚Qh<'z﹚Mͮ"U7%S19q`K;(A Hޱ_t$84\}1>=hD}QփYv7}q V<Y8N68G)^Q0^ty-Λϕ͉<{韌ϻwuR^ {׾G.Da`/[@Рn] 4Mf lk9yӷEq'EXz?BN79Ic1޾4a :)rϜтm}ba+a{IKbûl Eob}ЬX̴Ֆ֊@W$%_R%[0{V9w eμkbӒ|ZoxQ~F§vi& SyC'%6Ճ|sl&Kmui^&S*?_=Ƶ"Fj^U ͗ UKkb;@ 'Kg/ `Z9;VX/m? gD1֩0mզWP[ʋlty}+S˗>m(ʼnr|8]x\\a8&FIcZ^̵}53;Qx>;5 phb5SB-[!6 S.z-BNB Z2 \O@{?3ATQe(kG3cN3 ө.L'w_ bgW>{Ԯ/+|-ȍu:+3<,:ʬ 4mV_rKg0 {>'U;TNU+tۏzVoԌ,ʧbI ljyk򥉟;??/=r]z縗rf7a*m%-zm؃ir<*ۭ-d4R ܰK24QTy ԁ iSCTwŹxfFu̙տo22G?ذwdkRBe98rQܹ^:2IMW^f>Ih m19K*ը{M5-KmkuT*.Fgglu@zM_yvKO?+ qM4/_K-2cq f^i^.t q<",o @-!/Lo7VjP XfMBFU,@™4}4C @>XBauzo[n wUk2+!VSi`BLJS= ,(s{6 `K`XMa?:f8xxd'Rɀ '_] x66yDCܫ#q:G0 < k{7.:t3w\ {X}}ۂqhWtԡ7)M/nzmxfďIucOem=s>ճ_hqϣz=`M7M5zI*}OH@|EQcypD–ļּw=gxm~kf峱3~{(r :WK|/' ]H?3:uahz:  6Bt#"+OJaQ_ypѭ י\.K;Aq=ZjЪo3#v)-hOk;7okuH Z"I]yS8;C- vNV.+B1 ]"-LF*l3?iE  {H&>ȥ+Ąx fa:oӲ(Ƭ]֯鞷RxHDq!R:5a;;\#y[u{'G?-': ?lu,8CRvfkl0VW]:H}&z>*H4H4 DM\du0:#n1>PXgTۻRsoTm}Yze1z./4_h~3oN?^s!m_D:H/l ߬h5^Alqy?o_AOŶ.iv]y;/f0 9w7_ɓUfjz$l&NmS l:L_CۉPڮ._^ H?2joN/7W9G%F{4ofZ}!Cv3T}Z[Urʤчb<.]MQ=3>2fhϙɕ_xC+@B Oԡ]ח4)=5-q5ϳqOvι㋲ s[w&v7M{^-a$5he3m|. ЇuE(Yݙ@W^>80ANt7mCvH7k0Tn)l/5cw1ŏ-k@ onޔt搗i oo3_KknSOI_ÍyкN!CU6-:FK 35,q{0:鬡#R?=pA>1d9XIpE6U?c_XJE3ԍJr @]ƥmx(J,WA~0+ۀtJ?[QT.TWS2sG"F3~(=cEbctEw<Ջ3̴wQ /4A3״AfnSnpbXuJ-2gբ:o 8=~,!%U̥rboibŧvs{ cO:+|rĆx!}.^=ڦ^[ [u Ȗnw.njvI0Z/j,זCD>Kmsٷmӝ]u_;.1c3͋Њ52捋Q _X4Qs=1P39"T> Ժ(zq8ubG-Ζ?e#Ducg psOl^ [ ljO\ϑǧsҚF S$£ň͌H>[NttY]9m*}[l[MZZMiɬu{qNhppc˃@8N#NYUtt8]̎qf3jho2 'PB2˰7mTJ6TS|<[-VP1H6Oqm9(ζMզLa?olbs!!wL{/3RX{:KE5x-}o1Jyu霆Tq*[͵tĨMb2=>g8>:FcZ6-ӫi#OXl¹ع]Xd0Z|pKZ[i޽X͗Y-9hmVy"yӜSom-}-i\ӧU%qQ9RW(M@pMfZG'~_ ׷ ]69Rrn:DƕĽrn4MIv3nD%Q̛o2ּFfƝ<GХuX*q[I"2Q~ΗjwV_Snv|:VՉ /lJ].ǫ/|5  6TrF2{)ds2MI@qhh55^Lus&g%W]hVP,3o>"TpRE-sEnͽV`;EcX2hfZ$dUMK,js(L+C*Y8ʅ8TbR fBF-!0,juIUR.g[:8fQ0u)DY,F;'!~#Z:F*:Z"}Oj)p\hr([\0bP5T =RJ9ObDaJegqXNy3C]<$VKYt*()6G6Bk\(-TmVa=yv {ɸs}ϓO;&sI>Va0^[tYB<5|s1(έLE4/MB '>.(a ] P턅Z@o zH{vH땿m;Aq5 LV8A $o2%?Ҙ.eiJpw- 5P]XU,BqU*4l[@e 3D` $BpW,|AX7?lMfgXZ=St $PfLsW5mM0̓gCj/a4Ke"mpG v+= q[%*z}ʴ-47S/fY\`'ҵf k ӹ%.` 0  a {)OxD \*VW0JzhGo^cn{i‡BO (_*Q(6 C Q1Tx良$u6m;z 9,^q \ٹW;w~׸хGY?A˫)A 6kDe'!ۖ 8d*<8(}ۍv7ڒdޯ]f7͸kgځY^{y}ϙtg{_c1z VgtND>5{8^Z p@a eҎ4H>H^^Ԙ=jxcjgީٔOJiZSLy `м :a[xG9o{V na?U=<nKthxy}v L [߯A&GM^WսqGm.t<ʕ$2c7S "BퟖFYu45Y~5O}yfҋcod< ٬;|n G_Nu ~ + m߼Co<&ˆ&n<=\ǯMS@d+bStK)i />5NrW݃-5;iJSmr4}dzFUB,H{o 8GsIFzȅ`Sc>4^, EǓqc>=\T9kF0~MZӅy4Kߜ,QR7y``Ϛ,Hhy˽f(>@^VXvx$蕹olna1[ Q/ydȆnH{ζlMӱ9+N=>C|Fz;`{SZTGi[1C4\STfcmV-;ٸ)OX_yg ^,faC|M w!ժ~1Q>5֗:EwkOgz)/GǠ1uTѺf@Oyx_~zu Jɾr6D#N{2-]hv^r"83֮FN ov3G JgCU͑6!󡝍?5/ېnw}1KRޠ @Z9kg~DF;Ȉ Hηcc-3q/}ܜ$@W!Kaݗʽ ЇPfJTBK~`}a}ZO+ЅXgݙ }`G1MqiU[ ξix5WE!\]v * 1Wz,¦/cs/*\9m}MG?_:ܱ7g$.`pb͈*CWr/e)l? R)z͒oݰY]<܁NeE>gCIw(>~ЋL<$9 /%]f{p/nʙ6u?$2 S~R]3Xiݗ*yFTٹp䯼p2՞]a6,pX2>=Kk'_55bX/?`utaXkLNdl+<ɐT`Yَr>bKKZ)~&XeũQڹ, DD1D?¿y$.r婗x:gYYĵ(M5AԌp䁩 5RcXM:§Glg1]/`LJ=^3xǣjx,tFy~itXi!~9;,_8 }~ŭ摍>tFfHЕ8;6TAJ%`/국k);F4ZU:woP-JkK;g eƢ ?D4-q`}ɯ7ޏ\%IaGdҙTmq~"ƹnJ^a&k^ϒF qr? w+1zo4:HLx)lyoJ9( |2"Upays 0Sё盃G$6r[(!l""l /hӗuuwOq-L)ܱ,S0&F-~\<.It*ttmB,^m.Y)79]17 3:߬27jP+ fq+v۾Z2"q8@1eN+$ZMޑ&o'&o?{KޭJ 1A =XD y5+yKMO?,R鷿h/GXO_ Pݽo"osP|f~=(|(`+/yB~@Dx>K1 nR>uMI [ DK.m{b$z_S˿(=(1r@ 1%H >+571$T!vc#d8=L28d&g$!VMII =%q@y>:?C7˺Hejr5v;T6.ap"ıNNuK˹"A»T"ᕞgΉǞYE׾ݏV;=_VX5O9vj]!- sPhJUZU!>n"(*! >LCy >Jb]mՇ8)=nʞ τ˿x@. bCAn ीx +`~wξ6c/Ezh>\nr?-k޽J0ImVjtϕG`ҽ j_`䫑Dc\("ouTiYdb8xn4c&WC+U0 6kyg3ڞSzj XQ,6v"mS7 ػ ؆X( j, f߷crL>Ƙ`7yُ)V=m|y0{(v&;)*_C?V/Ov1/_ةVT1F7\VUk]Vfz 2wm :Qy'{vm7.NzhVҝV3~䎷e7OWJBcz/D^fxktbV6zr1wE v.f+mS( >k2z#W&Xƾ//d2ռ3u-{}Ļ MU۩b\Ӟ>L6@\Ic_ixg;8'dzք<˵|#qvF]קڬLiuX:}U|9bYi\T-=g:R{G;ƨM+-iI-n喞,q|MyBV:a{\U?إgEԝ`!:\^֨lwK!*IswF9[S=MGglGtl}mm׵XӵqǫӄBc۔/%(]slNC -ϭԕZawZ` |3rzʁs}S/O 0pmx /XCFx{)MǹAEɌ[s]Ԩl,kڥnU~ >}:a|{>r x]2)&eYPd j=]Vkۛ~b :FRRلJYQ9Chx^ՕFCߢ>xnTʓqM۔μNokH``}>6N+Fx3Ua%lסǁT-{p2t)tkd8tzI~k 2lpΠ%n,hoԎNRQZŨ ^WUgwmجLJz5E7B@Lnnyz 8s ĎܧctR)9x}!Tt3 a%lrfwLծ}QHʙR84H9HQ׽(w9Bެ/{zIpp,']feVϐv/M?$s4PF qƒ⧴EF9)xYT{0>XAP:?tdU Ri.!]ͱf ۳yfp֯9zE C>ʨvkpM3=`g(}s zUG/` {4r.f'Uڇc+1~ЌgC&i]vkάﺽoؔަ7nYC+5d\;ڝm1T3i&dq-Cpχx",_a ʰXNu%{.SR~u0:ڪoKCNѲwF/#7IAöPd++KQ7gGۢWvbC;m|u .nNy3,v\ћ6DҒ*?)uQŶ#WCDcu6[u>͢s onв7ek%H>CY  #蜸炽QVǙQ/0ToR* wU2;~}5}'jňzo?Ն4V7&SrT?ME_صstQYd?ulЛBh(ýKyS̍Ԙ=Ѝp갈TEys5S U2tSAU^l|o2 Ӥ_'Tª# 7XiR ehP"B첔b앢#3k,bsZ}]uzyǕ7G96WPmC˫KnAfm)1R})0! Q,DIQ&mE "* " +* 9}8hiIuΖ.3Sx "qd='3h7vk ܸԪ毲HgR_y'V\hQxE4_*=W|6] { zm' [w #L.~߅Ò!ōک?mK:ZEoYQ=w[կׇ][r Kߟ+|U0rMxllym,m0r2PΘhms0E%E:U/1ʏӞaHcP>qLjxTb.;k@lTvQ1o)X>)@l#ME1{޼+,3N]W25·jQch@/`A]b4@ !tN1hES_j9򃨁壨 g&Z6f()4ܯ-Р% ;@N;tu߆]Q=bf ֎ xDc!ax9bǢDuN6jWu^xBɣ-伖ۮQ<<EhМ|WfwcG տm)C;,xnO[qھZq㴬bSCqZ+t`ⴛ2бv(DvX5ưN.Auri_1Gs/`$4v#@% 7 Tx}l!15V~h{5lo2}⍚^s9>*l$ NMwjXiݨA\7`PK7 ƥ$pìQ;-1G3#ڥӧN?_A<[xtǟ=*j)$Joyp'[k9lQ?*vlqDW]E# v+"7\I21K2>pvacj18)0>nh\2y9طg. '#bu 0ݧZg 7{T\kwx`HH29 #$7(SI'.l췇bwX.ߜE=~@p=?騶_Sޞ&ޖNdYwd+ͼ/;K)9KrZt:0_9̎IހD@7b 2_W~7~Z1̕ŷԽCnX<u Vmmޮmou1AzaƧle9y/r짝5 v)$s $; By]͗ ]jb,͋.DӤ%ؐB_cr>o<ג$-#S֟c[CξQq`wnz;ТT>_˽9>< %l-9ĺck/%sJk.\AcZTݴ--!d$.}^j5e '-t>*ŎE0he13 zJ$_"p~f$Kspv{>;9.ؘKV &M:Uw^T(GI3GN]A{eəq{Ҽ}<ư@ut5ե##W߻}\Mj/].G%CѝǨ:m/kzVaL kz#^ttxQ$d~I}n;SFSr\Z=LBTa{.Q\d7ɸ'qiƚ"fN`gv+n$yaOɸhT{4R^lA+'|\nBQ'N%Bwz:7yiI-GƯ'8RRTaQ2@e왢JiLQכZtTʥ? ⵸^gp@}iV^|4UvP*;&3qu4G 2=@Rx"Nh҅O(1mpU v잇9ګ92% JDmEzó1s\߭uWKCߒf.ˆ7Kb̆ĹrsfWpwv l;{ٲFjMjD'}~rR#-;gН:9ڵltޘ@$,ޡov̭qA ֥8Reץ* :tו/΋w>g+_\,F]=9zA:Z>Ort]m֖ryRHb:ԝFj.>=rQЊ|iܞ~{*])Ç£ z_ٴ7~f`[plBUJuE<".Iq#tګSy#P>߰|.ȼqDfyBWss̭&v.cm9aM:|dsz/lE7EXd(ЕNK?)oTw󃔮ù0olɗ1lWm{#iݦ}lf%wY;v#>nRkV*O'ð-NV0"속>d6GdaSl "D"^` "b ݆n 4ȿ>!w_P<7b @Is!㙕|y(NC [if/M 6jLm#w- bAZ x꿹KyOq u|@>d}HS-$QxgH4pOOڠBph1]<`|Š? eq:@5&9Klj=1C]{qilTM8N P!XldLiı WpKWL Q<tHO(}f31sޖ P'> ^aS^qr@^'oa8Ls,`SD;|PƀDz9 񞼽䵧^ )~q=-8~6\g}q#T|N'}Ɵ<\Ii}^4Q;uBpv(_ҹ=}~,0~uNs"1`ॸ{on2q_tzi;?X7j[D(z{MϫT"a5 > fS9ֈe'A㇒^4x̻!Nc{5K;3wHxZM GUf.4c.<_ox줛WZT# ] hbF-.,UTov>>>_|-PzH`;%^~pϠK|R{*n{X9|yzXżl^8$[D }uMQVi+z{ssp{uYP~lg{쾭Iw6Odr]s]IF_c@{ɝm<-.<ɺ?6} p|zzP(~yq,Sٞ.fBg6&n`/@co&d3bm1Ȝ$RF*q9< 1n!}RVMys׫M39cvWC4mؼe`nWa]7MU/˗@C;:}&َqx]ō.| ;NJ)z;p4J3Q&ANwvm lQ~e{Ėo++jYyu$05UUm˗Rǿ9$٬Epl2z9ͮ1鱫lx@ ?'V'G'R +Mł,=czSq+vWuҔMU |Rd7'pANUq^ͣ.)vwq9!ɼ GMZ*VǞd칏rK#YbmV;;3s.װ"Y:W~ԖBUM@GVDX l a0g+H>0\$tTx5xuU P {`_ &y[>d-{#|N*E̺?ZVG~ԗwFȬ,RcZd"dd?7gۖv$-::FWm$*,a5&͋wKT$6ӏ opspe_vќ->3u?}* ]{[@o.g_ݗ"n־Une~WmxRR椻\WUY9}g :rs6EE3A:kŹ!Z]PwOeޗX=_6?w!3yO[y!o/WDYj(Kx)p9Wìv2[eZlZ%'Bk# !e25DbPO&>+o.5R$oˆضcj魹5HY *T wSY~HƌogyT,x񑙍Pgd*io(.?馥<8-YV`Z[a}+b*ס:9oPitb'fg;3gy՞v\ sdCGonn˜%2W⼽ExlփR J`=+ yZ?`K߇GF&Nyf7Ԃn ITPr359)RCc$KWg\n3 8*\q~ }ϋC7™'`5#j+ o^LI,9xsiwvOfUY6&aQ)Zy8?U: ?^ x2+,\W!Gɻ2(\oGڙBs?dNayP#6j(ćC?H31>2z:=잮+_bj:Pc97wLZu]I~Hl:$wMVS9OcRMN*=YzF71R ^,=돻ãt䤃*AAKA3]>.ɒj^1a"57@}}5l7SS_wL4# YT'0q `{úYw03l(c.*oARjs27}߇GUI5DK-nN^vTg9ᇬ&bђ`\~0}8{`=ms{05uRRjz*rmd񬇞Atk̪'Ҩl gش^saf8,^L+V}!G?zꢗ;V|*´Yy:_;F֠v?7oZSFM5(wVkT\R\x3mʶP!mӬҦ @{P9?31; 8pqxGPغpȹg"i]p:>v;O-7Y)HZ`򹭎 T>rqeʥۗf#[qTNU0?Xg^ĦČ\ 2ǻrO{2k\:-LןhHKZ|+UWjh6ky91SxRX2E.+Ui47'g}8g.>əwE;x{-gcŰ8!GR״҇7Үq=rGR}a.vAݵsGiOPxܠB932 52}71ٓYeV(+FAV_?@JM|Gy'ڸ؝BVC*w-6̦)~~_3t3u}Ze wG ¢ WS-wYPyWS*=MM{ y)a^*##Czw9gp";V .x ƒJ=kE a@ B[+1?+)[yVSulbC%)x"edp'"ʃDd;Vbyc- bB!" ] пڮU%XwDĆk haR^UV.`GBwWn;/Vgmh[wvN 6pUCcǟbɎ 8`};G@7qiOPrp1ݥok 0s~w+#eY?A#׍WqBW41w"dj  ]|w+ 8AxU Sl1qѺly2~o_qZq0qTKk )8w6@%Qs>y0<^(el4lO^V&sc#>}\\MʯѰ=>fXX(l&u2H`Ҵ@\oKDeS6AmD}G`n2w,MZl2#OXGjjخLPL'-zC3|1gJǓC: ݣE_"}ia0׃Zn>X[ca)Zk$p -`DktHNTF-EPt== [ywo-Zcj %qd8{`ܙEqGo8^—OrvùXzUv1;+ %XO%j|NeIm-?YG"i5 lk ojXLhs?QѩD.EuLG"P }_/$Ў~]OCJn\Q+x9A̐?,i2͝-zĆ>-#`h(›(R١iݫ !RΆ ;y) ybSnb~gqS]継1!r^UeLv2dKfΣu{RO)8 q jL0Vp0(iqPWf.ߝ i[G?dtj2BU+~ے}Ndi"뛏.sv}s~(fb{@ee0dn:6B+o;2.?.(.o?/<~}ܗ%eU (YYkçޙ ay7~1fѼ1y2`MfH4Je's8n7!!: ~jN'V[)̰km:M$/Nu~]\էS YMꅹ*.M8.wK9hf0AH6WJ&y+jW§~J2uBqdMAv8=cڅ0֘?ͷmdh`+4gI4# FCyB8t3t/$'@?'{^:]ϐK4FʡN634ZykqHw٦hgɼZ;3vM?xӳ&}[wԮHfQV'WGvMk5]5/mahZR-A dsiV_fV7Z [1l?eY#~Dj?:Γyz?ԮݱggAțnָGp_F6CԵUqΨܫY"VAQ){PfN}rܧ7)Qe@qK \=lmpKʖ Y:u6Î^&лsޢT@십 utƥY'*^xT]O!0F%nOmY?'I~dF.~19VUSGcʉqEmߝPrW<3t wb"k | :rD`,`rĆ Hmts[Xб StC"7 E#[j= T*bRPMK7f/5Er1hZjX* evF̥X9gLmUA_!a%At'!W~s\P֝d-?UtEV,!Y6|M..MM>jd|, Ϳ(?)|_f.7Q#F`C]6jԛ8ԓ3PB獫P/rP^?/p2廘K;D2ҔmbD"$j_f{aEIžovK J3+{jLx1Pw í=/.PP 3A%]P"Nd4(ߡ7;_m]h@@`T\nz=7;OxR)EU i\Vw--CDg'K4!bߣmgIfwmN@y߱uhO?|p_E#DZ%qL v8߄^?2;;$Ѷ" /Ғ?X3?kOO# fp 0 w>x@#{L]`p$6|6&bNV.GQFv{F$,(A1aG@N%9&2+-exoޖo_^^=}G5 N Y-]Y]<u'o伙h)8')oH({[/6~kĄ\( sOQBlc?qwro=x8NfV􍸭usm\3*?ӆi~*XsliAai+Np=#ZO=58Y{ax4 ^1sfrw4^mk&9ؗ yά'?`2 Af*rIqjq*+8?iD lBVhđWO8\O]{pY%r k?yo.;# 2b}eu]wGsG1Yc= r_/qx^w u[R.C=^:v?r|ZO2yé2鎵ٹ(d~Qt%Ty}|jݎc^ ݇L֊9 4z Ե`mE(hG5:kf:SU yy !>G*+T-o%NPNSr'!םu9;Ųzr7na``~էe 'h'q 伅Rٻwn1ztsY3=w{9?V qSLJ+quW|[!b67#/n9J*Ź\͞nUќTunܝ,yrʣ[k~m^ڧ6gFr:S}؀1dsFF?ۃ^J؝U M1L}kUuzWN-{VAy*>ߖ9*mƲWF_(90uG1:.A{y9~:*ͦ[yA zu^U)\/ƶw/maZLJ&!dyNZ$N9\Z?C ?w1CKپQ(6w Spo& {˻VY NfRJⰴd휮D3\4+YB Crq<{J|//#,%|Y ;g˻xP5]CA6A)oFjvӏ켪f/U=7< I#v[F,ɬ+Vs ƶ'Qˍ_F7ZFKg-Ǔ4D74Ʈ ^v1|]Dl}pl8Y06~+ϦF"FͰhZڥ!w Bu2 [jvԓueOE)Cٍ6bZuOb>15JֺefԴ~\ۑsWw2#}zT5͂,oJWԨԈy3,݅z/4Qi.̤@mZ҉^x96|ґQiOUw l\z^TL6WIQ=)^ŵ<; 1@ V ݜ|RB>#O-r_J?KsOTxթ;[g:\<37W/3uO-=q)`Š\~SjRkd R}GUp~BіǗ$H*Vh# ;~ {tޤ} PQ:b [2a2I2 +Xek`^G,4V5gv \Bf-r߻8^M:+j9TZTe QIdIȩO:yeWCZϙC ۗ^:^گmS#|V3n+tNKU+|=]5ܠQoE;c\Q KmZ}(^:g" X>~+EJhxGE1/iY5y}"jŠ-pھMMr\~p(WݐzY4.2;7ng x^8@ey V6;X6/1e%9 Hp AoR[@̲F$ژrޥx؟&)WB}$@.X3.pAu:&4aHtJYN@+@*@8``r=o{_XyğZ,oBYO%a24YW?)(,h7σ\ qrdo*k(:s)c2$;%'JW7;vv-v [},>~Z tܤƽa41P }|ˢԭ>FMهO pUpl8sp!m ix~2~~ ?o|ĀW[hhZ7RTɢ8p'ĶY#h mu7]zSGU%5TJŬh=C+k>Qi~-_ R95.-/G E!;_+N|D恴W}A ynps_2ne/Lf.s2ӭ_\XpϏqRa>A7=})x M7^ۚv7>^W~ 2-p1ggz՚N}T &ZRF5%:xTm[yl~smU;6ᐿ>cBLVƹ m3=N³wLwtag: ^{Q%wۨMk낃5N7ɿ-NԬ[. 5yT`5'anu K n]5Ge?X4V:rnC"{Ø[6=GiP/WsMb{ 25&۬@ N=0lr̫ qf4y/r{K se(Wp̟S{ ^a籊ٗ A@P< ֞o#r64"_Ϫfcfc1~4HFC +tyj6o;slGEBԽYyauz'b d 6僖YNM-۶[=RAʠ97p k^rwsWi,Cv:LfPH{)uU滑vnƏ@amk8j#9i.n?puwkF7 z>~Zn)}';'&fL>Nm銕&(xNL~2˷ox&T;^[Jg=:xu[U3Xt?8A[Sf ǵGt^MozթuTQʀ@ƨ,X4hˮԃչtקVEi_ 9GY / i^H%Kx019x+|U6`&jNVC3]wzzzfUnuMh p.ٌChiL)I|徢Bl"ό,LHn+>aHhѓ\|ɬE%{;-ms#m;vhZ4nۻ=BmSIdӺϰPZi5zĢ +]Q;+WۮxbDgYu4LC"`o`s| Diؠ <.`׏JuֶJSk7I4Ν5rEAiSU :mfO۰]uR{IRb-?Ec(>s*6H]vRHZsw9o\xSbpuS`2K+Je C y|p\o.gvQ+1o&3o0oad&K H1Q ޳eX;q`1pfԟtWQǘ+ZzDx\xji$zA8) Nor]8^ǼN(DrZ56i8LhOix Ev[%4[PuǤ4 PDL%1lfy1G#Ԛ O<~٥Ϥ/2*0陑4cʂ#6.MD7DcA$QoN<v?_N@ק+v@ K}-"x-Q&,[*πSX]Ի3B;Z\u7kes*;{(;Wy{c\_5(O]6cg3v6iՠSY/CIۣ.TGWCKK_q\norNJ+5m\1pHUu [;z ]&~ L8x/x}1ޓWN/8V5c"ՄVEO[&ȸP\GSjx<v+Jɋ̬2NUQDXVP`?!#PrY-`sFAX+-,|6 fdŶAi&9 jk6l'vaB pOCr#n>stream BthZѱ .jhc9Pqg!USK'/YxL~`톘ݴ*%8H#6䡲~e y2@-6&@-M: @ @v0@*h e(][] ,MD]%X6go9k(lG20o趑υ>Q=wxC"@o7Qn`@`yκÀcQ5towx #``!0[y^wMlzSW*CWqȩ[,`VXaqE6iMc߿5;KJ xK߄ ۊ=p͂$(Z_o+p-R.DslbF5:!mVŇ诺ۯn`\t@D bRb88qBn0kWWPL>ݪ }SP\G'U`5JՓ%)#Oy@|B[$g?Ķ0h}KQmT LS%7}W :#_6COFE~9DAٷwv=MVOS-~>.:uo.fm]|br룥kbW/tco0U=Q*M#)SI*fh׾@\^v9|'jrr7J۽vbt٢c6Q;@kbq.[uyo%wEDzDy.'sd/ZYglځ-+t1=fS|15AٙnAf'!ں }4}]De|$QnN>kiI@֬B./C q&xrRoqaԏFvۦ 9mϗ!u9ۢiut $|3"iH10b;r{hٞb&`2!P2~hՙZa~Np|L /'+u=I?{[6͉;]_ɒY ftjA?tWWL&r+l8otN2[q٤:Ru8B2AC_Y;sbm8Mζ3sHg0Nkʠ~Ⱦs(N?p]K3w"'WOh U! lC{>MA__%{, 廽}˾uiI8]үПSGvjT?,ꁜ;voyߚt2p\G!kWѲ~A)˽ށp_Z)'H:HRlɽz]r0ľ;(VwJ'ǝgNZK. {;JjAtB<%5߃y;jkq P>.YԜaOq{ڹ69Sگvyr .9(>AHenH{l^ V XzZΒ݊Q]kt AwYuoklj+3}kͰB:'YtZop3nŅ]hk['jv:Y :?p'vL rafm/#4׍nyuDu$Lؓe2.['Vl5iiTjɕ,3dz|p/\8zl|qq/}I׸神*Vr6wQn6k.uV~:6<&sF Y9:v{Z@;?ՙ' QWvR^wS^y~KGƕnnc3Ol5Stض2de./ϳYfsO1,FUzsմ3e\ZD*ϱ2ZU Q%0^B 9uvb_-~Qo+Sz OnZPǻ7X Q`z[%=H䦝;ۏFݏp=/e9Jquq"4_PZ2l*rXt*6CzrIb-W&ч`}QӫO4gܱVH,[OFgDcL<9ST>TTT/qFyT$3]qrÅ>B3Uw[]g]9:}! k9Ys1зOPn1g[uN^nmgՎ{E oYG$XZXjY*n\Rta93:*7Cr$QlrZdp=ӏ\O\nXM*,J1mG5<+`ٹD}r@Qc(4PTɳ;d--d ?X?ayR4;;*tA谪3b0L4"OLTLzbL_,NM+WVЙLߛ&Vn4`=˒PUWKML.>uAλS1(QʥLʟ7{ <¼ƖbDO @ 3-כ1 Б/4Th5 Z(F+?pF@OVkZVmH~fu>jYņd b4381n8zg>iȣ)NǹӰ^q(cUn& &!eSeq$rOi?sOr4j|Wk:yۺz ,(|xT+Q <-4OYMhH˫+;YFs|iR 2[ZNX8y p]ē$ˑp-pлj(]:ԟmLU)REc4n (6bm`0|\e=u~Ek-,в; NB^s%[ sSCϰlBBYZ}mnW+h8f 4H{.}n3AO(R3 Fe*l94YeXzTA*<*Ye=v3F(2!mQP*1p$HVf !ę=?'>b3b"g7 o s-YQ|6ŧKmܼnT)kW'@^j'P.d0~yJ@=@)9C(rdoht(#V:p^Xwl?>GO 8е:МMg=~ˀ*@6Cז7r g`ޯ-K[퉈 0Ry 0]%TJ>JV=W :nIҢg:* Dn5֓:}Ck\w}i,A l;|Ngki7G[p(-_l p{cN><0ywx Z,|2nIЂ)ȑFo=9AWݿ?fm:uo;]o Å  'uwŊ%d e h5{ ׅ%eJqcG+?m6^o{M+Fo@않xS_G > CȾ O H4Ȱ饩t? ,/墚t&Aնoֿ rc:WU9A7O |uHRѯj#ojґa&GcZzOmGYe2{h_? ޜGDιzr¯`:\kU_3N4 _K#pxNcVڪr/͹=W.Gm]ɻqNݬ'nvA%x=V_"SFB>20xN}Q%5ͯAq}!㙞!pIcTrS^E/iCyc.Ç+z-}\,".ٸ ߋBY(Q;aV=FE9M[ЅMm$dn"Wx} A~ε7A&k=ln{ZSԯȕ?{^*i?~`s_s-Hoj+n?ET;Ʉ+pϾ}'vp3鴶v{6 `tJ#`HНg.5bˡ ??H_qZF][+}!{)K9iu;DKnO[͑A4+ thjn 2ѽr#ZTg赇' fjt/_xH6 |XA?vw=,Z\'kv|Eѐ?9,}ok KTvgf9]#Ll2z@MKPc`.A~}~aaul(7;Wr(] UutZPl/|<ӫF;گ4%m D ?l BPp'Aŋ?pb^k1+TN%G?H[9cc.n,&#ÕwQ}v/:ѩ$~z7=]*/\V$-Yʓe)!ѓf{) sfX%!3v)L`ĪfUIl;,O.wmnϣ+ˎ[GZ&*@Ꮤ,ѢTBt()FT?Ɣoz+ Yu[me&YӞrB j0M.  ϫSSyBeٴn}_VȥA~ n7Y(N荝; ;ٝ;;Q ϲ`]!6W<&x^ dF~qaPKS>hle[ԋ.۞δV~,nhZ}ң:}:HAu#Ƒ?O lm*<-sS"4{ʴ~pVÌ2n, 0WWbq&-E8jaj&i-wvZ|((F0B!`jt"Xf׻]bZQow]\3PI{^_. jܧT#Ub*}L']?LMCQR^sjJnOԋ*,}(br.}e6,: $| 5g=nESs҃=0kWC 6rNXGޫxzFK^.:@iRYUś.6T)*nv!_@:}E|oE': o]E9B>D4@m+[T>JIݪ.9wN+H`W0v&L@ŃapC &E[J%ØǗ l]d3(N+'H<Vo"ai"0*?M6X2p<mc;S|ZWH|_]^!}zeG)O2T`OMʀG%.A` `IaXd6t疪ڵ}}%EQE1sֻ\*CKc2@z|P(|51フUh`Q?{JR^l*"ߺñSE*3){:S@==S (ZX~<`G#ǪfO }QPL>񯗚=k˔dC^a-mCxO>o~6@ ,`Xakˀmo[kq 'xL5WR]BZN= };UJ+F2bvC Z<h͗?zt$׸SWD͚:"h y x1|u|&Xh7= w?) .[gg:'c1n,;QU "cWJ $_*R7 8VB+ahF@d 'a̋@< a;HB$޽Iu GjU px? jq|gYnk 1_Nnh}[ѓ дHk@*ڿNWi+o\>\(@aPԓ7JJ%p@U>ae\QaV[CJ*j=ʑO,u7 o;6 rpIߝ+nG&U"Fig7L%kha'W_n7񋳿q?JxY<,*NPZ%}d}7t%n;'7%YGM` >QBeگW[4&?ad.XPVY[&+/K^^ٜkrOC|b&|x*v|O; u+jN5Z;UBFۯ#R2sr{Cj3KLϵ;9U85OnnVX.79){xfd[63!{]Wj+j|>.N9aR>{L=ϓ36$4 ;S d5byR1y|TIAlf#6X}^<6}owߙ~Kxb=x16.~񙀎FE>Óԇ{K ŵS}x<ۇ3R΄W9Ś>-i~`W^庙9?Ǯs@1=u>]W8Jщ;];ֶ{\ V:̆VRJw|/3اk2 0,7JdžTc6J|*T| QAuwL[Ze74rcOFzo(:Ti5ks5.{jE*We)4RgZ0K5g@c69]j6$aƁNfpV\]qӅS:tt18 -u&#OAhƯGEiBqUY!r7W['J2un^ b-Œ^3)I[PC޷Ļ(J*IMEw-UtGxk=qUPYPVmXiz(q*VđM՟Mv2&XƮTI9gzf14B/ߘԢ{ׇ:-93oT8w՜e$XE23g^*C19 A]G.vgg p+gYΈ":Z!~!߫yV ƈH&k s#Rd R6) v ]#CL ruhTTf6*EEJ?ء_[zIz eɺ͚-C'zK^Q:T`/QmY%o?%L,DXGUqOO<=xzVqMd\]S(f4t3zԓ򃬊\Y vr AAIWMmU5t{e잦o59gI]6Qs6hNP^ȍHxSHx$DVl,pZ KGDL3Ӄ&1O NYIGo%srFh;9dZ"j >P3߻*}$Eݕ&#AxJ.]]/iLhӒ3ejn>fJ|@^@`^dYfYX. izheZnI3R')xƚC=%og|bjup@T1fa~Tj5i@m2Rԁq ۀ:'NxTzq' ΀'0u*Lݡѓw0Gz X,*c :`^`hҀ\. -RDսݖ'>,sͿ%|_< *S#;il€, \6diUp6;N <D=wu$:Cɱ}.EigA{siUfXT1MX"DG#¶̧Wf#%?8+~Z[#㮷*Y]5PN1@5 fQlX@ 7 yYܸhI4{G]s(wbϛ!GE+I8tTuT=?޵2wā &ϻPRk (b O^J\)ɿk = Y%C$CIBƇgSIqt?6?w_ޮ2a@%Vimuh 4a&u@+8UBߗn6w nϯh+k~n۠`ݎ:(ƪvdY{!ڽθ/ V7׭fGuCOkwa_GI;TٛQ,hҡh]\ѹg߬vL^&oɒoG~6a/ ?<,'%esěگM}m׽:uh#dS|bO꼺cm`3L V%\}7\ھ>¦MObL;ie8^u1lbqdө0۹v.!8쌵uޔcU{SKJj2~~?}se Gĺn;1jc7=G3A>ξfD2 cH.t Q/2ke]_tbX^/si Ʊӛ a+A/Y%P96Lsǥ(US֛UsZl5tU=:ْM.U vV:uH!g8GtVʫ hA)WIkYnƳPh*lÛg쎗NjD.[{כ{.{uJ[䊘n:[j$>`[-N7YW~8vt8b '92d%^%vemÊ5׍!u8X[z0ne ?[Ug̻jh^}Xyo4_T֬}Qq*Mp~RBeuS̖M|9HΒ*49H4c0ۖZ2n3jtV6vuVnf]:D5#*!)94fbu,%'\?wߔA~Y|әkv~܀rl-,vםyBPz!XSmx]{jGH,+eQJng rMr2`Qu%_Fxl8X9+Haor@c?z%FXs\<+5yEfsb'5ϺAߒYLfr^N4^-]踨,I3*3i%& $-ۂ4.4-H~/~7ㆽo53FJXaroW q#}8Iubh{*a< >DYLm4S{^Y+6B{Gɽo#gjL,pc1u}YU.C\m{4f3 V}[f+[y3_|XiDǖ9B- ]Oi?^yrxX{N V;fNLXfgM Qc4CNcvӥyL[tj5i7UgPqk͞c_ Y\6InY='6?f 7r&WzvR,0& 4+x4q<t~t5s6r3OI%3rpu3*FW.%VCT!:tp =-6-oAнy| 3\#9yvrkl1L|42;)# $_E"ud*cTD˝>yK\Xfv:;4R`m@_/\.tW F)V^C8D)V@n!/W`%~;c{Ѧi3O)] `No1%RVЃG Fygyv {:WHP "dCJ95Kx  =],%jD(*z9}.pj L5uaw d|O|HLrA'%@WDA/  ߼\AUl/[NXZKճ"!DAʇ)jv:鸅>z,Jufg+@k5NЇ%&cQ`TL6_SH`KrLO0yhQzQE=3rqWͫ]l_3Rs-1YvD;t~&}9ѓ B7` ִQ`W80ˇ oñm 8k@evPcnm.9v'@C9P,-9ߗnO /s FlxX۰PapXFwȽ.n_g uN~抵1R2.xD7pCW޿Aѯu@O~>#tPy7]Ku#wy#^s푲O{ Qq `7r`p}xwJEj& |]S_oWO[~Oy7fPfk O{8pÙjvE콍EQfAga^y@\Xgwo#氀:h~_C@/2h'hR7w6&FA']ί8{ToJObť/)6vQ:uWQ$ݫ~L{VQյΜm5tr֧׫̥}{ۿzیڙ[άpen^u|f3p0 p2pKx]dN΄lDtio+风R} n?S3lSN^վc-ܰfk13)H#WAEV!tKq3cNƃ9ǭZenbה._KaFd14z:׼Y0v_syR)]nBK:8mfOuXm3? 3nG@̳q WoHxkdG)-4"34Q3_GlspamTs欆mw٦\_&i`K@ߔט"r<_8G9A{?:z; `ݔm=(и|#U#SsY4\: %w }R_|,s}-&5})%bE˩jgvc>L}%YO\K!Xz/r2".Q[LX9WE؜r7cHHzi䕊'aIM|عR-ge)].5PWUkF% ֹ͟dcy Zeɍ>q)^A1s7'6/-~1OM>2U`E#L;(z%<:Z$PIͯAA3{HE*8Ģ`H^G( fNxsn 붭+{l#km&E-V ܸ.!M\)]R7^KsOE*sl9me"%yT&=d6-Ev:g&|DbsSn%#p6ϥ XZs<*4U4YݦqMCnV{65Zi~$Z̉2)X)KuZ>\&LfTeM}GKәG!]^\MݨёlB-bܱ %҂]CEqϡ||_5-tԢC0Wrbu'U&Kc^T?؂%H ]'W7Ԅ,gʎR ( E$a88ܯT 2Gq?inVXj1*1ZzדvW,5Tq##$SqZԧ )/IEɽ 7:S 3 Ôz`Ӣ)N/ `|.az0 @ږW?̫x[v!\,zǺ\sUQ/|e z.H]x^ . +"GpȳX9(7Ze]8q7+۾[گy9ҿ=5oM1k%XWOb eyI\Z#^C>7& tٝظzͤYrSL67U AyLqXƓ¯;1VKYOe=@ѫ1T0TC\57?U8Աyԩ, PBnN!ԝsR' /x8bkq}1~~ /lŨ  1ȷk?Qw@s6ty ؖ5y7u3MQV0t%̑ 7*; é[K? ?knd OWf:|eܽ耗m~L W(?Pb - d%//lm58UW}R`7`!'5&/M:i2_?J p̮q%K?)L!@ a{#9h@FM g# dP+|;[E)ggmG'Km/:Ӥ'mO+?7z*?|VAW[Pa**@w"P{' XV=UwJ{&#|3bFomTr\=œr/Xky,7?Se +~_#i ,UGJ'Wgߌ*7k]~_K{+}YV悷-\[^cG~sҢ{{A-E )k]BOC?ߡ)5m߽?e/A;eVz~]y+/ս.89_Mssi`f}NmѝBgDz.Owc/Kj{91=zc._T{dgW5Ė aNʹ=5.Nw;e!xa2ڻ)b{|p dmRׯBW׿*=9 lcRիj?5ĺ^qy96fWĬ"׿zmD>{w_УΊXb uqnocMF`&VՏ(Y:O5SU)VgX#j2R^A}Z;I"(t欳,5W|ܵ=~ 5`gA-:ƚB7,}C,6qوg03ZIYGv|;yftnqFN/$´Uk#}e}]OXMY˵>(/4iJ~}톙 hGu;O>,=?=lk.-KV=~.庾2{`^/vnJ-vOn =tRq?pm3_}΍H걵H>~yNBזջPww1wJᢻoz ,e9=:h"+%̖Kncm \O ɺxp[(tg5 AK̓l}Zۭ7+KquS%\j\*\zrÜ8$ {%3%hq])"{̷ع\x6Xȧus;Gs?b XrL3v%W{}kd7r7[97f%hre4;-)Ɓv*in϶]]ZVLaK.xۼihleh^գe(F{Ӳ6vڠi"۶n !BB9^H%Z?oU>)\`ðs\=V[tx=1j's˂V 3 |cdVH>\Xvj-mv5ؕ"Wъ=%M=| ;;lit_ l) &^rma ĿFی 4?V2Ѳ0-F}7sOL!v3evV8;vAF嘵@n&=򎰝Y\ky h]@Tu z2~jǘkjb&cɏG4Ej}3p5ρ;-Rk{8%;W/Jn[KTStmH=Nu2 n56j1y]2OֹNe9g3R#dJ&0OUHϽs:0_ㅕKfeh14Qah0t}ӝv/?ƚhR"hT5J}c$7!Ԟ_$wG%8bDk\4H#\0hRj }VOfl͆EgM(g9 :9յO4)2 ꭙ[=WMDPAcKW rvȼHLhqrS I_I??̚$hYԅ«B=rlɎtPU~ -rEN:>IYagj x[vƌyer#U{noD"M b@=irgCYvQ[hpIR AjCr,HX ŶW7; l^P61KMmF=__L :Z%IFmf;ҥ+G18k.R:A 5T2du#u?wuWWg;V7{gLhqT+)}D'.qJIO!}]UKM\Cn21RJyrPcXf)}jjT9].^ %NU:NH7s " +@Vσ :F,ՓA4ՙ} H!?PG}tpOñګ۲s5"wQn9Դ1WKëNFXA˯n (c@@iB]g``eȠ@$x,B@% ] 6 xH#OrghfVZK ?7_"C󸣡RtUap{ؙ|a"JҸN4(|'XS2ߕ(]9[J,CP|( ) |r1(R9m_c۫L0O|Eۥ\cДٷ\iЋ c4 AKUp`rSt;(`z 0}?Kf8jSd pDzg}ځ}T㕴H`MQYc52Q-.)ff+K+C!.!`KB pq8fpY 8y pjEk7}/l=5CPT=y<.gîC&BU73I5k8!> ǀg% )=Ā@Cro'oaFo}fRĝA +f`jvb5`.쀖Uح#Lyl?z2 TdtX' oDzz{4CU+@H $ " }ѹ^QtS=5I| 2m :?EU?x84? ?ׁ EQ(5nJ*&{!%.P# MIvxA A DHf=9-\ZnQsަr_z$'x&m-sWw/y Э=t;m2OH?U:Heӓ44 8U'sO7xۦm]YkZp `=pAV%q`DVZMm6zFZ2NPhY? [/Z5&@3w U'wkoҌk#s.W\5 _ܶ|m]ƣwSf10Tź 5UpYa@ MYaoPZʧv\_e:`%bREŌ``P,lsn R6ɞik%BF l]śnTCYHlj*ZZ.Ӹ|jҵJq/kW4փf +JFJq~Wsec^џ=G#ۏ\i4pnr?26:\L7[-7d^Rb2*vm ?'@Okr,E2q7XjPQ]֎h°-ꞌ=4gJW+K}得'>ֿ˯1pZ}RS0.~[nd @sHcɭKqv ބL9F[Vx4Iw~l+fXiج4U fq_^س|B_ +p[.WC kots[}%jdz2urV|Aߵ {MaU<" ^=̻j9ƞomV7m }6Ø5g zW.ף\lFfqzm8p[ J/jJrҤygAVˏ%PTwW:^gZ-{#N+Ws+ ]X==ⴓlgQt@u1=w55 Jfeb$H4b+ˑ|t\Ҵ؈9֖OJ2+&.zD`~xTyaK6"iJDCƺJJX61K({J%^ٹᤗC1`%PRtYѧ)z:G87ʌ i;eǙ&WBec[&PiU[.!mXdpm(o?6ۧҕoVĝMA&#·GbJASlF0X(|3$k hi/%"g,m(#7 p "/ciL0{fDdQca2Mo P. 1xLU⩉ 1$xbp&YDG~-$\laQfZG?H&'*w?(_%1[K\<~~=.N)*xjzϒo{;1l  FX>_KbL= @L& & fs}doU1=Srޝ"\2TQ 0˶x9|Ur"^.Y4%% x撽VNpY@& (Ag'hQ 6 [ dz'[fY/OMӨr?zgZb 赳 a;ee2TdUU@MN PSwvjZjp &9@̓> PZTm$R1r̯~B#@ʿ/n>, گ*4d%PWI4+&*z?zj:~em;?`|k|ǀ߀u@﷿j @z ;|Ϻc+y nlT(+ Q' BdžPM)D' 0&'A9L[_=y;UC:`#q 9$ہj +vG`kmh,$ LG-jZ]ɩMf ӗBr֓ `GHmά{NwT7G'{q N'&B= z].>[^؀ϡt-$萱a㔞zPB#Bsv:~ϟ[ȯȩx[Qg̷xOUn@xw@48k9E%`b3RXjuXn?_SiTbP/̘A=G#xZ 'V'%.KȤ Oڸ A-  $+g oSȝ |OpKe*NQE%3]2FԤ߼WTNUTMr"5 Jii4K6 5h-:M@Mv Z`+؄ftanAg8;UmӒ~MtnOzCZ2me[nuʆ 0qLaӊ|` 0/0[5y1wܥ6hf#UMP&Yj=e^ 'ּxxA^9W,p[~U^zj]pP{~mWO4{21S9a]gQJ Fؚ/(XKoV}:k\.WGy>NAc#PK Sv/lo9lĵ~^HTM䴼TM-B_cxy&r/euzҋjWzG(<{+A{[)nNW]_ Pml֪K;,xpz{CY!ME'!Lftm.БrC=֡4pPk>E֓}?uflwr]uz,AӍ&{_''JaGGHGІN@oUηpg].22XI=4MH+*"D^QuU-uFwqfGҪ0Rpau?N|0wd%]'N}wmjo$^vh+RLC1i{Rw7wuuh꥾pYꦵo<|}t~~Vx=Tj黻togp{_6T Hβ,k>*\ea@R%*zpׂP>Eu,>FkeKʧ+>Fbр$v`Ȥ0.ioZʣ/#ZN_HMq}W}ZmJf85t!ez\/A)];v ΁qa\4372"|*޾疼Di݆:sNqvNE*|6N[PݨuH ߤ])@OW_V_5?vnӤͼ}G[:Tuoٓ۰wWͷy"S{\IXo ^_^YHuN3zMm^4G[~ˊm6䗿}6>-x-,e~{ SSkgUZUuvrS;f!pakفWY>22ScԫrV L)aT:r_ӑ$[T>53)sG*#4\.T(-ޞo|.n g=>[j0Ji/Lk31Wb5gydLE<ɻᅩ$JT2K+]q<ӈ4BlsKJ ǺD}R 5B6fOmw\(^X'2yJjNx^83o(i}7dUWobShf╠#%QLAWָF0*ӳZfQm#=4?$eGIP#ݾ='fC3JC9dgu|n _|7;>HTOVQQN x<<s!B8Y0l:ͿL:zhQPzJ ȞkIzt'浌N`J/`YmW'E5!=; pK}sؓbT&m&YA%bh›=+C`ڡϳAҽalW>e28OeCJNbL758U\Xe#KBk֒)VܧU~Ϳ yrۭ[ǚe%טnX^w@I4 oF>t/~OCƩLgH/D:"("xC{8X] h=WQJH8# .[zHKOPvo3O1;TVV +kElBً0ڞN[^ܺE&(A[/E=XoaՅc\!'E7niQ?{֧>ԏgZ^oMsJfcx"}.obQaBe 1Duc,d zQaVs "Q.!*+sN#k-̺Z:p̸3kyfHĢ]GkjY>ϑ9b2D9Xz/[UJ5 H᧣pؘ5e-h|03Q^v?XWbcXtl3.i6婹AֺٖEkΟ՛LǨo7I_9Xx Rh>@2t'pq9A>`^AF 9M` pMd>&F(eZjAKߣƇ]dBӶE-{m|Pq߈V3>Ј2dyOvId>AQ`3sVIPW`J@_"-mU_d;9Gñވ-e0K~S9IZ?9K * B_"F# 'fM@%5Mć'k @|mc HPba_c@<1 {'!.U,cM'meq0^*|3=m$QKsURpq~}cpB!hT?׬' WTP '< gsXuKb(Ai (dw/PذO0渀ܭ|H}C@'c_Gƕ?ǷVMj*vd& ҕ 5`l R4ʀT$)ڄ3Dڶl0Y&]` z:]5Gl}q@s3xE;]̧G8v5yrN1M7EF&@i5ƒh+T]؂_0^*hfKe/`- XwCӯ{YjX'eOlrݗB.__Cz.u 1CńI_閹 *?\gGK#k x&$[\pp pɬN ./W #$\i2u=ϚjzU3f?z25-SH*%盝?_MMe"zªMt8%9UQb@$okc2!;( >.Rm?MWd+5)gVs?9)WNZn? bQ) K Ai$X.<@h JudQ/`[-3`N ~resA/YSɕ^ZAC궿rnܶf65jmSn pmxt3 )ߵ.08& ݀q?p5&#|dĦKm&\? \g/gm՞h*^5'ݿ\)XiBj]'vd/WHA?qRy5F gnD]*:xu2͹8^P=x6 mC%6 LY+T+-;,gY_Kڴw|KOo*^'AtcV2^.|ξ6Urぱk(J:XNst@f2O'ʍ2VPzRݿoix7ʡiգpi,vÅs/dF ק>׿OA9V n~5@5R}c=Rw.j2iC;N%4׺p_j}? TKay5]/wW85Rvw~7-rc*%F^/vH/z)\_AZ}mvݩ ^8GuhH5yᲊ4CۤƬOC\ndR:99]ֶe}t-4p)j̭gS <10\}T:45UbWeXj%p\k_ 6i ߝ.ê`g:wYh湻ZmK8 "nĠJ( wQvSpA*)oSf]hdx0T` 0B]=? yM.e=č6&G^3lfa?H)1r jmHAh2僁 ߹Y.g%p/'mn\r}u ,N9)+8Q3e;=^G}%x~m[B@IL.ia+Ů\ld&seVrI^rO6̸_\bQa}̭asK{PlqX.tWDDW2V&aeod=9g`}fzr+ZV{Ex.Cq:jfei!gh}CWVw\Y 欁ULՍe@SX{S =QO W\zK*ǵUטPQRjU\ꟺW;9x-^쬾-b朹gL?CL@X{ѵck4b4ӪD=%*cd#Ҡ$[1 q^*]%X y+,R#W}G;tk=9oDG8U0~5H@!r9N,?IK#N^zk4D^-^CqBj 6O\h3n';ۚm󟐫ff*¸4/mUv@1 0auKQLo?JMbt3RV PU,[ 9_DjIȗ[uW}yҎ\eGΰEe.ij4}<}7F~L8J+cՅGU,-mFM~^R})\D$_Ƅe9pU\ ]:lLK1JR}$?cr*OtLK-J~/{'E+:Mma)Q[$q *_"rWa1{? 9~pU8r%^ k8L)2mН!7LnEYŝ A:ͩILB!Pc/JD5fuw 3K֬u&*P-qV}e7ygU+{BOVl >?sV07E?7Gw+֗EōFnk.+n(pm V*stq><ƍqow;xcikgd+)F$:ž#+ꎉlH?&Vk(e[~"9Y#fG1LlDxm8q'@2NFeegHc (onhK KۺhlRoVO՚ dnva[sG}p!' & sHX+Ŷe`hZ8Bk 4իHj  ̅oYf1~NW9 T&))y͞KЃUgW'G~ļ5?8EAp ;|AJK1VɊ4\@<@kwȥ.<ʂL?CYLY[i޲j<-ʷS-S' q|ʙA? JGvT8wXݼb֩^ 5 xCZF@0wjrtA}?Xe>#*Z `U06skŲdٚ&^'yVC0Av'X=^[}g({'5%Wy;) YΌ|^& @s>';5[]ZTF Jdffè '|S j=-Cn+^R&{IEsD6P٤0P t- Z`24 0ȥD@gOt{;)Ѕw? ߿foR[LGgy9Ϳ+8clWH ``}$( <XHpĆ<Qظ-O֑3 R11/N]pz񪫏җ!fk7w$cw/9^QXH?/z2??#jywL pz5?0*+'dJN 5nxa]x0Ysfh7Fzz{׌70oSOI>!z2!8@ZZM0,r" rr B?ھkqK #@H;J~Y==sk!J X҅OpcStyz{ݬm[eBjP pzMUǯX8 `G r\3Up5.^)-asri(rN\d0o%-E, T!TzƯ>"_DL!':V#Xv`-?dT$h7 H;FQ ߫)!λE-rێ6 a8Nܶ9?Dx9r"R'Kg`1qfUǧ̮6KK B&]ٔ|٭%_ K3^:RlٕxU҅n_?fz>FqYp7{ΪW&KvfJ2ϰ.E*f\.nX1ցZOʦqJN([Ko3qLy~lrEKsvVYj|dӒɫ`&O5@夎W{w&S&LlѬOc&)( S}>_jZeE6GK%-\"ٔN )$bI.&9`Q҈{ZߌSڞR-;c>6urp.[y Ё sWIz=EHG6O|ܢVJA t<Lt\Q ѤlVsk%?mgjud_"IVwͶT^4u険oL,l isվtn)%R7lb:EijM:l)+oJA{8"h񩰂3Yӛ%uS  B NCqlz6j1#h`[[1IfsZmŦ{GJt )\/7>HI;y$!{'j&4`q5R5/=ǐeOuz1'ВAk/ :ꊚJ=1e9gsfFuR&*UQNRk\_tYTtr Ay~ѵ!OFFL֩9up{^z|iRӈsT|UYS{C\#oc7I.c.pRx݊7QRhGg|6Dy'uY'tٟ-Vhs#[J2t1b(uzCצ%.23WeRTu+ ɿnJљ1"!gfR\I[rBkAr#7bg4c+c}eڛa;MD"]| -ToT(ywbHĹ(~m4}'~n(urR$)Sޣ"2Erhok"z ~`ǧ88| bipഡ7.3-R*9z9VtxJ!ibN 5fX7ĭ*`U7sb)F&(MsfeM3x Uά+SQ﬈˹!ڭΞ ~x؋,^J0L%AvRKg{|+ H8$1IR)j|1"̈́i`6&"[g/͛Pl S[_1:KsHRqD69~Wx_LW-LN0$g.ȹA z@.+ W ȡWhdT l ^شyY\L}8*~qm<058 pL{W0oy1d 9iJն $;Sm.Y\clt(!1+eL߀Jb)T2TuS=*H l5fy(=m&6.EJ )1örHfeV~jÊs9L-fDߙVqAbx-9.N#^;,!-@X Iм4=|wj5 e9j_١6u/ [Sy+7%Ee]Q5U/+HDdU|7`֋.&ր.k{wЇBS=ٓlro sW[ ۗEnBI)e}ͨaIvSe-Mܳ Ǯҹ!R }n0B@@PY \"yȹdT̹i ]+} H=; z>=`Z[9^Ǹ\h|sUe>]ܟY_|# |H, $ݢ.@@=.'V^ձjijMr@9V@t KJ* A9Iպb15T[D L.,bGpOw-r)! IjūS}_zn *Tk լ2͓5-i'¶&rUE HEDJEiir t0쮂p?sa}Gr]kl&2JpiQɂbdT'T0|l[6ΊٶFoXYl{[KƁ /X]V ?:N._7? ueĢ%-d m}Lw0nTI9^7zG ~}묍G1_{xפ>w] +^LO[h 50`m=MGsYpO#:1қqQKŋ+sv~sH}T63VuAmW]pZk<3v61ȃEЪSHo3E x2YVH Ep̴i-pfO9i%^OTm9jV. ZYY))_ʬ\ %ݒi݊)eiקLT?4Q0:1x8"14 }d])>:anBniK_g  ]re)𯶌YyRrkH ̬)~7 wm 4 V$c&s.WLvV@5gJjA7<] 7)SpSHk҉d'Z/-c.qkt+ѤqYW;{C̵ zȷa~`X_r舐'L\C t3q6+-z\ c' Zq;➿3cAU8YNe F/#"Nl뇫9:۰%o@/%2+FRU3iX <2/;pƦN'ަΤb-[a͐XdJ\ +x1Yk:1ZElB{BukB ?.QB\M[S!шZU1%,1nQqj?A^"vCXRBM'y@X>eF+ PvHz:ǴfM{]m&~=u_j&2U#rmvf'=,6n\ =I VuEIXRόdb㢼>Zr)"8I:J+.)')UIQtEV+Jh咷P&Hndm kWz\omqFu=Lx5Wv, ^I˛ER$wj.+J f2Wu)ZB0/v U۝on3!8޿2nf S m8 cj~zY UJ)o3y{r6KTKB3Z撢pz])ڞ ٫pvkOUiEIpqxQl2Ԣ&3 ĆBcRgd=~jlC,d>Hj+>{/6HlԩȩpifB/[{ 筧tC Ec}{dS gcdC>C= :mM6H>^VME`+ƔSޞR %7ҡVa,\k$W ߻|ovz4^t%;\lCX2b`c&5w|E-Q;ק' IEՇAj]A*Yḁ'jGl/W*Z5H.ĢޔUU΂Ѩn+%u>"nj0pզKģI5r|-t 7e0b)ҭ%HzcwDC tE@4`gٯM?Q>lȒ/@ R2hӖaY;V#7tmD7;)v @SdՅn~0^ a T= iևP" x2 h ©H6${# nE;Z. INņS9c|nZ{%ͤwCӋ=Z mJ=`K&qimWtdD;3zL8B= ,2 Ɂ_r99B4Ni-2u,G;i^r]'Fקmm97ГG$B3&iQA(!Mrt-,r:RrB= B 2*ׂTB*sc^{7>2f52R5J3- {nbR>QreH6~ }aAr*,!r<k@3= F@qGRy-9#Z2&],0;|>H'OrN.k8:"[d }vdEp>9PeR ‚L ԉ}0Vr?F]aGgn,0Þɵ)VBԂ8 3z'%ҼG?ǒbt g2Tg sઐ,6m #mY 9`K["ZdM7(8渘 &&N7YVNwşsޢ}}E@#x2pݕ B(VD3>I\Dҷ-~Z0o :#/W0a,0=lar@(n@H@:O?F c>Ox9=આ""A6j=xܑTl}~ x!+PmkC/Ki +HRiReҡ @ܼ} 8~SfZև)&3]% 'NeKwG7]ߖ[~HMT0~ut9P PP^(߭ՔWkNpO$]T?nY n'/~?@Er{*BXA(o!l[e5@Ksqh@x^VQ0t[ptҿmQF2V/ _Es uxW)X'\T6>0ֳ0Ƈ@429m4?-ɟQ>~RTRm眆/-Jhk-^lp{voH;u`XӑL"/:\_ĂdĢE:F[uߙXeξK~%KTEE]& [wxc1usOR Eh)$~"j0AAGF߷sncWI1wS7`^c*nlXRQg}i_ޘ.f95,&='nAΎ N䱇}߯'Ы.IHEi븹aٶ-i>3li&'nM ̎ZY:ANQԛ%ӝ2;Zu6%vkx[kT;#9`7#$"%Z&DiH)32vwS!4*j B9wB,FVyTuݶ.-GYLb4͏zADAjYI"s>u| !/ @K$54"܃p:Be8!qYjԊѪy4* iU:*ym2_L؊? #cJn\9+^QRhA&upHEj- C@~,vֱǺ%FQѤVYsfaSZWGhw)"v4SŻ{,Cx,ƑX d01IihE*agyڦۼ7e]v"8 c}&Kӛ9Sg[q U~4?䟺PY1:Qs:dDS ]6kd9"£ Wcw;a7MN%By|=ʶuˣbȒN }P^j;%#ۘ?u6Q=p$0f\4"j팚!^ȡn /CbiBw?&0x1ڸ c(hkijG尚PeQp%of\,2^xVrLrw^XrN , :*%Ս#3i'kcg?TgZÖ́]zSA5NGopKMI- 8/)lM2ȉl 烻ZN!!AL!S0˜j{>Ho#6ō OS4O01hĐ){m |GF %^ [SV.0;GUR0›}6N o=rt/.fvPxH)`dzy`Ɇ8БI9\PoxIgVJ|w1i .Ê#CiG0;}Oh]G.Řpvt¹-wN츿~d ٤e2iT{A˕ukN%ܡ&A+A/wa3y^׬#Pz^YcBrؓ=!\h6.p/qpqw9PH8P48t[,!̜Lfc+qi.ԖVQbj~H#ݣ!DLBXpQ HObfQu`ull)^=l*[6<ЯZ4UfhON㝊5&`|oh  \pD_k`a`wohq5#ĆSuGɣЙcͯ{l:/7\ɫiYIĪ[5+F=D9qxaExGo %˱<ˬ!@OS;p!B, >yS1--NڭK5J*yp" 2p$=ʫ*x/5d2ED/UkFo:ŷY{J ࣺ(Q7fZbna'iy­ӂ=v(_%=\/Z.dz<&2exl۷ ܺȋc5 hXDH7RD"]*:^-@X7 erG!B]q"3f3T.Bʻ]<:JhYt :6̋`|;Xxp]@RBia"[$SLe. VuY evlT&5W(esKߑߛ41Kyn֖uJ~uk.$+D(aRྪRz:C׀eHů< %   =ȕr$8lʲyaˊN#$ :A2'zḠY.;}T۔b YWԫʐ٪7v"k (;T1Hj;@_!PɛEPpPP.|a eúddMq9.Pջ!Mq{)%xS^r8bM@ŝ!ah;to^- !lk^%GMttDvMGdr'y<6̨yxef [v,O!K'%F@ONi߀4`CXpOÂûD3SR1C2eKv; :a ##7 D$Z`9>*?f}_p|AB,޸7ԅr#b !o{l>E+ΩN՛O!757M%ό]J+6D~ZaA(tRdF&׿KNxW- Y 8  ?C<K4mTAYߎ߿H,ʶE:i>\7 ,;4Jc`-Dc߯86HgsRz2mQ1QacmQHm+d_`;ρm)G%VD=(nzs]V&1% qiamybز˳)p; XZ)A3nv$u[OWMig:GϘT{2=^HQ󥤑/fvqJ~O9RP; Ԣ.A'=مu|<ǠGds:sy _iGVNtPۈjnjw a~~r"M$ 5;< +W-k~u>ȿۯwuU h'U h'U ho"Yw۵C8%Ξ.3GL&][6k*UDҌMXgC|ɪW"CUC=` s'&8|z'6fNf=' )CyPkj'![3yyμJjm upۏphm{ <2dP4UF-ʆV{8rs%ҝ^ę-;y;(r-$ٔ 򎭶G49?YA5 ?]翫wU u䯮wa9 Gϰ&nIƶ"eLIn~%-`r[gU.+ɍϵ2?Ћb֎R.w1>a<#voRA-xa;veuwc'&Y5/'VW<3s/uFligyJ*/"q^g-Xy و$(wǚz xuUۜty>+8Cl3е`>U Ai<' o"s|㻎WW:*~W*>;V|J){nSSϘɣ>.pcpxvXoqq.?ك`Sc˜1]񾾭(MD k s#o {Cþ†G4{}=?/_m˾A}- [ Z6/on?k_cJ_D$$}OיaNZpp~]s,&ڰ4*Pz)~/f%~5R@?-S ӧz\Br~Եu7cKա{͞eBǡZvxZ+j*"~;SSo Ge6O|=UI}͘=xvžsMFrSmSm3a)רYlvұxK(߾S-SO]OZ߿GUz i_x]F ˙+K/ C4'T~2s%_Ľ8[GFkTK txGfb{W\*TxPKV ~S.açӧHVc~&2k}Ml \:tӳޢ= QkPZ'lQx&$:>ȿ{)|joT(?&Pl Mmx /:iG<ڝ6ps[k+-.DA()_ OyۨCS\ݯM ϥ'FXV'I-ԏj:It ˆ #׉Rwt{noW-ƞ%96N#{dGTm[c6հ,58 ]64~*s;ҭ 8绋97h츆]G_OeHΛ^ZbʖN&+|#Fs=}.ʻnUl&U!|or.jmw0LA'ܢҪebvǓʀf]jW aFtY+5ޑst0Ȧqf&,NH 95DxL)InM 9&N*%*.k3:?2*$ۙe$қ1\ʭmK&椖tIS+,OISO9b!ꨲOTWkOM֊MW=_M熴\LIq5y>Wz]:3|?!O 1џߗB'h|I= Aڗ h[oHonxD3hz~þh4yʕ8TVT~o%Ɔvz^ӱVXMz2rڕO ?t]QdiGA8 z_VVW:| 2#rz?o2K'䩶!Ys fPcT{s]9 )~tv>hbpR^#dަvY<'5_!/CMTPEϡ¦ JsV}_yCr93GΪ\M:[=e,i%V"]&"AĢ0PNyGs`![uֽc7醫sCAz\r#yXW;}̶f}qOޙSXcn2$Xv6{:l49>mmQ<T#X&c O[_"+r~<|mv^B&,Rc }: gf%:DB<(LGj%n<ҎyZ\K7clް$6K$zggyNJ baMAws+7.rN)ݿ}紳JUm÷?l9/ذҳ)Q2s6ڸ@\ ՓܣY~b/4*vHEA찗gy}_܌f0%Z"&Do#| ]g c- kT=_m̖Q2RrZfiܲ;5/ϫT=69%t\/QıH ޙR@h=-]^-묽z̍5P( N4[RYH *KOcjdQ-&Z9En a($$ Ý<'Ϭf{+nU>A2I]bRgR-$%_6FTסFd VŨiLHǪ薼WˇSFV4< 91F9[~Md!8B^~CQ^kR<޽^9ֳq'#온p$X. 1X$.ҜMnkשGtZ?WgI O ? | pǏƩ"_𹲘qYkn]m,ZO^MctX$tΓ\;~JEOI:%0k9W@ѸϝDZ8twe%ZʶbR6#/ùo/i{c+lWoMZ&؞VIdIrO|g5Sa9X#bWޭ<|-I*7qHjI}*1&d昚t>E@ N m?cw~y߾5]&i 5O 5nzᕊ+B-6LrPT4FuPK+U@i'JA~6 09_6` 7@pP߉ް'_VӦp[Am,p̬Q_j W\u23o LXOȌ -?O;C&]|=#ȿs/?d9u̷Uc/;9CfG?iER @a6@nY_AK4Pܓhrm/S4ұK)T|,׋WݣZcݮ8䯯?B$-U eV7h;BX$/Q吊^Zi/sImnVVR*U+{ugKw-Yq(kB[[ ޥ[a n61`2nO(ڄWNNfoejn/JT=9;6E⭕~\%P@ ([wmgGZY9S.>Gč!{LL3J̊;-%uYM[GIkDejdP(ŠVA%Cc6v)6.iz4WFt}9ʠ.=amenBUo`*uŢqSz;|4|1N-ꪬ-kQ@~%G(ip¡=>'G]&Yk1Ktr?dӽ\lKfE}e[Mmu HcZיlLgA~6 :^58+-0"M=GI|ҤsmEWg-^-ZPb˯T!^F a ;M#Ӛ"w^(/׿|L( ctp%Sm4ժzJQ^}8>uEf̭bOڝ rMNn(wD>oB1j )gR@"F R-_\ihFм>;ecU }5-!Cp})B.zន6\f#Nj8OAl$?śt}/f#cDIvApX K3NOLtN&Q=|`ʼ+#S kf"z)rͲ0TjI}6Ff+Q>_^Lʃ9'CLfP"s@8 6-K?k7G'լo>(U?&fG/s~|9cH7[8]{fd*vLp2{>qy)eܬsVF|S0l2#U|enxӛT̨Cd0$_daS w"w;E{O}ڬ}™=T؎ dv ftr]21 *=&+A1@Jx5 e-]kDs<IBMSBknz'Pq$ ,4yi܄aoĠ쏩+L'Uk:tzcb"Q32ы$e@j.u1Ymu+->/.AUs,K*J8uWtQzMwPTݵJSX/9&L($!(w1g{P0sSr=R3_,nN,ܳ,xW+sDOD ䷅~B& {:2#ȿoT3 ^AȌ &swH@4((̋(qM[{B,nt]1J5DZdqkFur43DU㸊XXAzҠsfWʴcXaZJ*Sriq|eϹi&llUl70ķyF;aE}W‚hvQ\,޻3Mwh,^|qB? 3-2 ™TF•m>œiiN^\[Gm58W7gm{G3Xu> By)(rWY,d.ۭ ul^qVb.nkd y@ T d{{.ଔpa e+Cnɝӫo*/*q74ͭ_J]e\uYxbOz /SoHS<_]M5ُw,[9 2z5:UpRV蔘`zV>oV uN6UNOQ[g ]^#3%Ś6tJT7D߄NP&/`oyT}qgzn61z`-w>lJgF$s["RJLh3N\9SF;ݏl|~ϖ`~WwEf涊Kh iϦ2Hj=.4{SOe6 :U2aKN$/2 o`[g},l<xr7}*#;OTkZlR,+h,4K&0t2K3HE͐Ǩ;B@ _;KE8+uP~/RQPҷLpF@e5W[RS6yCU~,w$KA*|=wʄI\sky.&70*pC\By4sb"}Ü6F얒g R"ʕb;PRSӞ'0Jg mU.4s3E# y}`_bW'y˕~[\t)kF=.tǸԦ5 \pFLT!OOFA~ѩqL&w9̱]nS9ܚ[8>nBvڡK*R[T7Gk0};  @.zROΡƾFXUP|>tUܱycO/1^&uC}\tdGԍ~Z(-cf$T e.uNݞsZ;ߘ 䉻FReZ%3J]%&?Ϭ0`]nc~nۿit^ks0Rb3jN37AIJ%(."2q~6(+\Ւ~ (rOjSC}3ݒ-lWuAy嘎f4͗Ab0=k=ѯjKR=U!L~mwQw|y௡ژ[Q+THw/ڞL{*ar?@qQঽk4XʝpuiЉ[K[l6n6x>WjwyXfc_Ff97b՟ƍ2W b:ɜ>-=|8P8>Yc걫r-3'A~S1ETo3">W<|ލX%y",Db.SG)^d]GSŒE-s3s/?RC""4V_qߵ^O`ի/4eI礢 9)6=pdJ(-O&ͺ8̬D@VzɓA!3ޑztie= "Uz'p7SM&fd{4ŏUNb,=E~֑?)(Lo( V-wEIsnxNSJgƊR;j2sHNz[{l 35P:8Od8l<;q :B{VPf41=D/EgjSy^w0j;_gKI}{lQ3Ĩ2hjuɯz:-P#0K,GQ*ȋ9|4I2~|j;&#힨,cx楨snY \_4nWaNب t+oFE587lOdooIqXu8Ì";?ù(tKn&AC}idKFʋ=)P\|~tnIjynuG]ȹ89F1kXoGsʂR|eafY׻fb?4(\q)zc㊐҈TIBf&?w~/e;g?`RQs&c3^1_[e:$qk<J(y\}=gWR$ajZCβ7igcMn}_; ooHC܂tl|PHr\A{\K.~vU" vu vS3fJSs7]Yf@a`aF2MӸCyC\*'0(NhBn"//}yn w ZԨ+eWMdgTǵ2ۼޚ #f'rIDg. ݖFf)@G *`ْò~4}I"uZX1=mOCm DJJ^d|@4q_] F 3@/9>/ݹ]A?}Wi8=_J׊nP Dz'c,]d!VeC}gj -6ٗN #9`.T'0tB*PTHtҢ2|gmD%á6ώj; $GR8&"EW=ju{vث?$mΤ$K2jkT45xu=2>ER"2tMS8K6(^;/vl'O¤5*VޭFtŐ4Yog"<7 aA궔<}M2I1@=dA 䣊 ՞Ї}vpF>kR᧜upZSv/}@}ym9&[OΡ)c2߱`zj>ҥ4cF.緱Y^/ ue{ ;3EnG:4Z-l jTM`nK' ~ ɻlG1ijE_由wXUkI^m'-"ۋ)Gs&Ž,Fw(n5?q9}R v gg,(w2 <]/}Mѓ"$t[뚙@ANe۪F/X$-ɒ/Њ{?YAxctW9KIBT93W\|olޛqu)Ȱ;"?]WMfM 8|q@1z7.3VIJOo.ٸ,ܶ-ic&lUQL-* <o*bZX Yy^_ n+ES(VC6:,I+6K;d=1i۔[{<$s>zg_=FT'(a@$~1k&)ڌOq1w[\OyȱtM"Fkr|n/b n g\DO~@w@ГÃBb,5pg_\MAFMx덵+ ';\f,J0u±K( ̅=C9(sݡSڟ<2`vq$^vǡ\/^Ndqڍ8j_jh2Ţ]ꘜb> )x2o!7 $76{c<-GŠpX6˼|&PaC;h٫%<39 J>75ǡ::=Khpf?-p=PAU4Y gfv7 n)&rHkbF&# k%kMC+Zn.|땦˩CQLL4ϧYizb/h2sRgcűU[r}vEn0;So Jk;Nr8^:wEzJlĺlJd-A9Jtt-ǿD7M,}ITA\j'.O]?cւ^Ճ)\= w'EA &X(cÎ uF`ʹ`rKeFaDqX "( (VhdO׶܏2AjZXlmًs\3mi6 9z?Gʽ2~xKuV2+MzZVaQhPt~w!/ѕcb.id޶Ŧ@XT.DyҜ]~Q  Ƀ:/.Jtd$ W;Y >_AsqLUKϺm;8+߀Uo7=!sjy$0IZy6O>U6`PDh$zA=n '{n MV,C~i eR\)ƄeHf'َ:U::O)̓ƽ_%r/e#Z@Z@~f=EH4ߍfTNe!F#s8z)1;,3q׺ԮnjI>#3@ ^p2`j8k^@w^ݎ|Z oP<01 Z vM*\HZO\v]&u>@/6kBe~Þ/^+[vCuw%b!w^BF2,5oS0MvCz}VùѽRtNF&~AkZ?n *vZ;Ύ(GFOm[vˆh nJK؋@o 2ϣwm^yF\UTŖY0e't~:k&s.NRkTx)-i4,zjղD8;ƼIFpے~~- Q&QrU\/WLz3:Beu&5Ϡgm2{OF֤JiWfQNzik8Y-v j+Aԍ/پrKlH|h '-\miY A=eS~d14\"X"t_Sj7Qul3=]V\,>!OȌ -2#o Lh2a{B/P>Y7耜cB yv%rr ZX֫,weykM}pQyKenih)? l ;ٟM WvadJ Y^8 Khڻ. UcJv/| V^?!O=5pbzVSYxkA/і̬[65@iZ&< G)'>MViA;3WQA6365.gNEϖh{Ma\݌0!muq<ޟr=$ruwgGU[;czsW69Yu,5rFA? 12ܞԳ p]|t< ꂝ٠u͡3}*{7r~juC0[0%BoОt"Xk |2\VV!r>CfF:#:gd%oY~θ^[n-dY9C endstream endobj 134 0 obj <>stream $O:* -y>q `SѸ\Y>jS;uqGdv\$ǭo[í1xˌ*"5a?P^}l)ڲG7,@|[f#@|#d4SËϽ3%WV ǝ2V֯2ZӼLSid%%Ϲtp a&f렰غPgMc7 )Д~] ׸]]WpN~h2GJNKL[_OKYec@]M(uMQ>>Z)8J5"s@*ϏepR wGGp;FgƆ3mk=ǏSJG#dZ`6̣R>E a,4Rȳ+nئ\:- Y1Ld~[Kz|5hqymA:܍5FRb;TpX3NVj'Qt`R`ۘS#&/I0OYhO|1"_:Uѩo ƾi-nk>E{a'ƿ",k2r9[ZV. 8 }uEOBK ﷬*OM3gok9u\+Z˳^{1Rx1b,j ֕#ҚIx{LBd8,Yt `1 CK ڷ]g7PO: ǻjr{eqs}/P|6vr歍̢ :M6U<&Ik;]B1(6 ]1[8OYk.'vnjPuO[U$={|Q~𦻬WٸSs[KZ4Χ9>$+;*7qC(QZBw/v{Xqe|'њ;U-뻜?li ٫Wwh{ܳ-aݡZyA_6U9#ʩňQiR| ll Aڀ&΀v(=Æ5_D;#&N.C]^w|*ly|>FϗK ]?NJ %^FIl&7$Tl䇁̮~9)ch³!JG/9zj>ҵ{ѥ2XIbxOdh '2R39^Gar>q|sx:o I㚇8~R b7XO):ʼny {1iP?Mήxue/.fƂY-zj%Il)14/W,ܜ/i)c|6:]~,w[w]gh^@>m6CAC9XLTULLj%y*!BxGރuyIW0"<_l|wDkV;^w:)cY? `%~x-`Jze}pV%/1mi$AUf: ES"F~§3Xsa%_>'nwrtۇ{1of{wQڨ-dJjq >yEf)9 SϊRwKb">N}7e>5⫻a;ى3D"㙆5n zh'tquKN$IZbxگKLyޕ2.ngNOYY\Z%N62-$*Da&\\(-Fp$ {#гll5k&l7TZk}>ńPAńJ0` L==Yo?`\3TŤ ݆tE"9OuN^*;A7>Xk-[ZJYW3X1k"7bXs؉7D5)9m=,5lB$잁[T;8C,TASޒfn<0櫸)̢#焵,;ͯ1;xey,sYϓWgbB 5(;`D| > %&.QVcP M }\e+UV^% Dl0 r9x~htx)7Hv,A |Wnڼ"z~ES\_hT{|D_7W(&&DA{M5~/;߯?b쳻UjGZ_W&wOĠNC ȉϷH]@inb3Q8fØ %qgKڧEs#uz7:g 'nnUg^+sS ]廁G[LAuف\Їq'l!?c׏f s~J̣},qflm =8u;f{VL+nZ_t }tFoE0o|K/0|2B|u20%z_6+@7dNa-'mas}k}Z|-$u:~=uٷiNǷ  Gv]sMB[ѷ[|A ?kڍͰyky_wtjXdsoZd΍ˢt#(:Ӟ =2皶`Vxoń?dtt?ܻnl|O9|chuo9ynϯ6{Sy]v_eF]gaDC~B3`5M\("2VvCOvxsOvr#`k8^b$xʪ?D>]A2'2_?BIz4A[AZoQOlPEi i GYt3 pJc+w^mvc5"#?; Hvdc((OS{]ǖãT7=(l^9;PbcHBqdǟ2pxվtzڙՆohUL}ˊƥ NlEE2=Oe[`%oqUa~g?χb3 ++EZ{hztOe4޼׷C2M}w3MnӧuAg@®kBz{5E䉷[)=n}0Sx<_o.}kqax{Ӭq2JOxx-Pm>Շ?OiW>ġ}`P+z6|yrK٦2*:/Svn+XtE}h5;bܧ݁^w'$O;k"G=T>Cb6g3YQׄ%l_;3'jsz)5.7"k?S7j'p,7_TWDR(!'/Jn\*7x *<.(5s'QsGG-!aA|^Yi>`2Zl:lWn=>v86'TNJiWi ^1 W~?rkNHi(TQ+wu~^r'̢dw+eފ8OWtz)Mrϙ*zb\WJڽ jg^TɸS y/7ZO1;AνnJp$RDj7\ٚku,DUiNWWˤgR8#eE%{ʹ=$*(A%y?| ?lA#KW E)9CCjIi{Ď=>F4KEiZy!ko?ȯP;g#܂MF²y$𨳳s}R]KKkᶔQ3vHaؖoiT`ҼuCpQ%jKə|du_v䀇W|䶖U+"=?_Xb7M2^qR+kAsWKZ3Zད8uUK&>2oo n]$܊ nyWgzØ&smx h}N\Yt\oS .-h@G3ei7L,vv5flg*}Y#ga1Pɳ *F9Zd_jlw{H {sɠFu"!uԘlﮄnEMkA[l96)g~C.|k%|v$M8TƖqہ;d6_m`];L~0uyO!c|2R=t{;% b}9.U!q&{H|PsR92:77g-_&/ 7:KE]xcs߂{V״Si(Ho2 ;x5g y$͡ ѐDA덺vu%j81Q  ~#.Dۉ2ѯװR굯fdJ[鍷uAyhQ[A1[$j&5dTiuiMk1v[.j铄?pkmd2u@ w~oux` cb]>;*Exk|;ٞ^ 9ojICjzKVM˳UV3je&JkwʶҖ5փɤ$2>E@NT.=)|RvJIuCCİY& k:%P*A&<ZK1*J}RDtAfOH" r4?h.Dx3qyKǽ|I{y!; 3,kw2g Q,mP 6*h`TˊgWM#C=7G_BB Ҁ  .$S F)s^]O+-uj{bɵ&"O`Mbub,"ZUYO^8 =(i'+hE>Wd&پFDs4 CFஔjMg@F؎ǹis, -/Ww1]Oe1Y"fJb=WqkGF< k*w7{ κ8WI}xM;_veԞД@m11 w13H4X 0u:,;]]|N{wg`a||n vT[zQ~coB }QjAyzzE=o 2.˨7O?'o*Qr+{gXC0w/%^?*8c da(9|)@k~r#t&y~gݽ[Gzs _a2pDrKWv~¶vxyo%~i+Un^U <@ mPIzpm̿7X\\O}xVj~\>eWmp[wgnZN~~U i{OD xۺr;`هf{gΞnͽL\uzHe Mk*s3v@+8*욅Bƻ'W8aaKBk=_]n.e%=2ʯp6@c^ǻJ%GB2Dɹ5fjOg0Iic"7; ? qb݁rV[hN-,D툽1T{-쪾[o |/MUCXd$_8WjMjfb[Vq~K4n=X|{TO-U*Xx=k܃ötyHgNS_o]7ښ5jq>SV& oCpE1Fv-U3Қ55l[ B{F z\z[y|4c>޹iefo/~TF~:)4r%k d(V -}л D;=v }Q՝Z_hwQY8'ϟY\&p|Xh3'7>h޳4e"g~<9,~R]9t|Y "ةlUV}:h/n/<ɖ>xˆlo^~ojR]HkRZSZ3E%c=s{[JqPO\ 2i%dzy`܆}0vk:cl,mm8-jevUqw}¾?}^{v+?AuBOC/<}Y^ 9}('Ļ W2ΠJ+uӯ.ذܘya7Yűքl^8~,0ΥD5/6cVyn ـz  KW~k 42V⍶0\81Wg`/C#d iuQf|3tw7G;VXx30L5"ʵ4r_y^}k^Tz;\ rn{q.s?_D1kء maZʬbɽH~>n37n=m3W!q/!RH0įE=w\4`U6ky~_ӹɫ|,R3*\g4#̜Vb&oQMe>QҶ[,uföZ5?>3ɡϼ!PViJ)LهKtX l{O0Z04ٙرy5dlgs/z^;*|=n&C Uӏs&?W5}_fV"?;4pr]NBPhQZ%X(A˿Y¬5 huKmm9Si+h͚cɋ4ZnS﷠z9<** Tm)}}! Ec(ՅX ^QdeO/0{ܸ Z\( 5@t FB_wbC:8TKFa%1GLR!dU ‡˨&OA:sftϕ$-9dfZ@5jm ΃9@70muXXZU=;|pYX/XB.Fk~0):WS A NKho$DdȌ.XU#t;hlP#g/KW^]k3B{0~A#Ԛ<4iTK|`iv1-&QTj㐕Ɵje9p|lnk m{nB?4lx` ]D(4dd&4i+G Ǒ8yNAaH7 `ϼVOV :DDA1]ZJx<8b.m}.&,@ V J6. 픷bH&ѵkMC+L]jvL{+_2|;/+! G6f"laWBx͂_?/msYbj5a'NL}}h|r]woRI]e83>=_7  ];Y,QH,X5V/1t#TEsoޢ/ɩܩb0+f6Ki2ztD n! ȺˀYB#ʯUhJQ Fau)`bNӻs.4ë5eV읢[Imi aYs@)PMdh7,)"kEmt|ƃə8x4<{4 ī<Ό.7 I 5Fnz7ؒסɧ?J>gk {e;p+T{~l@" DE6fm9#O͐>]׾_4Y|>s*iX򡱯40fl4!Qvqۉ3-|NHÎV`AZ[\4U-WmhzU+Vk?FV3EOil9!^?HByn;3znWP>uYՉDZWq3nLec5PI~)"'Ppы=3y+;=AYMwDYniBiZ(m?GN%:/gfDyH=9R֐~k,-zN^6͘^+~; v IBou˙ݵ3sS@m8[n(n-v+ΣԿ>|3I͛tg!Q-HR+/]./B\lNiT-NknDˬRXz;ZRlc;z` SOQ1`VM^ =1V"?Ab$e[] e!O{p$*.B▟lf1'8?خ߬jR-B1j%^~8_!5UCc}ӕ.m>|$2qQ*;RNAAgJ@$g@&BE,I{-62{%U |k{{TΊSjJ9%17TD[Af̦k47|F\CEiK1,J׉i'Lk#^ Qe$Ib^BjX}\ӷiZJJle&FN{/eNX؎&z ə"0*ׂ_k29Pz\LT}lH( 9  os %2@@w Бvc!y9>DpȆ~C9-] z brLOבڿ@rk(Wqzl@ca%@s>˘+?ouk?Y;fO7"@u Iȵԁmzט 26`οs?BW(t,wC8Īi8kq  ᝎ@Br*PZ9м!D1{Iz\緀V,CsdL_`+qN<[wPBS.@Y*keþ>^ժ ރ b#AV y>[ۀO  hJt 5oc/70_i `/|擻O'J0B`P PJt2%tWbںѵh[!Wobۼ1+5N[B ,azBo D1Gƀ = p)B?kův$@\VN[;VsuFW᦭#3l'Z~=C+l {un\e8Z[TAP5 @}UX4,cռ@ !- $ܐ ΤBwxg xtźn1_e^Arft|\fAj(;M vT-~S1m7~+*HrNIt{Z:| i6 U9γs6PZL^Nrk3orϚXpwNo?2}c u@m%%G~yrTh-&6NGuGnL9G;A̷~lRlr+3 }g~ %+7u- -}*I@) Z'zgP l#xt:Nty$ FH!ȸWnKն w/t7̟'z E9Y9k^ n,T>Q./VToLΖM^ }B@]$[> -fgT}?g-ph;6'yle7ugqZ땅tW-73bS#O؂ɌRA+K%?m {1dkk'4}@R X&B\65LY+{1/n{=`s)=ޤZ 5;bH:sÊxMa@znO}qb#ik]!5 _S@[@-L(t* bS5_8zo˖Bo:켝=LΖKr֧ebN(L~k}4qx=ȍ*OW\8ԃC;*4K4#jER^2.灃_-7gUF|3BgՏJM@,Z:yk$׆'ۙ9% 3u _e~ pa|\ǕzTvQ1ʫwZu[wuvO!w===iS؟Br%3@FBayui3r"VQY~}(ZK W*޺ڸgڎ)3/='{烥z/rf&}4do~G-3\če۸B՚5dsOD{籬F{9)es8a_[{g}P wdlbrWf~Rfq[`VLR1<(¬>mwZzPTDtP$"+'D{9-d$w&jz+˻sF1e *|ry7M.Wp>T긊֢| UٻJn{|ç-õRgw{HMs}f#Dr:T@ZО m r7+ }Ŷ[xJ? {YrtuFlt5!W%T|qo:@NJm?HlqMY{K+ ~ @0CpU~W1mAH=lyunT{e*6ZdS _g[ 垇>]h_rytA"qj yqC">0־@čJ;vOY/ jxbs>1=Hfb57l,XfnvN -Am DW9g|0CAbk;Q##<&c[pm2˦kHn/T$Y^n@?x)ܝ7\y}s,u*VPEsj04>MK`BlJo봫dzaK+Hf!)|Y~Rz|-=XQצab'ǷSNwVg{Yɿr'J0EVp-CUrU8_5O-kI<-DbuI7 ̇K-HMU%):+f/^5sͤ/բјa3|4ep tWZRX0o5iJ@wx0>\jR ߼]zջQ\#ۮZ![{Ѭ{hϻC> n*q(}jw欷z^?VOZRӦ M "MaiuIOמezTz4jwPk*55%k)Gg^1̅s~.S{jϙ:TLU%7]<-uqWNir_u|Ędf& קcvӌS˶[^s7= gT `x(P-ȇ,Q )|?I\"Ç[i7(a#.sѲvS[{F+Lj*Nɡ2, %GӊiÝuE3`3WVJ%AH"עkD1_:V!9oW&?uZA qШPawL_?vے*:ŏ;%7z tkg-d% İ<# blA$e(Y>%F'r/N-K``oO:t?@yR8U>NO.(Zw]W`| 0$_vdf}Ώ\#r@`ڻ2Cq;% ~f%dx/->iE#5J~k+u`&r9s=!Wk&[7>z'WO\X쟼zy! }cLDib؏oQ8+NoQTT 븢O_`Y`5@FWƞ5 N,Ȉˏ/g1j?/I!KZR[XBW̜0.a=]jzK[MN_K̨`uto c@{@ &⍋f3ܮ?XC %p] ^~_I՗,7Aּ 2<Fþ̳r$2kw]Q K;Kq4_SͼdsT*X q80d `]]U.-%9/pgM"V|9(ĿAʮa;[9fm7sv.ŻRM[x'RgBClћ+n|kpa0U0X˜СGC ጶ*zʼT8Zt3`?Z=z p0gSWvgiȦrt_h*dsnJق:N3i=;Ǻ&{~blXyXx W@ZaלAPGf[k{ymKim'.+ [MЈO{1Z"̬骰ɠnpMnn?~Чiww}B.[Vmaqn62UwPL}!N}1Eg 2 C)Ln+!Ѿ`v[+qd:#yUZ=ȵ{EfM'6X/'}ee>S0JXťvI^ _\y7rYpe,(#[LAkܴ翖crVY!n;1pIy\Ͳ _ЮWaL/y[=mINU>eW1^1۹b첏G#:^_xk-ۥڥnS qu"ff\$w"3"/jŶ5?(<*ٍs?9!jvK='bfH 5u_VVLN4ʖ0Jx".=)V._œF.r;jYYg0x π얗Qr&WeRb+Vg_(jyPb:WQw[MNB6>^VTr>TUDɶdƔrYZ#p$R%=37h JD%׎j^L oV,C8=[WyX@ #h}@s*@.@|U!8 r1/S"wE f }SP(;W8"zij)@ӣ.vKwhuCfl*A$w)ǼDuL'ߧu[|7EG`G~n +Zj .@|O֏@W0>l2e)ֺ$c#Eʿ8bޭ̋2J_2`+/:;|s3zI+ $d~f 2@%ƒǫRn3 er0R?p*^ȿl=vCOoz95@S|g:]W ੷ 0l~L ;PaPr F2 eKfQrx$5*~. pXb\ޑǭ1<`G{GmmzG#(wȅUɄ+`as^P=>Rl@0Cզ 7#@ %zy>8\ݒb^Zb{eulo}C ;'{^^Ώ2ӫ1zv9&V.oC@XYR @^@䍬',<*ZޟE#n}pM`W\ afЮ\[o|q9{ƣ5Z uy%p8N7 5(ST!V 5.T)=wOT¾gE:N@^ ݿ\ut8ů%9uQxtڵh|:[=+,d]*/PJ)ḰU5f=~ls tA~2|*`}V'%g/7Whzi=$pmp>fk!gI⬺x3)bsVzuU ~< PXݻWEQo3F%X6A6^^z?EueoVꤷg;-[nqýf)xcL7~P`{d^WsU)DoKuӪ?+]W?ؿ?r67$XwSIhL5nAoK~7#1hfhAZ]!+XSnםQJu]<h)DUo] ̱hC. 1K@wϒqHzBoS.^<]9T2mc{$L'}<^!iM͖ϹCQZ6E~ynL0bJ{!@, ah:d@km_diQ KỌ -ndg9hz MK}ԓn@ejS4prUj#H扞λMo\P/聯/ _NBE(U@VۏdVݘho\~ye9}݃1NjTF? 岶tuCվ,n*͹\,]ӻkgwi{̈94oxCXܮ/y^?~h\PsfCq?Yc ?K? [IR6-$bu2CݻҢ2 I_V^W;sLĜ:s^96syXş7^@ &g5rǧeip*5Yۿ/o$]/giUk[dZuZmK(w q#,#20~ɲA &7<|O+_oE,j˜?\[P5F/TvZx#wa [IndbcRJO4ҥGT{fX$[g>#_g3Z+er{0#'R*6*+p7Y&$j֝IT,ٿb8TGKW ty%}:&g, o7Q>WB1-TإZm>L[[gI2Jj>gQTϮ ) T4Zy7)% dj{8>m;wc\! 9J% vz\t#\~EWŠUuvm%v.i&rivcMff^ Cاw\29LMq` /oΕM|,V&WTدjLmo權Ie&ݒV`CM;z'0v.Sp^QBW6"N8nO/gAdp) ?k'љ\NZ;Y&UG&Aӿ52'SY#34V;;B-FmTKSbL3a*7ͣY$9y2S%*V1w^^4 h6=Ri=u"Zcn4ޡQ.uĴڣV_MÊQ-?XGE-SƮSϺisژ#ND~s>wY`tOR' wț[m6x&+.5]R_1ldRƣ V<;"^v+Z(w]j*:N^bt“߬`zC-f2MSoe.t1}z+t=W;T>hPxz }H|1VRj[MS6qUp* шVRs[S&{7(h N Y44^Wv)<6&M'ϳqﲵ!%:NjW;S(~ |Ŋ:d[ـŭ1%A^t  v / ΍5;;!vv)7H\i"V-k&B vp+m'[lڜnad+w*/32oCgEa%bPBqY-qZ,> M%1+;D$Ö2I@@ܽCC[W!{ҶG~xaAvoy?ӯGHCqY(s10.@G5@KбBĽbYVK:H~q8^RHH;Ri \H)A5_07Cq (_zdq.@y/h"Jruܼ bN  >t]N X7>h!K]8<@DC߆IWf/ݞވ~2lsf k``,Òw4^jfNvecA. i )}JCӅsXy9Kq|ǯT-T>zH;7$8V/7aOz>tL}3`X=n ax)/@%O!O~5!΋ %g~׎{qh/u[>`ȷ۶? @ *m(u{/tA\τBrh:f \;9 G\RznL:nY_wjnNwSAv07s Pe>Ywƀ܏Q't9ay\]?лEInz;sE6l됻B;H垅5z{:ٱ̫ejhĽ=?ٻ<2=_jKou$%֏udpʮO;.veoR<=֝ҩL[ަr`F`b;ts2;x{`/s7~٨u "X]'@*$dRuCJkL/# ?:-ڡ O㇣I$#K.<'T bm/dn5Eo*޾]ӄI  ]q@idJ{sWtx ֹHxIjc mhUnpOSKLf9@IZﳵhˉ` Pmcw/NPǫ͇V9003>{X*NV[8#/;-Z~]0z 5J%2XgxbM;{v&Pք cdMQlih9wMEk-8\g{eJ /7 ~[tVmfph uz% SooӞ ~P(9Qn>h7fknׯoئ|mwѥv >z V9sg;7:{uS̏z(}skk@s]FAW'ZkښWWROp[;mT{Kfvm}}9*c娝U'X߅*Z&U$ 㴙wVOsGI=D*xflJ{Cai5E&S۾8_baIĂWN~HdI)0df:|Pـgʂs#F]/GY"VEUl\[!Z{sP:^Gi4/O.y2iY+4Rhʝ^@: ;j!QX6_"&39:>Tgg_w`E_kVEc bxCe*R(!T>bEoYg =zϘUgmp3vJPhpwTV:}'{6ibs(m7;?M}*N˼B`#,.4C{PC3jiL~S%93CvΜ֗l֣3mɿf2wv~b޳˙Ipռnmv~Y^UɞIB=+1+>h'H2;1Lm B`eZOjT~7Rۯz*.ixJ&,2p#C30wNV9vlnd6Lيs5~w`]qBļZEFa3eV>{ޤwG :ݫQgץ++YW@+*ʴ.7DzÙtx Eҕ0؎[+nnz ~qM>ň-ñk=Ä#*Qj٫%Dҳ2V hM}M#A=;|z2DiyhmH߈a:oj8zSJ{ 3^ZhִfKV`9Mt]ȺI1+`z5tR2#0?̶92bWdܧFwsey@m7 vnR4q47~AM2ht1q$ mFR@OO֪>)‰ uJxQćh 0܈ީy]N:7j/v7-u"+ .W~5r~ˏ1yh Sz\8|y*yux{]i-Yu78mhr=3l7l+^wq˞Emuձ) V8!?-+cYoѱt>% JkbuK7^2dUz-`1}4eҞgC`/Ӿ ϻ[}^N}-[}ĔҰ+1!ְ;aBbs`o֔rsjWH.+o͐=ONY|iL qTR9~م]:k9Ͻڝ)Ul&T1e[Lx^)\s혨2a=⍦*fs)%ElSA+,,W}R_υNE,7"Y$_U= uMQ;ݷ{:QsTi1URބ.]2\5#5 ^ԪXo87 ׃^iOܼY,wM?X/ Gb6gZ|yS t2WƋh^[?juFe#WT#Uѩkty,IO~oz`iO n 5$ljdLvMwD7aͫa]hTXZoav *[H;#I.ٷDxDsiLBYw(Ϊon*{z:-7 j.H5UNE&T?}z"%z$T;yTgTrZ,>bn9`>| W¸$=\.2/dc j%9VԤtWgfg4ZT>G UrKJn嫨64;y[|O+3WR49n*$Fc$ Up!a +2 Wuu? zd?ͅ)ڗ-1W=s]U}Rd>TbCp{FD vJAC/]*Tc9Z4(pA\:lC.0`gwm3PW)tvں{1nrn5Y rS7$3:-z-;.ƏgTbZW$: ?X:jn}[MuLu9byxHIJ ξKA i=w#dAJ6@j[AsgRrԲhCL}VCv>ĜpwN@)9$ L =tSPHv{VR!H). ] M|&+; AxtChzc= JF{da6 .dw3dpqUR@j - >(Յ3Xi` -('b6@ - ݀:X'^|F"8=O6TЃRh!tQ`T9:@K WJd$ֿypu̓/RwOw3PHP=Tx0xel8hOvʤm>*мG}/V( 5=> eCєcUU'r"H,NqqgŐAx8:]/G%~,;mD-$mͺu̫o62ŕ+cr,~[’4?C<@/e4g~1̸܇NE3>7@Y$0TN\h.;6ΗDU~J#4n['4€|\Y^w=UcLT4nyRoiwݱsE-N#$T0C iM [SBy M-GN뜚IKZ^~T{烟*v[ZIz)}VͻX'tJovTn2.PU0+4gD^de8}V.qE G#Rvg~Y8&:[=7spOiWk̼4ں])W=-wmr." 1]fS},x*ᓿJ"=?؟ r,(R4;o_d?iQ)ĪGqkzWn_׉Lڃ\+L&{bW6SP]07 !/oVzM1n qW5(DQ4W .Ȑ'H8¤;&f j`scR|)z^lZ8:j(- ) R17.,[46>f4i`W/p; m("JrksCvAEE䥎1Zo7ŌQ,֩ 8."g;†QE.b_o@]Hf;eTT?[^.KRioSQ@N,徦vHW߲hS:jY:$o];jCy,h'v>FcRM,( LNogW{8svKPn7@"G[D֫ ͷLɟM7Iu*ή//'U|rn;*h޵'7%쌪4/i)sOy Ӆ8q24_Jp/E?6t?֥$}Jg'&u昽!|XV~[tꂜR|}Q$IEADńE?z}z{6*0鰊P`LAo{.m~mDFѨ*#IfғB%K~BR'+H+FUEM+{3b%ߵ*on48?4+>y?-Z:CO-ݼqqq :˟?0xU< F}y/jg3ǻ4do:zDnky I5T NXH˧aV4!k],{[`4^hiЁi$90&[9v5zJ蟢ֹpyٴL$=:1. V,P}`8Qɬ0%{T^ qnfXUK/sIŖ2 ܞ $Fz&8Ťu7_e)EGf#t9?4wӲd-}G?(?Zsμ7l/O^- t{P,5egX7ήXcEM,#plH3V]u 0¸o$U=K#!Eb u [# RQ'YͰ5fjڭi)ǭAՋ.֧|i|9)6(15xow㯮ӭ0ՙ+E+} kNp q\cbBc(#+ iжr{ )R2-Q{2صLok ŪQ}IaMYsxZbN],4JjmQ|;Ć-ͤ,^_^s~gl%yٍ@ xٲᵲheq 5n﹕KɆ= l'Sڑ~3h7Z6.(qo118kvlTc u+},ose,Υ)BֲHzI^mF^ijc HEaB8YMI!?)1.Qx Jn-Tjڈ/~cZ)zdáL<^EنwDž_̚Q*(2*1AT.w/üK #1|ʂ0O%^an|3T?!EizDaI%Jg:J_h 8͢ZKcTOZs_>( Hp*@.Nҍa0wc?1'Z2ϵ﹌r<lLb"VaX14FC<eA%~|Y{+L12dA^cc$7c4w0}&cEM2`JÕ mו QG>pP˾2nSsT/1 93'ߘ:] E,k w=ET@}8o<їu[w nՉMg;nB{tXt~#j!bTA9g/2F(ř ݾęr} Om}lЗYχv<כxyЃ>A=;{m?oEM#$'^BCL3z~'y,/_Ĉ~?S8ӷ|N >]f'Yj50>4 'k6e c(;lorG~54 ިת'ry kq .#h"$[q,rg%?vc9T{B"LLr/,FfRL^vzR31 l~mK#|&:>o|<{yQ[a6w T_u|"0ecʇ ZKW:4P+ǿQ1LVt\JX9 ʓCNJfx@cZGz:q8,yW+%h@˧-Lȋ"l{ai]?[m~>+ /b "5cp{]ܫ~Z?m0;gwmss_sw]hUo> rEB}]t- =cv:wI'6&vKjNZ@}3IV~'g&cssބ秃%^+;B2-ݠʋjik#X^,.r#<':+sXhIyʠ1͡FF1f*6>|Nh*_Ju}Dcl~#}.O1 >.ZN ֧3,N'<18Y%b$l,hvxz?PqCښ䍫k2$V p з}<4#uS'=$ƛu9'P|-/H3Bc/9/<HnfW繃ױ]0MCyAM &Ie+%/SK-Aag]\p}9QX?g[+yde̪1&OHdŴ4z.(=ѕHc%Xkp=hp5U)jɢO~\LY wg/0qkų;N‹xOFH>a)y\,utzSMs5C'WDe0⋋2.m?d/[zR\$x:|z a7V_åuݭyEi<+|XH6v\x`븚s5ݳtZ{z)NrN;t_~пq£syʔk=Y7k^WNs̾iC'+h]qiGaX$Ude->qS-W?h/a.NGjJuV1.rOxˏEJ(+(eB" #.gW6Á.;1:^Fz1fݧt觛05L>9~lZ޶ۘt;Vկboy9`^"'ϬT!MBɍD"z S}_]6S?_g6.8邲 7NFG7ld4 1>y 0Snҕ'V$C\vp{- gmk ۞~kU-^/9p.6yeBzXޫ3o$qFTt,/ƛv>0x'~.5g'-uLWVφR'SA틉DxUImq^8C3u2~m*9WOcu몏0x Z_EYlߋZ)᫬u+\*m ;ha)SSDviKEatRח+\s5C vfQ~W ":mJ 큣c;;cj.Ubxĵ{A/::HYolpOeݥ@7Vɖ8x%rXԤƒF[M'h,s'!DogC4[fO+ j¾^6w骿>kw y})2`4()ŨqX.;t*agVLSt0W Mf%ǑO+ԭW-{Zl, $춋L8H<VM^Ck08ڄZuZj/t8YukK2i[N2R)ɐnˆϧX^U y{- 40S( `;7B*o H9fE JQ lC){(y%F4F,?JZ&Jt#|I QR5@%YpGs%T(K=VF з Lu Gwnu_1@~LbxLo#Tbm19vbǭRo>>1Tc^mV<1Dcl=jOV/&?Oœd_ܦ4A<~4y_~п y#`_>i JU-F8 };] -Kr>QG'TU|Z} zw 1ƯJqo%`ruzʉJ@"FA? t=( g^[%W#|zv2_GQIuOk/+K}yեfpzKى>ЧC:&d(렼7ۅiZU&ـrA"bOk["A{Bs;ms]M}#} ӆiiZqV2~@-/p~A"LxcA m%iT /xthc/ۻ?mkS{=eޮU8.|JtY =K-ue/3KwxapT]'2S@/.V]> :RPx̴]twF&x}ڴV¥6\JP'?3tf%\ 3hy2UnLʹVqk˰h"FAr:EߞO{zkDz<'*Nt*h۞k;Uް65+b }cv<-FS HZ\T]ccz5<[0S:kE\פZ/bt1 M+m[L/1? _<[mAuR_ox}WE8mZ8zvh;L;A{fnLje9mba)$QTkKXDZ<>DV~]6a{j7 gի8- #e?r84/7^齊نy١GڒqM~{lgY[rWo-^fvVvz(|~ОhL/_5SW?cO7 +y,u[ѶjL0C4v =tkRA^vF:WϬ˞8ނxsN,*U`tC/,ur1+6S=n˜MfZN2vaU,fm[I>Wvւ&NObFWmnTPŗH|lJBMvP\Js? kL%lh7 -i>LyOafCw-kNgRm"W)s"zQK D#S7CiN D/V?As齗(iddź=Y7~\Zۄڛ(?L /'|JCA-cR=SGDžԂGqAvv:6ۈ~,NO՗Ux߯GgKpOVZ;wӛ'_&H%=|+Q4QIUYvnKh:k;Nؤ;0KFϐ;0,v%l6}x^Tjㆇ&XĦڽ{9pفspC_] /n!Oʽץ2HS [_T4b'ʐzw/O|x-c%诙aYc̣yF>yb{y$=, "seakiB39^j'LpGsI/jtvWVܯ]Qmq627IzөϪJ3cpW~ZZY/gc!/Y \ jbii6RTuXVh6:M64km(ymӾܘfEwNVZv(g'?-(IN$b֚ۄʸpmGMIwS[QNKTJB3[k USv@JJ*;U|7jP]fOFj[s9Ƌ)Pїic!^j^@N:_^@ϕ 9LhxR[_ 7@4LR?K:i *U^m9'WǾ\me0%J+pqŦyNiwMȝTmaV3x {3yYq0O!iW)ZB.3JFS 57_!/#vw\˶++l Q3( d.W-V易$7y>B.Ψm}F=R4gvgiPB@C`jA|>j+1l+V N kLQ,A5S6; =%J0D 9r@d1.ChVk Xx릚{vnZV>Ģ8 6?(v;s<|>ngtka3?yӲYvR5_|أLQ: 8"(*N@sgmâ3=jlw]KGzg2Z;Xhz~w#|S5찶N&X2M,'g7|%`}EE9ۛ0zA&LPݺz?(2Fs/خN5(:*ġeubi؇/+dNP$e!'t3́Θ| QSS+NR8:}&c*+lRZh(UW׀'0,KMVJ9cpX :ԣ>; WFUluœ- v^԰44E}Rkt@wRm_D, y0A֙B&j^ 8 0L˿]]a@=J3JŻ'ŋV+;v'Ȋb^X3 yD@ŀ^^(nM/8J,KӅ@ߣ6߷}<a>wLn(}FqpF:X.zbW!OxЀQ|n0ϩŞD5-A?6v!)M?Hl=d(xz5J%6E,MM(+@'̡0wLʂ?d7T_1ړQ(]U( ({(% Ίc~k?$Xh 񨯑x郁ߢy&{[.WWX;Íj%C!%bJ I>X郹"z.b&=uYWkWhS"?|Ÿȹqda vNz9S]0WyJ3 1ޅk=?F*{p#,K1br8}UhujlJl(of؆oPq {=lKkڞa{Os^|'Bt1 8Sϧ%8SB8Lj>vze{э|gۺv зuޟ0K^¢otH8\3[qpZ#ezܗ˟_bd}Y䭗:lJ薹?" &i|,|VKF{nr;!VX-w2tnjNB{μs3yδӝ:#]Kx(Ǿ=Gp.q~rC ~''vMũׯ t>JguCRb;.cwgov6yShTv9\2?tr&f6϶/q}>Q?T}_g=9GWSp 赞^\y_fy6W3wm_N-8hϝ4/pg򴾟j-yՂy7zun峹ӵ~пqy]@M{Zo}|Xߩg 5wZP8MB^XT q;bw`cZM[Sm.L=f7<lħ`/g܃roQMpWv8K*\,pkط 1Nj53cN6,ح1z@:X<VfoJ侍V&]nV__vs]>Kkz>-ddA,GRyȸ@ϓ`C[r93'ǥ!_F^3ivoWW[3^sI]={1zX]}__6Alb~49{OwQb7yTѝrŠ|\KU*{N1&r} /_C۟g|N}m A]hU D-B ^u4ROrxO{xU^џG[='{XVNrjQT[|vB_4٫m R*OIrJ/YԎz>9#GzmZ/؎\W渝۷Gy/mTߚ;c=} i̞lwt X52JT,&K+yLv2!J0x#G4*y2ތs8'Xl56v2J]f}+z6v*⽣cPBJoƣN+~[{NB]j5,~PAZran/wgϳ.v[ZaØѝ dihæt=9L9bVgJ!zʊ`*Cە/M)OKN[Ui[īߡn@',KR72e ܓߊ6457pu4xdQW(:fͿKL"A,RowްvJŹ<$4OPtDXoAͨ)d:8%/s4sdc5 COzHzvI\1L=/ ]zr':}N1ui>=iSB VêZ+D} Nl\cbxᵌt.̣(TNG4'ҬieDF\ý}&O)(WsX@]d~PeO}N xTڬ IJ /RL (j[MM!6O>T3HĎ*BL 5H IZ3!M~@U=ש9&3ۘseF:~IeO{/]!o k9"A;2{Vlǂ}ļe*ldCi+ܛ;9Tϯe*ZH/Ze-\Wr[F\r/_;h:ݞOa<@׃Ö2}*}&nEoqJ7N۔57SgF6:\K"o@5S$NnV'Si]޹0Khyѥ2ZʬwXYwzuqfahkv>eKBޫ _VmL3(F]J4&\ {ѮlU_DkQ}C. c>=ΖFZg{TTޡpx<r٭-Rv-9twDc0ArbNKV粍TKkz ʫ,)U3%)JYk|^)v`(zNʵ,vZ'Y(#m.o'#_Åmܔrv\}w˼D]I4|mL`KO*ЋͰ/Nam`.@U1t_dwɪUW;UK'&Xeʗ;ˑluzG^cIT`aweC'Pi3+rvl,z" h]P2W8!S&o@ ftA??G(lv2 ;PP\-Z2X=4QgMP5Uph2Ym=*h1qޞV(P,k:>kƧl- UK4UOߤ!Ʒ@AL LbnbH sJ O-c@|X60l9ru0K+\2}A~ż7soҋpdSxfs-~ 7o8P. Z.( k+#(J ~@gkǬGHN]oAٻP^Z%I]~a%ϗ'|4W@5Kx6>#B\ϲ1ϬcnZ\9r%&J2m+CA8bpH7_$l([pWEr`ZZQ0* PE)HWQ A&R(m_7Q|=xN>U(&(: 5];(raNg{( @]5 G9'r"UD1翱ךoksCe袀Qò/c#qj8Y#Ƀ-S/~R-kTXf}X[$}k0}JPX1}3_fs a3% OX^'6%Uz7"O^<]\e{rE[H΂ז3dG󽯖ӷw7黕JMZ_JmJSג'=`{p:\~|3m q-ѭˋu'%mjt?yvr+?o _ٞE^}ڿq+y%<~Z-Adz]:yTiRweTnc}Lr{_履.0jixƨ:{wY W}揻I=NebݿxjŒ$lů ;rAϒbfC8BnkrNyJE4S!l,qQ׸Z҃k|h)voQ;^Ta,w~n'v-sI%T;:q 딍ż[y:_>/h"_ڄv}X_=VZ^z Y{vYYCX.|gl' ןcrn0kLX,GŗmĸJ.ŲMys;sclKaۧu]ؽr/^>H8mCOK@aRX::z&L(Ft؍ћ J 9sqɴd]A.u}G;7zld :7Ccad*ț'_(@mwR~)z랉LѹE%kY?,=}iSвcY2׀4F$ &ɎN7*^udqDۓοLݓū0sa1dr!U 7=İ.ue7Z}im_Nplw|o> *߾U?jeLLKT6;>qG/~"Jp~r~1ۘ_?~pX'PkrT6t]wNĵyOm%3vc3pʫSzx2CHʠ"*#[Mg|[XyJ[\:=i}1$_?R_JiNf@ ‹ DAԙKԾULX\gUK*?z$n_T|l=\jK\L |3Ae|D9Sq%oC#xSeI&ёfݮ) o'GO)ϣU B#vr=hG`6$ j'YT"Qm\nv(%Oj:9tXK.KS//e .ޤy;6ߢ򀠧LVOq_vxY)Zt aѸ;R^5DFOaDI"CD;crs G1[7 {x/X{M:5WKc" :k!3x]*> VcWxdGTWTb\ ~,g0nS\.BDSE)A/e\{,P:둍(-^S7g#||ݡI`9B#|f ˩j{`r) B}8d17XQ k7pP^m[.5،hj]/0l/}FBzYdLZkDhxgp r%%CȢW0kEb~IDpAENɂ[i}DuKVHEf=7FO^smZ;鵼Sn_?~P+ahueyFveDfmJ w=jM; 2U&yPNry6Xoޠ|n=Ud9a1ձցMcP|#_j?B*84i4ɹe`ր~W~ H6' 7bicIp M7A+#}eg-ITzjt٢;UǾNi|ژN[=ZtiIl[n2Fn2C?1O}+ᖵRG]N.n)f!.M"f LvZ|ܙvAVI6kValAGE*8uX!;NVCXr-F6xʵ68rLL@j =gk[{sxlGArv?1 kvk^.uj^l_r\9(rBt,mzA j|:غ|mV}'Qy}x0\Za̲%-͎Fb,EUfؼ8LR]|gM3ď|[f!ylO#Jܳ!_STWfdH]g1H*>\Y@+ОhPPi'j1/1@} @/c<'Y>qD(WVӷܓ`}Uk "{l_ @^Lh+s0!ɚ/ b` {6_VG;e I^G^!厄zhARwWy_Boy*@ΣE6_1 ,k -q`^]*3|?9N rit3?2^osp4΃Q;M_O3M4MIbKҔBa?M1V2كAfcc~)3z*3Lf~+|/LvHS}~\6"T/}΋,,}P3}q,fx,f!j֓<3zFS^wsW2rsY >6a?s=pN*KJYe1z4@Z[? 8J"eϏ䎿?J.K*VKI|DVxnvrU~",VH[{\4}S;?}>}I/ ;Wf|q 4據GpRJh{(FNG36Ϗ41N<㟀>%2:փձpƢ8Ի?^@1(eFz'(}ci Jirn>pώ(y}4[[S<@w~ 3 ӸruiQ >bs .etO}7O1e{KL;ۃq7 ~e(ߓͣuPդyzo'S.Gcpfj+bVΰwujfF!*hzP;xM+ҠȅH C3r5yr[_Xݴ]ew9c?fz@vf·(*Z,hlƪ4P`.ycq\G~@2`IE/WxsA´_u0!VډJaTm57p,zƤy\f3q{~9W8 Bf|y%7fbݴUvaXĒbŴlL"ʽWWdQ&NWjܤ1{F ]D:$:#2{X:=XT~:e[-jkq3QE/a8Ög]_o9Vc@P"0υCm8\Un?,A N)Ƴ(j;Z7n3${2@H ž A^:15YѤ Ն>II+gd&ppF y*=b A0woL+镜^m*6Um l9F]ѸQxW}R?q[NDj[i#B2J8% Gr%euQ(]s?^nּ*YyIUQgZ=žH͎*f XorϽ'۪bБܜKWD\]]XQB?_>?[K]Қ#`;S+i &-=`?I]>jdwqW-e󑽘ܗ;cĕD-3'Ϩ!X+θdBA@ ! ~wm\D_)< =+j Ov\@kH~dLj~A8J ^V q}^hَtJ>]DsRJ&3صZނQH\$'.%lh&:|&;eF|8̂sL+ߢ^q3ɯ%ߓWfxe>̚LR taԧg%EHh叺%j=w{KQBU$'-ab@OF U\JIÂzpۆb A܅xrMJr;i#[TV{{^\W;N;]fzW5#+jRV&KNM@wPam&ڣ#<~#c=\!5+; 9nydX脗VҢZqI/\֞GG Q;>98<ֱzzM} A`ZnZR5?/g,\^Xm j SɏLӅ4U!Ë Udԇu/hʭsݐ(^Ok1\ʰ[p6OXQ|ĺTmu)7-,OmR̢{&{Re9L}7Ez({)z0;yס9m}dYFdSO_JEU 7j[;55Nt6vU(*d+Uͫ {rerbp9mXH(z ce ع-8..%lSO֡u[da! >XPNL>kfy"Ce<~ٰ_xz2P"%}7h+}z>iV4%x9ce)_e4:`ƬAJ(\0ZL%4 nTCmǿ+d=EE[Q'=e3Zc˰NY:jdgg?*}Ig”FO' }[pS77ߴ1]-6lX'FD@r`ޏ3H:7gI`H:s=}uٝnEs#&6x?pn[}[)Ħn^}/tI|hw4Ffչ~TmC<֙de0>?Rpi='ŻrBm^sT;WpYOhl٭/SPϮ6թfs|-Ԋ~"4ުܙc eHU4]w@i4lR}9y޿Hzr^,Z'PAŃT)rrX;}he#Es2ԽAj0K^T ISDqwm] nG6j[@Қd#I炄JsKG,LY5BMč2 8=Ln.ɿ8UƲF<:%e&v~B;Ut ,+R1r~FsuMBMp7v3"oOZU>vw/{49"?k$ڛQo=tzOhA7r`q6ln|rQ讱!iDo"L.S_kgn>縦Qmj"dg%ۙ~4ƒMsʭ^ˢNLvv;`VR(B^;uʳ7}ك~4ne_(re9KRYͷqGʗoẊk,B*0vsc0ȓGzLz&z>V//_ls.}guAκ>Lϐ1_IGm) <$EX4F 2{|]GrG1 dYqhxmJ(II2jKd^37I^ _.㵟ɠ7@1+ŏzXsew@'X*B5F)Wwg03HzJ9*]c tRWd>.D Dv< ? .@5.NbK &pg5SgsyxG /߽+7N﬏i7ḑ[ߦPǨl D }\pn6t+U5 J=!gStF .%洚S;ja*R_w:8T X]m=ǑhW)S YiHcDh4Q:bbb{e`;Ipmu$J!Bu/Dwвv a{#n϶}n1z뷞\8O}񨰗o1uc|J" X6p1Iy=֔ Q.[5iCsˎ>t5<{t9}{ a.d/ g,QIgs\!S LJ6'qYP~ꗇL!BHBd[gl =՘S::2=xJ'>4.5̯pV~DW~hCI{[+nQ*+P#T[2w& %Ru ʞm;iwu|W3cUMgVT?#79- s5>pXX }j5z8uc>_趷RsuƝ3s+.u#9[d@z3W$yX́A<>In`t^AĶj 釳S֓+ zRݣp0۾KmO@ּ[^ؚؚRk[X544lNe-ԋ{kHh_Z}%?W@ָ7yVu(9t޹cw0_jHI`Za*5,oFp7s ly_0"Z{LwIˁRek=()[[O-^zbtb- M[Q $7>=h(. ^vm4JֵfKzUU-iU;PׇjA~YK3x6YmK&&2@:vǠco>aZ 5]\bwe0TI+îHR򬖜嗰0V/.H| ;mSe(֮U,8`(Ѷ@(WxM f pJ%`dg+ih!]dL n Wl~R$U ka?,~v\]#rjc`&oXV~ޔbk⾨YʣHz ھ;4?^0-?`-^ Eye@:s:>1q2%#260!b!P@mF|Hr[TF9k•Msڤ9E-2>)B>cJdUfk .r7@@9zXn!E2:gjT Eݙ̥R‚F#FJCqWJPz?6y鴪^S} qx @@ 5QhUTH 7kf#+Zo D8Ͳ#p @&\dtDS|,y(]nd.ÍNR_4gwN/ &{~} շ DN]r~<|(Ut$Xp9XYNH6\L26wu/BT ioCZNݻconYJC[O 鷞7t+tF0*muM,hngerϷ)E75_Ouvbw`-iq~QY=aG:LQy,}Pj Eb~_\?>"qOo{d^ƭ5gɇ.W.f` giUN'찚2u\-u2k;VmwwEޖ-QA:h*dĦ(cX l9_a{N <~F<ƅˇh﷨Hk3x*`,r6’*Z"lg_05$dm{Y $k`B^qςNo?[q*gAٍŲfc:aʗ5B#|BWw>0:!;3 ztPc_~8o [K|@\k6V \I6t/OfL(>P4g'٩Y5?rE'䤊uPC?ZWX_7 KkY[m׵B>)-E}>wpW3}kVH?OK?+dp~S>-U =cNܷfFcb@;du_Q,iބ&?ksV f6|3D69N>fQ=G7ݢ1o ~u 7MSn50G CLל8 ibmkjjܯz5ZṼrE :A?}eATS;nKVֹ8X=/zi95cV ul.5O>ݩOB[M8XNJ)^RU8zgxX KQvӰ,c?š[pr'f=Y4e3 Ϙ,,VTݙ:=GW<UL SP7uwlG-c e8ܲK.IFa?Vؙ#:Y \&{_$ܸZ1S?yl0q~IM*W%-U+Qi%T ]s4%9)2,; â,u y±?0AӅ ޗSe>t*ܵbtL*GI[x}HgXeUB[Ґu$l(,RjNT)%Z}RMK>lܾ4}]bz7s≢]i`d>@bWZGP&q!Pb:.>|Ul9y>1l,3g _(yv6A7x :hoVZ޸NՆ>WzE4YFD:j)nC|bϱl5ǬJs3漚ELrѷ P3RtiQ}<@Wc˩D&-A4+^u0;'M6xܡP5k!۠+V,pM5'LU|FZF w|Rcz;وBg\7Il5dNid^}חxT3ъ~v:44.#eMIp4*VcUPvU[7s^@?¼>mHbT?F )M͚YƊ~*WXRZJ/a,yLV6SkooZo|䠴jK *UުX)=0A~c/2'%C3S5,mL\VojwɞB^,ǽ]f5/3bY sy_)_Q>@UφTN@[5V8[D'O#<Fh^8)]'(ZYT'_ȶN8q Mi]`վŨvb1VhCT6 >w Kf֮;eћ\20f(<>Vh_[g}nJ 9 `NHQr:p9_\9r‰˕T9t:CIƺj0WnOdhSQ3>в5:8 uJ1v~Hډj#AowD͋|bryjn{niC*ϐ*7dHtdH1d\Y# E'=6փU.RG,I,Y&-E~wWG[W^cqC1Hբݖ֧.qKmCOy}opң2^ʒS@#͑C'ehޔ{´$ɘ갥[_a̱W1;:xNt>鴻Y$0J$"9puzĨL?0>  7K377|H& \JnY{ѹƂ'ճ9ruҷ{G|OD3W4oFCx@1[BW >[x.r`9EQ=5Knaw]zzbIF?W]nD>?xZERdn*2KPc\sapt%%nj4,FT8 }~Ug<)+%6sh5AqEʃ{ B75]XSDjЕiԘErOOՅC:\L4 >۩lmx ζ@I@6!NUQPi#NG=Bƪt@Jd&*0NǬiqr6F671Ȧ3;{zt/Թ8dG;5 ѵA*sŤİմq'^hdY|r5WͬAvy^pWTikw$,eR}lla+6 π_G,'- M wܾϨdY nFl eժZAp ODC8ݴ>)>&^M\\PQ7B9$ŮũVm\V{/J dM*xRN4N2hiU`+I*# S Qhx)Yf |xd\0@h)]EJo Υo9 4 /ڏlo'2<){O>|-_:ifG?wmgzM\%f9̬YݛJ:Ψeǿ j-G&zfG t?2O;:K$1^Ώ88#um)f~oM{R=-ńیP~-姗Nt_BSr&.c}ɒ _aBC-,wEͫ:3ʾOy>x=e|V2-&54BT6=ۘR^gO?Xѣڌs6G<Adf&ŇsVT V1(*1o'>3#|rgac޻!ds6ن}+-a/m98XّpKa6,39^f8%V,Ģf^1a|^u$jr?>q'_af~sg+0w َݛ5ބXmCnN`usV >\ϹR 6˻M/^7 QW}YK3\8Q[œ|3:v)ڵmgWMsy9i4s,g#jQ{lNTgVpl֓y}oރ>\.0kYљ栽Bz%wVlw J6lZ"mQOi䊙#w?ve혻gէ݀E}L}j7?<>`;Si Oswg,; n7DuEE{ 5oM~߃ϤkZc;6[-kqm8_UIVj|e_4*]*d0;}Q~FQ&G'&Jsatо5bvwlFy<ϾfF\,vgCki!ƖtҦBݲ+e6;~5fk427564?8ׁGllLk쪫C轢goXЄ{nXHm|H+自=._*#Ozb̛B2 /=ӵA-c KSOq?bx_XfTZFV!hwM4T})U]*w޼)\2P9TUlF$~)Z{j̚rWW&r߽a2oZʼn?>;z؛;7oYN ֪sWڬd ͡r:v^LQ̌߰KVgU^p k,j9]QWKW-\ҌBtBx*湶b=rz\D'zq`s,: a3ӻ27(Е#9kO1j O^:<Ҍ~JVB<ܼQi^-_)C!~GvL?tbE+8\WA79ae&;58`88gwVmV U6**c "}Q3jTV:xLCޟj^'Dd'}hZE l ;D}lvZ f*m_Z` h#һ8[YԖ!oVٖ6/EК)!ϲڸ- JzUCu#9[|K$Oqxi<&J,$hO>DuO!V:L4" 헀ExpipqoT4jhWl>_OR p*q]rۅ]r+?3gP2EzVObS weqѭ*4ǡ bWr]~i&n+eȹqVIohOt2]8}gggzI_Vyc̆yZtU|4q .ڢF{$@q.Gz%x.6+vxf"1Ct -@, WOcf] {PCJtu|Q{&Dx<_aNN4 ͹kegآjUnJrh6R>Qdh=qdw~`R}īHN% $<[ŠEl~tkǓo}Fb zQvLӐUS Vq:)AhŽ@,2\tӽ~=M0Džz+uHg`' t}r>[$p}=SbZ=Im UoZll޹=sy&,99~5A^"I_Pa!D}O3aDX `Y:PX,PW(YY~O^t&K]ç 9l1ym▹캘E^ O{l; >"MtÎj+?djf"&eN9qj-?Tˀ?etU#* ~EP^?zX.\[di23b?@ =˵[j pL0UN1Sʀ6`yߤR꿵 i4<0-})LH9`(B|E30%Y{Y{7gشƹa+!00J́8;)lحmM.9>)$ಖ 8y:6r=w_)4GnDew՜ xH_ݳqHNax=j1C'%\1#]%<^fۿ5?|;~`?dsCu SMڀߖs R'j S|DN @,^W73mi9eePCid!Ѐ:tB5u .Pi Df+>О NV%+@>x!1)rO\Q1Y/F+'*@qz|M/ۙTojՓc_kUpwș d@>H0  v;C(=RRENg&F,ONOJoz[d.Bý 7jۯt endstream endobj 158 0 obj <> endobj xref 0 165 0000000003 65535 f 0000000016 00000 n 0000045179 00000 n 0000000004 00000 f 0000000006 00000 f 0000046012 00000 n 0000000007 00000 f 0000000008 00000 f 0000000009 00000 f 0000000010 00000 f 0000000011 00000 f 0000000012 00000 f 0000000013 00000 f 0000000014 00000 f 0000000015 00000 f 0000000016 00000 f 0000000017 00000 f 0000000018 00000 f 0000000019 00000 f 0000000020 00000 f 0000000021 00000 f 0000000025 00000 f 0000045230 00000 n 0000045869 00000 n 0000045900 00000 n 0000000026 00000 f 0000000027 00000 f 0000000028 00000 f 0000000029 00000 f 0000000030 00000 f 0000000031 00000 f 0000000032 00000 f 0000000033 00000 f 0000000034 00000 f 0000000035 00000 f 0000000036 00000 f 0000000037 00000 f 0000000038 00000 f 0000000039 00000 f 0000000040 00000 f 0000000041 00000 f 0000000042 00000 f 0000000043 00000 f 0000000044 00000 f 0000000045 00000 f 0000000046 00000 f 0000000047 00000 f 0000000048 00000 f 0000000049 00000 f 0000000050 00000 f 0000000051 00000 f 0000000052 00000 f 0000000053 00000 f 0000000054 00000 f 0000000055 00000 f 0000000056 00000 f 0000000060 00000 f 0000045301 00000 n 0000045753 00000 n 0000045784 00000 n 0000000061 00000 f 0000000062 00000 f 0000000063 00000 f 0000000064 00000 f 0000000065 00000 f 0000000066 00000 f 0000000067 00000 f 0000000068 00000 f 0000000069 00000 f 0000000070 00000 f 0000000071 00000 f 0000000072 00000 f 0000000073 00000 f 0000000074 00000 f 0000000075 00000 f 0000000076 00000 f 0000000077 00000 f 0000000078 00000 f 0000000079 00000 f 0000000080 00000 f 0000000081 00000 f 0000000082 00000 f 0000000083 00000 f 0000000084 00000 f 0000000085 00000 f 0000000086 00000 f 0000000087 00000 f 0000000088 00000 f 0000000089 00000 f 0000000090 00000 f 0000000091 00000 f 0000000092 00000 f 0000000093 00000 f 0000000094 00000 f 0000000095 00000 f 0000000096 00000 f 0000000097 00000 f 0000000101 00001 f 0000045372 00000 n 0000045636 00000 n 0000045667 00000 n 0000000102 00000 f 0000000103 00000 f 0000000104 00000 f 0000000105 00000 f 0000000106 00000 f 0000000107 00000 f 0000000108 00000 f 0000000109 00000 f 0000000110 00000 f 0000000111 00000 f 0000000112 00000 f 0000000113 00000 f 0000000114 00000 f 0000000115 00000 f 0000000116 00000 f 0000000117 00001 f 0000000118 00000 f 0000000119 00000 f 0000000120 00000 f 0000000121 00000 f 0000000122 00000 f 0000000137 00000 f 0000442260 00000 n 0000442336 00000 n 0000442724 00000 n 0000513285 00000 n 0000518896 00000 n 0000584485 00000 n 0000650074 00000 n 0000715663 00000 n 0000781252 00000 n 0000846841 00000 n 0000912430 00000 n 0000978019 00000 n 0000443649 00000 n 0000509238 00000 n 0000000142 00001 f 0000045985 00000 n 0000045444 00000 n 0000045518 00000 n 0000045550 00000 n 0000000143 00001 f 0000000153 00001 f 0000047156 00000 n 0000440296 00000 n 0000441632 00000 n 0000050164 00000 n 0000050201 00000 n 0000440359 00000 n 0000441568 00000 n 0000440792 00000 n 0000440034 00000 n 0000000156 00001 f 0000047270 00000 n 0000047642 00000 n 0000000000 00001 f 0000046434 00000 n 0001043608 00000 n 0000047904 00000 n 0000047989 00000 n 0000441696 00000 n 0000441746 00000 n 0000046740 00000 n 0000000194 00000 n trailer <]>> startxref 1043745 %%EOF stimfit-0.17.1/dist/macosx/dmg.jpg000066400000000000000000022210651517235503400170020ustar00rootroot00000000000000,Photoshop 3.08BIMHH2http://ns.adobe.com/xap/1.0/ image/jpeg Print Illustrator 2009-10-20T15:23:36+01:00 2009-10-20T14:23:38Z 2009-10-20T15:23:36+01:00 256 152 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A755T8p+Vp/K2jTz6NYyz S2Ns8sr20LMzNCpZmYrUknqcVTX/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG +UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp/ /SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA0 4q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5 Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9 IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTi rv8ABvlD/qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD /qx6f/0iwf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0i wf8ANOKu/wAG+UP+rHp//SLB/wA04q7/AAb5Q/6sen/9IsH/ADTirv8ABvlD/qx6f/0iwf8ANOKu /wAG+UP+rHp//SLB/wA04qlXmzyn5Wg8razPBo1jFNFY3LxSpbQqyssLFWVgtQQehxVNfJv/ACiG h/8AbPtf+TC4qnGKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVZNNDBE80zrFDGpaSRyFVVG5JJ2A GKoTSte0PV43k0nUbbUY4jxle0mjnVW3FGMZah2OKo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY qk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v8AyYXFU4xV2KuxV2KuxV2KuxV2KuxVivnXz03l280f SrLTn1bXdekmj02xWVLdGFsgkmaSaSqoFUjsScVYj+b3nj8wdH/K641iz0k6JqXqLHdzfWoJ2tEM 6Rq6AI6y+ty4/sla164qFXWNbubzzl5BtPNHl59O1i6vNQksFt9S9WKEWtuj+pJ6cSCb1OfHiaUp 1INMVR2o/mrrK+ZvMHl3RfK02s33l8wPOYrqOFGgmgWbmTKoo9W4pGvItQnbFUA354XV15dHmrRP Kl7qPleCMSalqLTwwSRcRWYRQMWeb0Ts7Ci9aEgYqlP5667qWpaV5NttM09dR8v6/qmnOxa4EK3g lJkispEKsVSUcWMh2HhikJx5L8zTWfnHUvKg8i2PlvVzpP6WVbG6gdLlYpRBDG7RW8KqeTkBjWg7 YoUvye86/mHr2o69FremK9hb61fW0l99biJsjCicbJIUiT1lQ7erUVrWmKlH/mnd3Go+Z/J3kdZp ILHzFc3M2qtC7RO9tp8PrGDmpDBZSaNQ12xVC+T4IfKX5uaj5J00yJ5fv9Ii1mxsWdpI7WVJzbSr FzLMqyU5UrSvTFUR+ad3Nd+b/JPlS6mltvL+u3N0dUeJ2i9Y2sIeC1aRCrKsrmhANWxVCeUI7Tyr +cGoeSdGkI8v3Wjpq0en+q0q2l0s/ouiB2ZkWSMh+NfCgpir1XFXYq7FXYq7FXYq7FXYq7FUn85f 8ohrn/bPuv8Akw2Ku8m/8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirBvzQi8v3VtZWeueW tS123Znlgu9KhaWa0mXiFYNE6TRluXVdtvixVhWp+VPzA1r8g9c0a+iurjVZrkzaNZ3rrJffUIbq OWGK4cMQ03pxt3r0HXFU11e41XzL5/8Ay11+DQtTsbOyl1Zb9by2eN7cy2saxmWnIIrsCFZqVxVN /JGlanbfmt+Y2oXFpNDY37aR9RupEZY5vRtHWT0nIo/BmAanQ4qkHkLy/r1r/wA42Xmi3Gn3MGst pmsQpp8kTpcGSV7n01EZAar8hx23rtilR1ny/r0vkj8oLWPTrp7nTNT0OXUoRDJzto4IKStOtKxh Ds3KlMVZFDpOqf8AQwM+rGzmGl/4YFqL4xsIDOb5X9ISU4l+ArxrWmKEN+V8Wr+X/Mvmzy/qOkXy LqeuX2sWWrLFysWt7kIUUzA0D/u/s4qjvzN0TV11ryt5y0iyk1K68s3M/wBasIKetJZ3sXozmJSQ HdKAhe++KoHy7ba1qvnvWvzEuNGu7O2t9JXS9C067UQ3lwqObmVmiJPpcpKInLfxpiqP12/sPMPk DT7/AM0+TNQu3vJAx8vxReveW8o58XLVgaPZPt1UjkAaVxVBflZ+X8ul63qXmq80mPQ5b2FLLTNI WT1pYLNX9RmuZqvzmmkozfEeIAFT2VemYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/wAmGxV3 k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v/JhcVTjFXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/wAm GxV3k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91/yYbFXeTf+UQ0P/tn2v/JhcVTjFXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqk/nL/lENc/7Z91 /wAmGxV3k3/lEND/AO2fa/8AJhcVTjFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwu 0/N/yRc6o2n/AFl4QGKJeSpxt3NabPUkD3YAYaVmaOjorowZGAKsDUEHcEEYFbxV2KuxV2KuxV2K uxV2KuxV2KpP5y/5RDXP+2fdf8mGxV3k3/lEND/7Z9r/AMmFxVOMVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVUb7/eK4/wCMb/8AETir5EySGT+UvzE8x+WnVLWb6xYV+OxmJaPrvw7ofl9I OKvbvKP5l+XPMgWGOT6nqJ62U5AYn/ituj/r9sFJZZgV2KuxV2KuxV2KuxV2KuxVJ/OX/KIa5/2z 7r/kw2Ku8m/8ohof/bPtf+TC4qnGKuxV2KuxV2KuxV2KuxVJ/OLawvljUjo3L9JCE/V+H2+o5cP8 rjXj74q+dDeeeqms+qV71e4/rkkNfXfPP+/9T/4O4/rirvrvnn/f+p/8Hcf1xV313zz/AL/1P/g7 j+uKu+u+ef8Af+p/8Hcf1xV313zz/v8A1P8A4O4/rirvrvnn/f8Aqf8Awdx/XFXfXfPP+/8AU/8A g7j+uKtNeed+J5T6nxpvV7ilPvxVI8VdiralgwKkhgagjrXFX0p+V0nmB/KFs2t+objk3oGevqmD bgX5fF40r2pgKWWYFdirsVdirsVdirsVdiqT+cv+UQ1z/tn3X/JhsVd5N/5RDQ/+2fa/8mFxVOMV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUb7/AHiuP+Mb/wDETir5EySGReVPIXmLzLKD YwenaA0kvZqrCN6Gh/aPsuKvbfKH5W+XfLvC4ZPr+prQ/W5gKIf+Kk3C/Pc++C0sywK7FXYq7FXY q7FXYq7FXYqk/nL/AJRDXP8Atn3X/JhsVd5N/wCUQ0P/ALZ9r/yYXFU4xV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxVxAIodweoxVglp+TPky31Vr5o5Z4i3KOxlcGBSTWlAAzAdgzfOuG1Zz FFFDEsUSLHEgCpGgCqoHQADYYFXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohrn/bPuv8Akw2Ku8m/ 8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVSfzl/wAohrn/AGz7r/kw2Ku8m/8AKIaH/wBs+1/5MLiqcYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohrn/bPuv8A kw2Ku8m/8ohof/bPtf8AkwuKpxirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVSfzl/wAohrn/AGz7r/kw2Ku8m/8AKIaH/wBs+1/5MLiqcYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn85f8ohr n/bPuv8Akw2Ku8m/8ohof/bPtf8AkwuKsV/MXUdJt/OHlq11vWZdH0e4s9UeVo7+bTlkniazEILw ywl2USPxQk9TtirHtK/MTzpZ6VqBv5bdLXSbK2miubu1lkupvr99cwWUktZ7ONFMEEbO0hTckswH QqqWP5y6vfNpEgOnWDX82ixfoq4V2uriPVDB69xbMJo/3cJmdB+7b4lqT2IVX89+Y/N8HnC60i11 aG0tvV8uy6XaGJklb6zqfoXLmRJUeWGqqky0oQ6LVd/UVa0382PNVzruh6XLp9qovJZILy4Zo4En aHUbixlNr690jgxrbCUxIkzfFxPHZmVXeefzE8zWWqa5pmm6hYWP6MbTpo5/RF2Y7aa7toblrt/r CLAQJ2PB4l/dgsr1qY1UutPzK83xXOrQWZspLawvVRpJ0urh5fr2vXWlqY2a5+BIxGjqg+GgKrxB HEqpaz5884S63oszTwomnz3dvfWkK3MUN1Nb67a6QZQI7hGpwueaxyGRAahg3wsoVPLXzV5jk8gX l7qd/Be6ra+YItPlit0ks5IEGtx2wim9CbnUwsGUfDVGUOHBLOqh4/zW1aa3tZJNV0XTWvFmkulu oZG/RckIHCxvQt2jNcT8jwNI/sNRH2wqi9B/MrzTf65Yx31hBZ2F3fWmmy2LRyC8hlutFXVCzSmQ ofTkDIV9MGhHQg1Cpdqf5iea9O8w+bbXT1tfq2jpqWpyC8FzO0kenWenSejEfXVYfU+tP9leIPxc a8uSq2b8zPNVn5h1mxu9U0y0tVu5Gs31C2YfVoRZ209tAxS4hLm7aaRYmO5aOSnLZEKqv5i+cfNk Oj6fcw3iaFBq3ljV724snQi4S+hs4po44rj1I3SaP1GKcRX4WJDbcAqhqn5sebtGVtNuILN7m1uT BPrDLHDacTZW13EjreX1miSyfWitTcfsEhDWgKoz8xvMvnG50/y6mg21yuqR2w8xarbadPCQI7ZU K20srSxrJBLLIQwTkXC7KRiqD1H86dZWfW5tLOn3lpZpdSWNkI5TdCCLRxqUV7Owm4GAy0hYBV+0 KNXYhUt80fmT5huoWaC/t7q1s4r2db7SWnt7aVjoWoXH1SVo55HMltJAjMVkUglSAjDCoZOfzMvY tM1u6nvbCzuNNJgt9Fkhea9jpOkEV3cF7uAehNzDBmEagMC0nXFUjj/MjzRqV7p9zLPDDY6jD5Yv bXR1WSKf/T78Q3bxTpPE0iI1FcOrIeSBgPi9QKj9K/NLzfqs2mWlvHp8c+pXVpDLcehPJHZPdWl7 PNYzxmaJnurVrNPUIZRR91TbFUy8q/mTrOp+Y9J0m/8AqKfXI76OaO2UvO1xYXVzbtIYzPztoXW2 DKWSQEkoXB48lWMaV+YHmzSrbULi6vbae8nmv7u2ivEumN81vqFxZpplhGbkpFKq21f3aHZ05ISG diqjN598yLpUOltqAtJDqqvHcTvKby9V/M81s8FrIJFCpbwwqsikN8DhaKtCVU5uvzY85PrWqaba WFlbtBqUGm231so0kXrajFZJJNBFdG4dJo5TKjmKNRsAZAQcCpj5p86+atA82X9u95ZyWMelWFxD ayQFFSSe8e2urssJfVaK2WksqrWicR8O7sq6988avP5R/SPK3u2t9fsLC31KxM0NreQPdW4M8Ijm duB9VoypldGKmvJdsKpO/wCbvm200azutQOlpLeafpOr+ssUiBINSS4MkEcEt0huJ1a1+BVlUsCa KzKAwVD6n+bvmbQNAv7q7vrLUNUt9U1WJLJrQQn6tYTHjCzNdw+k7Qsrx1V5Cm/CSjNiqeeR9Y1i 589m1ub24mtf+dnpDJI7J/o+twRQ/CTT91GxRP5V2G2Ks485f8ohrn/bPuv+TDYqlvlnX7Sy8t6V Z3NtqEdzbWdvDPH+jr9uLxxKrCqwEGhHbFUy/wAV6X/vjUP+4bqH/VDFXf4r0v8A3xqH/cN1D/qh iqU3reU73VYdTu7bV5riBkkhia31n6sskRqkn1Xh9X5qdw3p1riqbf4r0v8A3xqH/cN1D/qhirv8 V6X/AL41D/uG6h/1QxV3+K9L/wB8ah/3DdQ/6oYq7/Fel/741D/uG6h/1QxV3+K9L/3xqH/cN1D/ AKoYq7/Fel/741D/ALhuof8AVDFXf4r0v/fGof8AcN1D/qhirv8AFel/741D/uG6h/1QxV3+K9L/ AN8ah/3DdQ/6oYq7/Fel/wC+NQ/7huof9UMVd/ivS/8AfGof9w3UP+qGKu/xXpf++NQ/7huof9UM Vd/ivS/98ah/3DdQ/wCqGKpVK/k+Wz1iyfT9QNtr5kbV4/qGqD1jNAttIaiKqVhjVfgp49d8VTOP zNpEUaRpb6gqIAqr+jdQ2AFAP7jFV3+K9L/3xqH/AHDdQ/6oYq7/ABXpf++NQ/7huof9UMVd/ivS /wDfGof9w3UP+qGKu/xXpf8AvjUP+4bqH/VDFXf4r0v/AHxqH/cN1D/qhirv8V6X/vjUP+4bqH/V DFXf4r0v/fGof9w3UP8Aqhirv8V6X/vjUP8AuG6h/wBUMVd/ivS/98ah/wBw3UP+qGKu/wAV6X/v jUP+4bqH/VDFXf4r0v8A3xqH/cN1D/qhirv8V6X/AL41D/uG6h/1QxVLfM2v2l75b1WztrbUJLm5 s7iGCP8AR1+vJ5ImVRVoABUnvir/AP/Z uuid:9C4585211EBFDE1184E4E7092D2E0EE6 uuid:9818CCDD1EBFDE1184E4E7092D2E0EE6 uuid:9B4585211EBFDE1184E4E7092D2E0EE6 uuid:934585211EBFDE1184E4E7092D2E0EE6 Print }ICC_PROFILEpADBEprtrCMYKLab )5acspAPPLADBE-ADBE desctcprtp+wtptA2B0A2B2A2B1B2A0E8B2A1~t8B2A2(8gamtdescU.S. Web Coated (SWOP) v2textCopyright 2000 Adobe Systems, Inc.XYZ Zg0mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M \lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} 0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ ~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'\A*ىJ nyg؜(VN#q6\DՊB*|i˽?zzhzMџzEzrn8zY,{dBS| '|⃔*Z Ђ`>mۘ:Xc€A'4 uh¨h$nk)l]'Wf@&8[/Թ|zY9_N3kV41@49%wUh 3?Vkؔ.Uٓ|??R~%nVӎȩ5U.k~j9V"U"똬>Ð?%' Ȃ}ˡWml}ʗiRT>OlT$iƝaʚ=\},?iT- =$e0yYq,<-A_|?h@SG=ҩ$leLy)yywydGzPOsz:{ )|qʬί(h䁙~ڀvcc&OS#9tL߮=.v10b䞼 N8ՙ,K.Fpj癪7̥0uPhbQM88Ajʗ׋xAʜڨ†󤔗tuϔaMKMB=(7kua ,̘/1Hsʠ5`\Lk7M (_XĀ⫹}£rs@C`)6OLA;6}Ȕ@(Bat{C rȟH_֧Kť6#̕O&3"^ļ֢qrb_cKu6{ݤ < (ytյy:}Ѱy2ldygZ8dyF冷zj1{r{(B€}b kYdrFl1l;nˉՍވI|ϯkUYz4EƄ0ˀh|RjΌcX}-EYW0,\>շFiba{{4j$W]D?50>R*>6Ā;ٱџziWyZD}p/'g^ȶ6pDzi/W%ԞD9I/Ĝ' J״"ԯzWhy1VߣKC/1ŀٵ˰tzhVﭠCߟ8//)cyxr|xaixPqyS> sy)zjfY{ C7ċ恶q¹JaJm~P ~=_~)]f2ÀDÒG'q^`۳uOY=RZ)#JNO©k#_p鷼`k&O:%=j(Hڧ,O[pt` N֐&<èi(ץc^PbB7pM@s_ϱ ,N&q<Е(¤+8fը*p_oN<}:(nN&Q̺o_Nw }gu~_jx&thxQy7Qẙzi%u7{Z{=v|k|v՟wӾ xѦx Ryosz'kYuzیM1<} #}oha}?'O|}g3}f }É\}Y}|ȸזP|D|mg|˨N|3,}X S}(d}5<|0|nƕ|4~|8f|eNT|2|L |Qvww~~x }1xfyzM(zI28%{1 ։$|y<Ǽ|>ډcΒhU~|nWdQL\15 쇋Z⊩!_+7/0 zXcⅩFK&0D!D $~uI&%ڏ͆.yl bDŽ̋vJQ/nFY k솷&ڸWlΆN]xa„I.~ ҃ᆤh/jhwo`ӃX^H.Е QLr71Nu vf`ҟGHUXu-{8IF,mźg߄ދuނ_gfGǁ-pȑ=ͅtؠ/IzKhu5^ՂGJ,^&J5uYv vw6rw]xEry+Nz|},SP~˛S~~~Sr ~O\~mD΋o~*'C~,lWح46uxp[(/C񊁃)cM &oA(7ȍpofZ0C(e_׃GgϐNanً(AY@RBS( Ѓj<ŏJmQXm@A<'|;Ȇ<[9%_5,~4m,WƈA' U<ϻ6ʱ^ly0W(W@@&֚$`|źm[xR`k7NV@-&H;/ݲàztáHuNvz t9t|uOqEu^sJvJw5Wxk@kx0| |$p|spv4|p]ڜ9|J"|4}-И5}ls?䄅lfo1]Μ=*ڙʜ]1zlʫrզЮb*|Pܟ s>Ԧ*d0vsQysjٶCt+['tJu8vF$R+v Xw {.yzj `xbiAY3I?N7#ףV> J߻bSxPgi5YuߓHU7]ӑ#âk t€ޢ_x ڟdhY9>kH§79,# MbwյZhưkYeH^7 # { >w9hX#H97# `- a{n1rmŶs7_XsPst'@t/E!udukoMw${h@zmz_^kyPpIy@z /RzVG1z_ /|F"{rmÞ_G=PN @}:m/PGw}Iu!{pm}s_gP%ԅ@^/Jn{[emep^P‹@Oߊ/P܊߫Ћ0${9%mT^PՑ@O/aґ {ńumGꜳ^`GP f@[%]/yyK!;΄7z0m?[^,Pa@guY/Vx@jzĝ>m>᫓_ 8[P*̦3@פ/E1gȥFvpswKsxt̢*xu$yvqczwW{Ox;/|1y}!yt~hku~v|}we}ʈxK}p.y3}V[z}:z~ {T}1r̚td_u Fv ~wnxBU>xy8yĂyՂ iq8rsltюLuvmvT*w!7xxpu2q/r+sŖՄtl|viS#w 7wwq?lo pqˣrzwtkXu53R.vA6BvvKNn뷌p[q1r0z̓0!{ ){ͮwӹx*NxelxTyZy,4byqJz!K/z\r zˇ6wswwܳ5x'xx ay'Iyk.yN Bz-Uw>JwQ#_wwwwx$/a x{ITy'.}yAo y~p3qrrڌsvGu `\v5HwU-ńxR܆Oy`Fzꅻzs {u{Wu{_[| Gh|i,؃|/}u\1_rك,tT^QkFǂD+n9 ­Ǐ*1ɂ|q|sB6]5kEՁJ+,x~(Ta؂ uz)Qr-\5TEh*x }0@Wd8EqZ[QDD)D=DI7ˀNdK [p=DZC~")Q~B?θڬ&2`Nos~NY~C ~wp(~^~ܾxӾc$~5n~@IYE~ sB~0(y}^~&\Wo5p!rs.lˋtTWu@v&;w*$yXySCGyyz?k֊_zVf{$@ {%{ۈ}iI ]~׊Sij̉7UJ?6$΀,Mԋˋ>j}*iT·>>k $PYفKIŠ˔8o-|:7h1kS߆a=#ċ%ʁs Y{ygʆq[S1<#,!V5q zٟg՜{Rj"0Ճ'=r'@ zVfQPQƄ;Ο_"a?) Œn;y]eQD;d1!"ospA(~|݈C|BxGgtXUѕB{5.l ʓ@lןzwߕWfɗ/SU/B{@. 'F΀F(wD f9tTAA-ma8KΞNvҤeTQA-X9ub;k)v"xFeAS*A/:-}v 4n~W{oo]p/_yqKNrhSU7Ct214+}pO@bqSb&C%1#!}ip aƫɗRB1Ҡޔz~.Nx}joدPa=RB\p1Jf|yv}6GoЯ+Va]RdB1vɔŅ(rHlemX9nIӷo:up)S4q-p)t{rwtpeÿtX:tIu@:vu)v!uxr:{er{EX&zIֵ$z:{){8n{}.re&WjBIҀ:f)0!rvҊ e_WEIu:QsQ)GIUrQheJWNTIg":Al^)!'XPr0Pe?bW Icϓ:?)8`-!GrӠ`e=̞W՛Id:::ҙ)}yM:qv6eCPWC(Ikwk:E)Q)ЧʜERٵqlrn7touIq-vkrjwtRxu6zyvzyv׷oWwppxGIrAxKsy4ttyivzQPw4z5hx!{>xzmogp–rIs^htOuJ4lvwA"kJmo:pu~r1gWsvNt3uru0zjo;l@̩Tm֔?o^}Rp⏔f%r^Ms2tGtԆ&ik8#lϝan\Q|o*e qh?Lr1s? eshԻjgk+Im{od&p3Lq1:rZ sGhi˶ kSÐ^l֫z/njcWomKpqC0q grybιg`ia}ajںclM`ymmڮbohJpP0p q%Zyk}zdmKzn{hptyU{qb||sJ}t/}v 9dv7wv{>${* I|}9z Xz Əy|zhz1Tzy>z$zjR{݂\y yVy|yh9ySyA=z|$ y͘_{^؋iڜk~mpyofipQbr$; s!tNw$setU u2x?veqvQw;xx jx{j|ۚՇ{|ن} w}!dq4}FP)}u:Qr} U}~цZ>vScyO\yI98ƃoÏۘ"ubgbo֊dNkuJ82n2f{.י~~0\to3a0Mx8EERX 2ȃEvsš`ā7&M͕7ǀvQlWJ#&r&`VLS977ߛD-`3^|r<_|Kz6Xy iNԓ&k#yln̐nj\oIqt3֍rrz쓔rZsM't3mu[čXuHUEv3(ww~{Nb{}~!{mX{Z |G|_2~c|~||lZ+ |~5l YւXFΉӂ 10&,{^kY-F1YPƇXRQ?{7~j5X^ՏFEmԍ0ˇ)MIZ0zy͚iz^=W! DՇ[0^Wh̉إy܊Dh܈ɟWD@I/慽)aV{yVܫ9hNRVCՆ/8kH(؞ĥלLjsߚl4cėmR oI?씆p+Jqlq/}А@qcHrQsˑ{@*Y{q/{%Ϛ̂=nq-ya&P{7>*)ޏ
ґƗYp`O֑ =z)w>{UƓGxp<@` O33`=%j)"]Ƙ~ϙo_z`Nu<(όؒikU~"RCo^͜Nܚ<&O(k8KW=}Ôn^VM[Q;όƠ(!7h7vm\-=nknlpvZoRiʯ(p\WpMTq>p^r-:Isj㣧sF7uav |vi`w\Gw`Mw>(x--xxT^zXu~]h}~[w}M4}=Ǣ},Рj}Z}~uDhX.[τLm=rd,2kٞ;th(urZXL_yX=h,_hҝ#te=gZn#CL<ԟ,0;ڜYVjBt]םg-;Z2VKآ<억+뜓vƐSdt.~gZ.K]<{)+뛾њ|j2f]λ@hP㷖ipC#j4*k#>l!Hksi=n2]Ϻ9nPBoCEwpn4[.q1#sJqpx)iͼud]uPմuC&v4Qv|#vv&|"ir|k]af|P]{Bw{4-{#{g{hiz1]5#PVKB+4#0liN<]PDB 3#:槫i)]GP?Bl3񨛍#2E"Y߀i Y]PDYUBM3ǔ#^?YHh]#IPQ|B%3 n#"V PlmfDn0huojqcl{rndUtOp}LlurP1vs x1s\iqTXkrgmmswogtyquc>rvKasw0txU vtwɈg|`i|\k|_&m|}xoV|bp|JYro}/s+} !t|ǻePh Pj `kw*m̓`o/ITq.q vsdF4)f|Th~juln_nCH`oˆA.p+ rxRc!e?p8gUiS tkG^m!3Gn)-in hq öad@*fUhTksjR]l3FmT,m˒ pa< cĜSeLgri\kmF$l,Ol٘\ pj`b盲d%fNrhکs\]j¥>El7>+l mp_te`uglvqiwZkrxBm\Zy,oESzq+zs}s}Fr=osfq;Zturpuvsqvst[jwquDvx]v*8yw{[xp.zk>qrzrz?s{Bot{ZDu{Csv|2)XwN|?zy|l)n]ʨo31p샖rnxsOY'txBun(u.x1lя)'n2Ôo|PlpmFqXs4RAt-;'tDywdlxklmnM#Col0pِW)r@s'>rVgvރjl$mTInkGoV`q.V@>r8&qޒ#'wJ|i߮>kLl~vmϣjwo"aUpn7?q]&IpwYVib$jɴ#k}m/>inzUoţg?p %pw=p|dM}g}TiW|}kgh}meTD~VoS>~q$r&gtSzn3{'p{zqh{u{rg|:sSS|u=8},v#C}vxqxxyMyyyzKz&zfzzvRf{z*:FEeWqcbEa?b!PX>V e*5qE|czieYlDgx\dirLIkM:6 l%ّ8n ZduΤ[fˌWg/GR6Ґě.'K͒F؋RFn9ab]cU:eGi;gW8Mh'6j*inbmi?ajTFkG@m*87`nS'?1oq-n-simpa9qsTr7Fޢs7ퟹs'rt.sx0lx`xSS,xFjzx73yA&ݜyl2x0|cl(l`8PS+E&71~&p~~k_٣wS%DžE P6؛&o(ƀkd}_ҍRߟ猲E:6&;%Jۀk$_T&R3D_Y6@%a'j𤡝_VRD؛V63%j a|`U|bRIde`"m$gsinji]plFrEo,s&p v*q d%jѭKflhn,jorFlq`\nrEpItS+pu] mthukIaud vNf}vshwpjx\[lyDnpy+nz rz-w_K]aCdlȃfoiiZRkMCl)*Bl~vq~]U `ܕbie nRgbY5iBk9)krY?q[^pa-1cm-fX\Zyc]Vj_1bpl=dޕ1WjgAqh(`h|sYY\b|^_avknc眙Vf,@gɗ''f"Ds XԵ~[?^D~`!jcVe`~@Mf'neș_t̳7n_GpOb1qd~hrgwjt?iUulM?vnw&wZo2{ ql,i{mkoPmP}kpnir pUsxr2>ts%Wutxyruɰ1isk~tߎ{m u{nvhzp0w`Sqx.=rx$ry&yzFg~&if~-k!~.zl~)g8ni~0Ro~;=q~<#p~[zS~+eGgliiy.k flхQnlgonp,\qEUIrL64rcqˈKmkUܐHH;ʂ9V)07vdh'mO'aՊUTEG9vv(ϋQu߀mB a5UyGiӏ8t(pnjрla_}TԘ_G 8r(9ŕ'Ɏ0'ebW[Z^M#`e@[b1dh e emdc'YdMmf@l{hV1Ҝi j Oird+juY kMl?n1o Кo }lo{wcqXkrzLhs?y0z' M-z1 z*b,VWqaKuH>|0UN % b&-WyK$>(܆f/2mD t ΀a՜^+V̚JJӘ=ؕ/Dv~ %z!a˖V$Jŗl=(/Jg[ 숟Y#ZdNR\Bd^5`',b#abhEcZqXpga}McB#jd5.f:':g`gpҦhQvXhhMJ iAЩj588k'l sl|9mxgzWo:Lߪ&oAWp4Uqm&ߣq Nq\rA~WRvLvAv4w3&wm ]w)Ÿx>V}#LP*}J@դ}N4^7}?&t}3}~^V-L)@u4Al&t4G->!zVҋCL2@g42&]!6MVb4~L z"@U4.#&g/&jp&aSYc]6f/`7hqcLkjfFW(li%A*nbk'nmtnų*]daq`fc6h~Kekjh m(Vj@o.@5kq'lr^cu5sANZo]pJM`q|c&rinet TguC?>ivV&Qiew ux"tWy[y܍^ z9{Y`zhc{Se{k>Ng{%f{v$|UxFX΃u[y^łyfaRd=veʁX$dvmRSvfVZx] je_(Qbp pE [pqL.~sǤbmdo7fpxshqa8js&Mlti8mu|m.u~-xe4_wbPx0dxr_fyQ_hyLjzc7kzjz~T|f]}``]-b|&pd^fဤKhԀw6jKkht~uԠc[{+^B `oc ]e@Jg56ChXf~_Yt2\̀_>oa$]coJe܌5fe3~Xas[Y^ [nJ`l\ZbaIhdi57e7:d6~Wة6Z ~]#m_{N[aĜXHcš4dc x~ɀ|6pXq\`}gr_ltbZuDedGvgh2whj`^wkZrmbne|1pAgikqiYrkFtm28to`tovȘjl ?l@m{moUjo&pXpr(Fqst1rt|cr&tzhuiv~ykgwFi:lwWnlxEoyA0pyoy~qeggyl*zGn@{mzsj~t lyp{tn`uoP2vq>w]r]* wsE=yr}ps}kqto)ru_svOOtzwK=guOw)uxivwnk||Po}n p}W^q}zN]r}h-jKO0j,lksjgg>i[ kfM#l=xnd-o}oNq6rp?ofqYr8LJs>=4pt#,mt6t] vq}BwexYy"K]yh[img"ndgQf7\@gPPiCk=4l#mn^l^sf~qm[^nObp*Beq<3슀r #or7rxe}uLZvNvA.wP3fw#w SwN|d|Y0}KNg}{A }2އ}"ن} }ICC_PROFILE}dZYRwMh /@vT2Z"X3!GcއEY M/$@?,;2/g"6僠c|X!|L˅MS?O1sn"*ۂ] \URBYXF[E9]+}_I`JamI\]QY_UF7ay9cr+Qe Peߘer1[_dCPeEg9i&*jV&jjwZ@kZP8lDѕm8jan*joݔ3o.p#{eZ LrOs[D0t7ƒ|t*u-u!1*u.YsyO}zCC.z7Qz)zq-z;{XkN>;CL#6폗). PX\`N/:;B66(܍~sG+X7N rBÏ6o(WrT PaTMFbV;M Y=.[i \]`|q.Oƨ[*EĦ]7:_2.` [mb+ǥbleuO=SaE-c:Ae.~fy gVѢg iz<NǤ hDYi9k-IllƠ?l(wo+}NK oqD+kpN93q-+Lqqq5u Mנjv`Cʞv8(wU,뛞wXw؛w^qzTMs}UC}8},7}&]}љ} ~M$YCJsq82, w{{L)C(8dЋ,ٗDݏgZS]W|`[5wPc,^debCPhe;ih#%ipjygl˧V^ Y`\cv _fxcbiOe"k:fm"eeolyqgRhGVUjsYlLt\nb2_oNb^q9ds!btyvbOSrݔzS sڄ| X_|VEb(|1c|cD|dQGg{Q*gh{4jz{oY|\jn^_eaFO'cgd=e ;*Me$,h;WO{Z}m]^_Ndax"W`ixGkZyT6lxy#ml9z qze~bYr7d9dfVpgFiT6j_"i p}`(&q^bZddL4Uf F=g5ph"g nτC} ^p`ԏcdbЎU dkEfP4g ".e؋ m<|]Wp2_ baJTcdaE)d4xe!dbQ knd xyRmzbV` {YQ{])BG|h`0}Ab~ld#dy wv`[Hkw(^/_w`PxcAy}e0tzGg{h~)i|v}s cjte]u gOui@vk/w}m5wm{nuDpkisq:m}\rOnOsEp`?t.q/!trtryt(tmWt7hKnu:[ovNpv?jo}.pR}o}x<~r:i3fjZl Lxm%"=n-nnumx8qgFfiCYxjKk=(l,l߉+kx:qfqehXip"KejŒ\]2D^$g`Oؔ`ԑ biqRˑ ^?Hܐy`g> bm1؏d9#䏯eeggvRBe@Hf=(Kh1/i#TjJjl{<Q9lUGDimߡ;Md|Qg"lUAi{[ XkH[m4\o]Jq$}KtEERހC2SXW)} :qJ@wEhIW;ME\P{2.Q5!gUʆ}08?e=vvBgnG5VKDNԌ1O1T|436;vqABgF KVlJ?cDMY1M^PSϏ|8ZMC]aR v[_V9f}bZ/Ud]C=ga/Oh@diufTmґyUWXZu-[^Je^avTa1dxBcjgJ.d]iNf`jrPaITmcsWfPdZhSV]jAc_m-`ncowbLjGPslqTnVbWRoR)ZYqx@j\r-] t8ats{vHt~Lu{pPvca`T,wW~+V ^dXB[|~G nKDm_OOR~C>XTԄ+TLU]?{DʏmI0J_M&OP=R܊+-RG*]뉛>{C mVG^KNO E=QE*P^i@aN zdRlf&V]h9YMVj.];k`'lcpdhq'\WyH_Zwkca]\{dQ`LYfrc:h)fu'BhhCnhvhnXb`Fw[[bj-^ec[\`gKibj: dl &dmkmzT0iivWykBhZtm Z]0nJ?_pJ9aUq%`r ixr~#2PkrtSsgAW)tXZuI\\v8L^Kwq%g]x ~i1x:M!{sP|f6TG|oWWV|H{Y|7[}C$Z} Ri|~ ~JMrNYa.Yy@[tӄypqsMerQXxsUUJuX;v-\ *wC^x0`~bZxolUcnjYW_o\.Iq6_!; rja*RsZdCt d~g!|mh]bRjx`V6l#cHmei:&ng)oi7p}i~l*l5df`fhThiGj6k9FkmM(ln]mnn~eqja#nF_cfoSedpFgr8hns"(mhsjs~.wi^v^`vwPRbwEd\x7ey'eyxhyg~0{h[K~]]~R` E6a 7c+'Gb/qff$~h%Y]D[Qy^ D_ㅉ6a)&`a&eTD0}gW-\Z3P\^6D"^2"6 _?j&g^ad8~5dz MZYzPN{TA|dW2t}LZ!~] ̀]xe{cEuTXvXLw[@*x]1y`S!zgb |b=jH~aq\W]r_Kta?/uc0ue vxg |yAgoV`md2VoQf4Jph>7qi0r~kYrl? 0vXl t_j\kUlm_Imin=,no/xoOpKoq sqny^vgFsTitHjutX\L`NOCS>7 Va(YVZ\q[i5~WxNS|MVBy`Yq6,\(^I3_C`nmVH{ZZLT|]@A{|_5>}_a'S~ck~d/eVs$U+waK1xc@VyUe4Xyg&zhzi/s}jox Tt9iGJ)uRj?Uv/l63bvml%w7nXGwn^Z{io|rS&q,pICroq>sdr2tsg%7t=stsbyCuRQnwx Hsox=py1qyk$qyr&yxJ{sQl'tGm=Xn1o$eoRBp:\x'Q%j?GolM|np3}6oh(q}}p"}pl ~pvUFy1t]=z-u3\zu'{vrzv |6vl{GFOv{lAUx5:W+>Z:[\Ґ^.i#yt=o}[4P]*_gd`a*c:nV}X<b3tid&)Det"fKfght;ˇi]2j(kkBk?kn0y;;)p)1p'wqyq熮qtS}:|w 1]w|'vew.wIwnz+: ~'0~O' ~1~\~.~mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~"hN~uO 7A胬|.A|33|M|WE|ߓ}OgV}ьN~|M6g\7{cߥ{fǪ{ `{ɞi|+~|fn}CAN.}{5~zʸU/zDzCz{,a{}|$Ye|ȕM}5[~_wzRêzF2 z] z;{|{d|`L}5P4~=cyy@yz:z$| {[@dH|Lo|4}uyZy2yƔyj;zdj{w{ @c{̡L |34=}S~6׆}}p}UR*}u{}că~5Lx~5(=}p@kcyԃ-bKÂ4؂zGetMڽos ČX9wxʂʈaiJ͂&L43oۅO_tz莴r wA`ցNjdJh3\lԟ[7—vx`9Iue3${K͂:X2-{6 uȀ_JH䀯:2ՃsV/&ĤuU^THiS2`rփȥ$ƁWSJЀatk.\^)H;20T7Yn#s]ƞGЕV1||c|:;h|G|rʼni} ]}G{~2Q9*ǔR<6W[䂶q҈=\+3F遢1˄ڣ9Wr݌>WpxpЇh[HwFF1T4B،lkȉR9oهZ؊&Eo0샠ᤔÇ [ޘ:OnkY΅J4D=[05 ֵK\wʤĘRL~nY+ΒDsЌ0EڇDէи\Qڗݧ*mwzXbDsl0VŒj¦ψԖч{Ά=[l)X6NC'/тNA̩ՊMĠ'-7lgWԃٜmCx/O{Y{Q{F '{s~{ju|wV"}9B~P/BB̝ҹ<Ւ4 $~ӁiڍcUƋY1A7.zB!DE.Z.7} }iцJUAtp .!c˒ɒW|-Qh )TX@ۆ.e^fDi{ 3gQSm@]a..4ت`"סp 91zL fS6t@0-؆d VבAȣyf cRƈ?熏 -؄.eNĠ!|iDxFeDRk6?A -LŅq͒rƋwx{(e R?p-@ zɠz|zzur{Vb| P*[|=~ ,j;ӽp|Μsn%tŕb ǀO=n5,IY6ܟn웅φAusPaRPNل[= ,,ĻݔОD[ٚ̏~sd`TNf4<,è靎e!4ڔ&rٹޔVj)0Jp ^*L ;+Ņ􈉰(z&z ~z}HzjlJ!z[{J |9j})Ћį\RfԨف|PZk2"Z}Iʀ69!K)k9wkR{|GsGk]HYEsI 8䎛)ςϝ.4js2{{5j\pYTH`8n)GɬjԋIz,iX͕HTŊV8q*фDb7ɥR zi#fXVQH0k8Z* nԫ^D-yhTWGŐM8>*håڊʨly1hTW|Gj8*5%*؇TLdWɴ艴ux՜MAhF WxKGn/38*yǓyqb -RƇC`q:5ل(!ރ,ǘiq[LOa3R#C'Ή@4C(HaB%7y֙paDQ՚~UB84폿(in.֮z@ILp5`%QB֔4Ff(/\ ̀Ҥp^`žQqBT4(YϞM g<4˨s0p(Wd`PQ[HB 4ꎶ( Qy2yPxybiy[gzhL죡{O>|b1}%to<&؆ѻxE\i[~L,>1%܍2k3w+;iM"AZLb>-1@K&68P.TwOh~_t1S&HNBHƸyw3hzZ%XeK'T>k<1˒3&Nj„B]{vᖛhfғYK֟}>_ 1ݒU&RN:hvıQh?AKYإ/KĞ>X-1܉e',ƓM v͡Fh,YɤRK>UD1q'QZtvQh'9Y̤,KǞW>n20'onщ$yp{6y(nfhy/`췎ySxzND~}46~}y-z4*z{;24{Ё||vBd}.MU~6:hxYjxyxҪ^zzɈ}{d{c|_L}}[5L~?w31֮wȗxhبyyTzAzb{K|G4~ ivGUvޢrwާwxAMyy(zrb {K|,o4$}uoӿv'vͦצ7wϏ/xnxyia9z|J_{m3}u{ҝuv7$v=w䣍wQxs`z I{K33M|ˆhtqѰu'u¸{7v+`wqvx_yI^z2|t'tUAtɛLujnv$wux+_jy[Hz2|6♄x͍xxx8yd \z uz_{IU|3|~uႎ\?(e+kt 9^sHu2ZIQAAًnŀM>.s)]5GdX2Vݿ(%ǔ|B\PtKnr\1\Gņt1݀4DBAdz~{~ҝ~JA~q~[~ F{9m1t0~t~1c}X}Ӟņ=}ߚHp~ [9~V6E~Œ;1Q~2l}~\}^ǚ}C!^}Zo}Z}E~\0~ }Ė}:||ͭM|禛o9}-Z}E!~+0~f}J|'|5D|o;|Xn|դ`Y};D}ȓ=0c~tvٿ|wW-wݗ_x|yCmцz4Y{FD{|0Z~kud5<іZelgX@{C̄,/n*&T5ɇʕ4ЅkWm,C+w/ԁΉB7Ώˍvj3V|Bۅ/9K]́ih"4Ɇ~d1jUދBPy.ӄ[iLz6W b}yiGU]TA؋.l f3D^'DŽΧɃڢ|hsTفݓ=AWr~.'ʠǼcՐj{wh 2TiA .VΈ uͷ6,ׁEخ|lKe}v̊ c)bP‡>P,ńK'&t1uegFU7}EqЄ6L(z򂅤j?tqdȖJJTȊ;E%6(d(pcc`OޗCtN<9d<7TJ8DԎ'6ه(ϣ奖ԜVsϘcƕ"S푟 D5g(Nz]s]F+c_gSAD`5ۊ n([B?Hjr>c eSWD3_5ĉό(ٙltiNw@2Ǐ&z)"{ɪ{.ZblYLJ]b?N@GԄ2҃&GΓ\rys᥎qup[wF\x됔1zf۳n#o²apݻr;su~p`u [vwEx1Qza rÚs9(tN@uhdvpbw[3yNF>z1~|գ}f|r}|h}|}|~|oi~m}OZQ~}Ef]~71!~#{|(|`R|(e}kn\}pYq}D~p0uҞztDzi`{5n{.|mU|%X}%fD}焋0/~܂g.yƽyͩz9ݕz{-l[{tW|sC}L/~Ux٦y0ymByؚZzd}kw{W-{َC|ȊI/}ax5Lxz}xǦy4'y˜jzV{VmB|W/W}9whxxGx~ayKjzmVzBR{)/&}0ͯwj^\w_w趔xEZ}x$iyUz^- dƵ*% -6 v2~ٟxcG~̙P~Ҕ>p,Qtո1~_u~ob~iP[~}>2~,չwpFqLrІtsъiunaZvOx=Pz+|~Dy,yzC7zrJ{6`{Nl|[OLR;a^+ s6Z IMȈ 9-ەo`]L$;و4+ mvUjF|n)j] )FK2:؂fh*|HwT̡n\gK]Ғ :^*Rb!8†­)lmNj\a0K :kĎ *ځZo#+q NrQ{ҒsjCuYߎvIxf8dzs)|쪓xqx狏yX{eyj:/zYA{KH|,8H}B)5~×C,؀^z:Oir)X H7)'Ֆ+ňzey[HOh6YW*kG}7) ߁+KА]qxtfgOW`YG5X7]) Uܧ*rߗ1 וpwg) t%lǎۢv}Tf UF/Ґ 7) /ʥ#ޖ<׮ֆIjuNeD'UbsE놁6ۄ) wͣ o[pqq™ssJb4StR#vpCJx>4hqz_&|6w'xp}xq<`y'aByRzB{4A}&ˈ~Ďjiǚ`"pLa:~Q$BF4&H⟲ƍ~~[oՖI`sHQ CXB>&3'T"Ϗᛞ~,Hos_ߒkPxxAi3L9'*BD}ƒn~T_WPHhA3ɈH'@y̚Vn}2)m^ݑO.)A|,39#'S3~DZi|şPm^sO’AAŎG3ԉ'b@8Įڊ<|9n@m$H^FOJaAq3!'nߐo~pBvqhrYڜtKWv9=ʓx0ezN$|ېvڃlwCuʣwgɟxxYqyPKWDzR={r0j|$Љ~hy~yr~)uUk}gMl}Y`~KA~Z=m~03%ӏ`P^t_fĝadXeJTM=;0q%Q6vX¤yt?f1X7qJY%=Y0%=ÔGɒsːKe͎WЗ͋J‰<쏦0rl%!:-$0s>1+e[22W|5:Iݓ-<<׏30%҆צǟseW7.I_<0|%cōrjrrY?dΚ=V7IqD7<:01&WFnxaokƬq&^rQt1Eu8 w,8z="'|҄nvxJvxkw^ͦwQСxDky8{-%'|#0~SLM};w}|kh|^|Q}/DЛU}8~&-N3~#xX(.w\Mj~^-QJDVM8-o[#͉热0wChjF]̣QDvt8 -$YuvjSʍ]ԋP˝ˊDS@8do-$Rz嘞vj+P]N/P*D6 h8-i/$ ްivi릧|] PnDF8zB-ό$Yv;i5i]PX D 8ό-⌛$͇my0nem}oaεJpV r=JG\s>u3ʜw)z1 |yiuomua3vQV"GwJ_x'>ۡyg4z*|q!~>y>|m{aֲ{V {JU|R>j|4(}*U~" ym\aɁU׀JRX4EY*π~"y߀xm?saaUɅQJ-k>Y4`ɂ*ґH"֊8xƻ&Dm-gat؋UJ"ňG>y4zK+R##xlm$apU%2J >ʉ4Nq+2Q#b:]x am"]jasPU6Jn4>;?4ɉY+VB#݃x{&m'ꝑa|UJ$/?4Y+m臉#yڥqm*ƦsQnIJ+tpW uq釴w0sr&xuB\ywGm{y#2}{ضoxqkxrytOyuz4q"w=z[x{Fz|2%|}n[oQDqT{rށ5WtopvZwр=Ey1{4lnE ocqք sCunu Zv鄶EZx81D{QzӢkG}mŬ nprr;mt!Y?vDxJX0z2XjIlvmɛȖTo#q_lsVXuoGD?wJ0z;PikI mXMnşpl-r2WtڑCCw60[yφ"Јhjwlhqn'p kxr+-WUtdCovΎ{0'yuSh|jSHkēm8ojqVsgCvv/y,Szl$zm{(o,{qT"|Ls j|tV}vB~y/{`x/v}xw0Rx?z>-| 'qro(ksKLt?xufFdvRx11?y؍*-{®q*r ٝrܰsƪ'wotd]vL!QwΖS?=y$-{n`{kR݂m?o ^pvrcȁxtQrv>x,{Iuɀvc_vڈKFwu;xbDyP[]z>|,y}&~٪~ƙX~~6~~t~~b ~OZ~=,FII}t6}}}s}ᄯa0~%N~{=~,||9|`|{r|䊜`^}ENb}<~O+v{{ꕦ{'{ГOq|s_|M} <]}c+~жzؤzz͂{q{n_{1Me|x<}@+~- zK8fzZzdDCzfpSzᛂ^p{kL| `;|ۋ+}׆yWy*zy}zozk]zL{F;|+}ׯf;jNlYn~pGn)r#\)t#KWQvI:@x){sjt]u~vmOw[y JAzJ9ك{)}m |H}#[%}>}V}blo}[,}J-D~;9~)ւR (`)ᄡ|kqDZۂIX 95i)Ɓc,/͌ {qjzYUI#8J)v9?^zCi聱XY">H=8o)_ǚv͊{Hyi9X"HYT8o8)0w%dۂԁáyH hX .(G鏆8AҊ)ۅeăd<}E`UxhbWG48C))jNl?--nuvoeqUm sELv6 x'v{5s>teu t:vdꋍw?TډxE=y5dž{~'}Yl){I`{Ń{t|Ed(d|T<}DD}5~<'@~zۃHrtns$҂jcdPS؁DC_45Y'rX\#_r@ψbP6SC䅑5,CC'ȝ͍ڔ.Ӏڊqb\R0*C4'z)/[-rpވYbapLR+C͉1(%ۄyHgАvY4hPZckLA'>Ԇ1%3c0 v?th:YَK⊋=>g8o1&ƃ'惆uʑ4|gYRJK>)ċ1y"&$lO]Ψ?/^ugѠKgFEY*IKD=c-1c@&4%􈀦li|Qkom]bvIoGUqPG)s:fu.;x#!{Wql{rsoGsb#tTvG_w:Cy>.Oo{#y}1 x{kyEn̝Dyaz2TWfzG{:`8|.\z}#Ƈ~ĀJz͟ln a SMFƑ:7G.e$zf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i 9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy }>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$yzz~n{D{]{{K||r:}}?* ~%FwzKxx~yDQmz\'z݀K{Ҁw:^|0*~Tۮvvfw`\}xlx[^yᅜJzV:|<*}ktufvV|wkwZyRJz79{*}1Ь&tt̛ku}l{vDEjw7ZxUIy|9{*u|sh$ t$tӟ{2ujYvVYwɓI7y9Kz*h|ersMtTzuuiv>YwKHx9 zL*^|쥋|e;gȈDj,xl{hQnW3qWGrs7rv(jz\nSoqtwƂ\rg~tW v4Fw7#y(k|>wEhpx #xvyofz/VZ{Fh{6ۀ|(k~#H߀ SuezUF6(k^~ˆK~/Y~sIt~]Jd~dMU ~XE}~σY6_5G(k}\}1q}uvs}jd9}~Tv}E~6(~(k8e|ٚR|˜ |vs>|c|S} D}k 5~ (k~ǃJ|4ȑ|$|Cr{c|$Ss|Dj|5}(k~k{{ {4{r{yb{_S|D|5}By(k~!E1d鋩gl}݋hio:Al(`nPއq As3rv%zajmy!o}pnrE_zsPYuAw3Fy&!|0u߉v|1twmkx_^ÆkyFO˅zzDA6{U3|&>}ݖ"#~~G{& ~_lن~q^.~OJ[~@惑~2%&XIf5ˆWȅzG҅+ln]| NۃV@P2&nȔkɎcэZyދkIV\σ)NZ|)@Gꅎ2y&Dž xzj3 \7qMЋ@C2& G_2yxhj~[Ԓ!MnF?ƋJ2x&K:Ʉw i[SOdM#ǒ?Y2m-&(dg sYieߐkXnWJpc{"r}~zsIzgh{L[p{O|4B+|7;S}o,Ox~0"Յ~~vrf=BZܒNـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! }~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2u6x)Gz_юzb〾eqhbmk~Rր$nCq4u7&y7}Gh}kj}lp}oa~8qR7~sTC#*u4xA' {*{&q{{r~{t&o|2ug`|vQ}AxB}y4N~{.'|y6z?wyz}z!{Loz{`{?|9Q{|BZ|}R4%}}',~w݊|x%|xnnyH _JzP]zLA{3}'9~u)vNovꊍ{wqm9x+2^xOyA{^3|f'C}䁀uA؈u5zvElw>&]xOXy,ABz\3{Ѕ+'L}lltq5u#zUuŖkv{]cwhNx@yҊv3{U'S} sڤtyu01kvu:\vҕ8Nx*@y\3Wz'Y|u_wbviehͅhoZRkXLEni>[Wq0u<$yB˅h.j@ul^h,n{YpKуXr>ul0Ђx $ւ{!pQVqtՂs!g"yK펭gXwOiknjk_EmRekp'E$r9u&-Jw"ք{1ov勋pkTr ^!sQuE"v8腦x-Pz#|`vvwj/xV]y'QTzDąz8{-S}#U~Aq~0uQh~ri\~]BR~PM~Dzk~8"-Z\# ވ9tCLh?\8 PyBXDKh8-]r#LFt5^ hwZ\?O@OgC邡N8Z-ZqW#Ӂ ~؆'sh[ԃ4OC8 ^^-Y#~se"g[uOOCWq8-Sf$QUx3f_)m2bb!dW:gKoj?ln4}q})鉪u= hyPwfmFhbNjVmm͉/}4/U4+d *u"5wtjCԉ _w TYI=6>gg4+* "cjt<ѐlj)(_?JtTO}I o>-4* "(5sIi^SىHӇ؍"> %3*R"ӂmBo^cxaYZdcNgbDLj9ѓAm/qi&όKuByTlec4gYPj#NDlD6 o 9ؑq0[t'w{l1:lbnXoN^qCsp9ŐOu01 w'az|k|s0bt9XuLM"vwCw9y#09z'|A W}k8yalzJWzM{PCv{9~|09}j'~E "jʚրKa=LRWX:M@C69h0<'އ p0jm醤`f,WtMɄB9F0G!n'k!%j'*`V֓iLƑ Bǎ-^9]07(݃+!R|i`"IV˓Y;L`Bōu9*s0Pg(6oZ!v%pb^Y}s`P7cFѠf=ij48m+wqM#uETyUbdY/"fPgi0F\k=q nb4_qK+tZ$hhw-zak$XԥtlOšnxFpj=]wr4mt,1w@$Ō,y|sapqVX}rsOisFS#u =;v4mx=,W_z%{ }a#wxX8Ax!O)xFy=%z~4l}{,vG|%Q#}K~`ݤ]}X }Oq}E~= ~J4ui~,Q%Rυ`fzWANuEO<4u,~E% `v*W؟ON囨xE֗ĆJ<̅/4hׄ*,ۃ>%W D`YWӞNEӗp?|sk2}v%z0xtkumwvoiVw(qh[3xVsCLyu7?){#wI1|y%~|Eqtrruutvh{uUwZyvxLrxy{1{|U& }}Ǝo|q}Strh}gts}YuH~Kw~M>ox~1z~&%}=T"n!Hot pyfruXt4KSu> w1z:^&9|Zl΍|)nTrsVo͋!eqZXis(Ju=w-$1ky&J|$k•vmWrnڑempr/WrFJntYl=v1Wy{&X{Tj&lrAndogWq"J$s=[v1/x&c{imZ{8]o\2a\b~DdU/^h G΁k:o~.2s#lxA~bz~einh aAjTmcGfp=:Js@.|v#z.|`jy|lm}n`}\pS}rF~Qt:^~v.pyU#〽{z.rxztl{uM`.{v~SK|4wFt|y :}zn.g~{$}xDzwx{Ykyu{_Uz|ERz|F{};9|}.c}~f$<*vvwqkxS^xɁR&yEzF9{À.P}$_~XauzNv&vAjWv^wjQx@3P5i+U"Mv~h"la~sa~[VP~<"K~AG?~oy5L~+Z3"ǁ v)}rk}a}zU}bJ}tW?}5~,+_~"Zu|k|ד/`|ʑU|J`|ˌ?[}5}U+W~;#pu^Zf]p\ms`Qd6Fzg;ϊk1zMox'هsqxZo4a`fd [䍉fQL$iFtl};9o1r(pve >z#nheUj[LlPĊQnFq;|s1gv(B;x j1{n;odqZrP7t Eou;:Jwd1o-y9(b+{5 H}@m,vpc=w^Y6xAOy EI z:{1\|0(}=}_!~l䈺}McY}Yh}O-~D~U:~1\~(nZ!@lZbԆƒX׃YNڂDX:1nF(!qQkubXNUDu:I1K(Á*!kᐿbI9XmSNMHDA[:m1F(р!-eޛ1Y\\S`AI픟c@"gh6fkL-Wo_%Wsxbe"G`}\k?c)S.eIh?Xk6jo+-Wr%[vJzd'g,[ԕ?iLR3kI=m?pJ6VDr-u%x{dm[8KoPRYpH͏=r?d t62v-x%܆zc}csWt3ZuIQv`HXwz?$x6z-{d&|~[bzZ=K{:Q7u{Hw|+>p|5r}T-~&(~8rbY5PgGm>v~5؇n-n&Hi 7_b*φYSPG}>n5Ճ=- &h} f6$aYoP㊄Gf݈>r85Ɔ-̄lq& ځ[\XSP\1J垦_BHic&9f1',k )_koL"^s^xhZڢ_pRԟbJ}dBh9 kG1=|n)r`"ϋGv:>zZkeR^gJ!j8Al9^dom1ArM)׍ZuK#-xw†{Z kQmI1o[ApqR91sq1&ـX/zP[Hޔ8@ő=e8Ў1108*_K_$J[cXoP͖)aHɓ~S@8֍z1E*t$c,4i\U+2_Y&c]}Lf0`litd[lhK;pm(;tq,xv媋X_a\ob`3_eW|'cWhLkfkIZjnaJnq:s4u4+wy>UgiY>k\m~z`ojxdqYhsIm7v :@qx+w{vR=ssKVct&Zduy^lviSbwYgy I:kz]9p{+v7}BOw}BS}nX"}x4\d}h[`}XIe~>Hj~9o~+unM Q†=V8w=Zg}_]WdQEH8i9To +t"K)sOׅT*vzY@uf^WcCGhV9"nt+tiIN$!SMuXfD]7VbeGg8m+t+Hp7M{RK\upW!e\;8VXaGDgb8mr+scU5fiY:Ih]'ukxaeqn,dUqhF/t(m77+wq)[{Xw +`0^呣caEeetc0QgCnll05q)|v#bQ1MU"|YnM]Џ_b,,Qf֊Ckp5p)vMUPjT|Xsm\*_OaZPf!Bk)O5zp)uR[k5UVmYV{'n]=mpa^gsdOuLiASwmI3vzq&}w+g^jbiazl dlnLg]pjOsIn@vqk3Fy/u'&|yQdagx fixialkknB\npNuqpr@tut3#wx<'{{Satpad@qwfsWiit[lv5Mow@ s4yb2v{1'*z}.^y.[ayvfdzhg{%[j{Mng|l?r }&2u}'>z~ގ\ƁR_uwc h f1gZYi"Lm+?Rq2u)'Oyk]Zi{^MtagWdԇmYh]IL!l()?p* 2t}']x聫Y\t`L/fc'Y3g`!KkU>o}2ts'ix}ƌX|Y[7s_YvfJbҒXfKdj>n2Ks'rx'rU~LsYqqu)]Odva#WFx eIyiOr7)t.̂wY&y߂=|eǀq,\rS€t JWuz@߀w7sx.zN&Ł | *l}e~w\M5xS3OyIXzf@{j{77R|.}&E~ i dv}d~}[}~R~~Im~!@$~P07(~_.~' +c|([j|Rq|*I>}{@}U7}[.~='~k c{*[{ʊOR|#H|Q?|U6}.}'$~x W^㓈TVXN \fE%`a<~d3h*ˊm#Mr&w^[U^MwvbDep;ȋyi 3 l*dp#u yU]XgbUEddL=gD:jb;}md2.p+s#wl&z\hT jLClCȈo6;+q2̆t.+zv$0{y|e\ oT&pKErECKAs:5u28w+$Fy$aw{}[u uaS{~v|KGwBx:y2z+17|@$}+~Z{S |'Js|B|:n}w2~+GM~$<gZFpRJhTB\:4݀2P7+?$ہ2 Z3HHR'Jy B_τ:b2ZM+|߂$/TܜT#MZWE [>_6&d.`5h'Emm| r҈~wToRaX1R^DteA6lC*sJ>9Dz|JoP`V+R]LD,d}b6k^*rރK(f9k'y7oԃ-}t$ysyTJnXc]EXa@`MUeBj]7`o7-ct@>$ywlsQltWU+buYdVwU]KBxb?zf4|k*W~p!dvuoXkp\La.r_VtscJvbgC?Vx~k04zoO*l}Ds!xtkq`jmcj`4ofVUAqiKJtlX>vo4Oy!r*u{v" ~z{sLhh9igjju_llT|odnIlqqS>{ts4!wve*zy8"M}|/re)ohRgqs^ jsSmBtHpv)>*s2w4vfy*y{"} }q!bwvgexa]phy7RkpzH^nz=q{3uK|*x}"|`pS`k~fc\f5Rei@Gm1W=yp3tW*x("{р8o^f4a\AeAQh3Gxl=!oɂ3sY*w"{]2o9]$e`[deQgG.k%`[nb 5f,Mk$bCq5ՄvaCjWY[OPGJ^G6b=f4Ձ{j,[o8$sRqx`C|^X |aO}dF~.g=~kC4n,Z\rv$OvaIz[_Tye^W"zgN{j_E{l=|o4T}r,N~u% xI{^pvOlVNwnMxoEFyq<{t4|Nv6,B}x%0zkn}G]srUult!MGvunDx!vb.8XfH0j(fo "5sxV]IO;`uGc?vg7(j/nX(Ճr6"vFgzLUҁcNvfSF܂7i?#4k7P(n/,q(?u%"rxЂ{U)j Ml&F9nL>1p7 ar/u_(w"`z)}T_|p[M}qE~sz>-~|u6~v/Mx(z#t|ts~;SzvyL{wEB|{xt=} yn6{}z/k~2{)~|#D~!{3SAx|YLz/|D{&}-={}6@|}/:}R~x)~#o~RwqKxDz=qzX6U{/h||)'}c#~~NؓOHJSAqX:=\2av+#f%AzkqovM̐UGRY}@]_9}?aq2le+jO%lo RsGxM[F,_?Ռ)b8f2i+y1m%q [v/; z>LxaE|d?1g8{j1ɇm+eoqF%jt xM{Kڈ^gESj!>{l8o1q+\t%τwb }zA|KAmDƅo>@qn7Ąs^1s9up+cw%y!&| aN~JsDL t=v"7w{1Lx+Zmz&|![}~JLy/C炗y=z7V^{X1-|2+E} &2~!~ځ,I|~CR~=U~71l~1$0+T|&(!ĀTmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92EJL`KqJڪMϩVȨaŪk¬u}ŶʲЫ֤ܚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚ82EJK`IqHۭJЬRɬ]ƯgñqyIJˬХ՝ړޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ82EJJ_HpFܯGҰNʱWȶbźlxŭ˧ϠӘ׏ڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏ82DKI_FoDݳCӶH̷Q\lxƩʢΛєԌ׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌72DKG^DnA߸>ֽBJ¾\lxƥɞ̘ϑҊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊ72DKF^Bm>};yN_kzpwtuwsyr{q}poˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀ )A$U5eFpTy{avhrnoqmtkwjyizh|g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@OTNdOuQڥXѢbɟmşwžùǶ˳ϱԮקէէէէէէէէէէէէէէ9*F@NTMdNtOۧUҥ_ʣiŢt¡}øȵͱӮاڡ֡֡֡֡֡֡֡֡֡֡֡֡֡֡9*F@MTLdLtNܪSҩ[˦fƥpåzøɳϰիڠܛ؛؛؛؛؛؛؛؛؛؛؛؛؛؛8*E@LTKcKsLݭPԬX̪bǪlĪv~¸ɳϬգښܖؖؖؖؖؖؖؖؖؖؖؖؖؖؖ8*E@KSJcIrJްMհUΰ^ɰhƲsò|ɮϥ՜ڕّّّّّّّّّّّّّّܑ8*E@JSHbHqH߳JֵQжZ̸eʽq{ȦΝԔ؎یٌٌٌٌٌٌٌٌٌٌٌٌٌٌ8*E@ISGaFpFGٻNӿWcpyǠ͗Ҏׇه؇؇؇؇؇؇؇؇؇؇؇؇؇؇7*D@HREaDoC}DJTbnxǛ̓Њԃւււււււււււււււ7*DAFRD`BnA{BFRamxƘʐΈтӀӀӀӀӀӀӀӀӀӀӀӀӀӀӀ7*DAEQB_?l>x@FQ`mxŕȎˇ΂6*CACP?]Rcpzċņǂ5*BA?7J0R/U,h0BWgs|2*8=/E)H%R)l1EZit|~~~~~~~~~~~~~~~0*/8&<;#W*o5J]ku{~}{zyyyyyyyyyyyyyyy.*%0-A#Z.o<O_lt~x{{y}xvāuÃtÄs†s†s†s†s†s†s†s†s†s†s†s†s†s†s†$%#,F&[5lDzSb|lxquusxqzp|o~ǹm̂l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄ 1G,Y]?fCmMoNYfqyĆǀ|zyyyyyyyyyyyyy5"B7AE=P;Y69A4H3M6P6g;{HXgr{|zzzzzzzzzzzzzz2":43=.B/A.U3k;~J[is{}{ywwwwwwwwwwwwww1"31+6&6&A,Z3n=M^ktz}|zywussssssssssssss.!*+",-#G+]6oB}R`l~s{wx{v~tǀsƂqńpćnĊnËnËnËnËnËnËnËnËnËnËnËnËnË* "3#J.^FJFVHbKmOwU^lȷqw}Ɣɐˌ̊ɊƊƊƊƊƊƊƊƊƊƊƊ6C.F>EJEUFaIkNtU{ajĺpu{ŎȊʆˆɆƆƆƆƆƆƆƆƆƆƆƆ5B.E=DICTD_GhMpVudzinty~ĈDŽɀʁȂƂƂƂƂƂƂƂƂƂƂƂ5B.D=BHASB]FeMkXmazgmrw}Â}z{}}}}}}}}}}}}5B.B<@G>Q@YD`NcYg`yfkpv{}xvuwwwwwwwwwwww4A.@;=E;N>UDYOZQlZ}biqw~|yvtrrrrrrrrrrrr3A/=::C8J;OENF_KqR[fpx|ywvtttttttttttt3>.975?5D9EBHDRHZNaVgbmgmrx~‚ƒ3A&B3@=@GBOGWM]X``lf~kqv|}{}3A&A2?<>EAMESNVZW^kd}jotzzwtwzzzzzzzzzzz3A&?1<:IDMOMWV]jc{hmsx~ytqnqttttttttttt3@&<0989?%9.656::WEgKuS^h|qxwt}pȂnLJkŋiĐhĖfÞeåeåeåeåeåeåeåeåeåeåeå//*"$!# -55I4N?\JfUoy^urd{nk~jphueyc}bځ`ڄ_ه]؋\א[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔  !.,?7MDXOaxYhq_mjdqgjtdowbty`xz_{{]~|\}[~ZYXXXXXXXXXXX   $//==IIRxTZpZ_i_ddegaji^nk\rm[vnZyoX|pW~pVqUrTsStStStStStStStStStStSt'-49~BCwMJnSPgYUb^X^d[[h]Yl^Wp`VsaUvbTxbS{cR}dQdPeOfOfOfOfOfOfOfOfOfOfOf*(~82vD:mKAeQF_WI[]LXbNUfPSjQRmRPpSOrTNuTMwUMyUL{VK~WJWJWJWJWJWJWJWJWJWJWJW->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;VG[Ta`hkpuz䇃߂~zwtrpnmll¤nĤoĤoĤoĤoĤoĤoĤoĤoĤoĤoĤ->K.Q:TGXS^_djluv~䊀߅ۀ|yvsqonmn§p§q§q§q§q§q§q§q§q§q§q§->J-O:QFVR[^aihtq~|߉ۃ{wtrpooqrssssssssss->J-M9OESQX\^herm|wߌۇց}yurporstuuuuuuuuuu->I-L9NDQPV[\fbqi{s}ۊքzvsqqtuvwwwwwwwwww->I,J8LCOOTZYe_ofyoyێևҁ|xussuwxyyyyyyyyyy->H,H7JBMMRXWc]mcwkuܒ~ӌ̆ƀ|yvvwyz{{{{{{{{{{->G,G7HAKLPVUa[kati~ޟsԘ}ˑĊ|zyz{}}}}}}}}}}}->F+F6GAIKNUS^Yh`qhz٥s͜zŕ~}}~->E+D5E@HILSR\Xe_mްivҩqȠx~-=D*C5D>FHKQPYWa^iڴisͬo¤v|-=C*B4B=EFJOOVV]`dԸgrȯmtz-=A*@3A2?;BBGINOWS^_˾dqjpv|~,=?(=1>9A@FEMIXK\^cphntz{xwz||||||||||,==';0<7?)F:MKUZ\hbwgm~svypŁjĉfÒbÜ`æ_ô_¨aaaaaaaaaa,51 .#-"3:.B@IPN_Ul\wc~jvqoyk΀g̈dʐbɘ`ɡ_ɫ_ɹ\â\â\â\â\â\â\â\â\â\â,0,'&- 73>EETLbRnXx}`vipqkxheцbύ`Δ^Λ]ͣ\ͭ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ,+$+&48>KGV}Q^vYen_jhendkraqt_vv]{x[yYzX|W}V~TSSSSSSSSSS   +06=@H}KQuTXmZ]g`bcfe_kg\piZtkXxlW|nUoTpSqRqQrPsPsPsPsPsPsPsPsPsPs־ "!..9:|DCtNJlTPeZT`_X]eZZj\Wn^Ur_Tv`RyaQ}bPcOdNdMeLfLfLfLfLfLfLfLfLfLf %1*|<4sF;jLAcSF^YIZ^LVcNThPRlQPoROrSNvTLyUK|UJVIWHXGXGXGXGXGXGXGXGXGXGX'{3$q<,hC2aJ7[P;VV=S\@P`ANdCLhDJkEInFHqFGtGFvHEyHD|ICIBJBJBJBJBJBJBJBJBJBJ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9G%N1U=[HaSh^ohxp~xz~vspnkjhgffǔfДhГiДiДiДiДiДiДiДiДiД( 9F$M0T >(@0C8H?NEUK޻^TдdeŬksqx~' 7=='?/B6G0C4L6R?YQ¾`bfpl}rx~}xustwx¨x¨x¨x¨x¨x¨x¨x¨x¨' 588#9(<,B.L-O=WP^`doj|pv||vrommp§r§r§r§r§r§r§r§r§r§& 466!6%9'@&I(NNLVY]eco~jxvpnwhc·_ΐ[͚YͥWβV“VДWϕWϕWϕWϕWϕWϕWϕWϕWϕ& ,& '4#=3EBKPR\Xf|_ntfulmzfua}]܆ZۏX٘VءTجTطSɋS֋S֋S֋S֋S֋S֋S֋S֋S֋$ &  &2(;8CFKRR\|Yds^kjdpeluatx^|{[}YVߒUޚSޢRݪQݶQݿQݿQݿQݿQݿQݿQݿQݿQݿ!   &1,;:DGLQ|SZsY`k_fefjamm]tpZzsXtVvTxSyQzP{O|N|N|N|N|N|N|N|N|N|  ' 2.=;EE{MNrTUkZZd`_`gb\meYrgWxiU~jSlQmPnNoMpLqKrKrKrKrKrKrKrKrKr )!4.?9{GAqNHjTNcZR^`VZfXWlZUq\Sv^Qz_O`NaLbKcJdIeHfHfHfHfHfHfHfHfHfͻ, 7+zA4pG;hMAaTE\ZIX_KUeMRjOPnQNrRLwSK{TIUHVGWFWDXDYDYDYDYDYDYDYDYDY".y8%n>-fE2_L7YR;UX>Q]@ObBLfCJjDInEGrFFvGEzHC~HBIAJ@K?K?K?K?K?K?K?K?K?K $w-l3c:$\B(VI,QO/NU1KZ3H^5Fb6Df7Ci8Al8@p9?s:>w:={;<~<:<:=:=:=:=:=:=:=:=:=u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁v$w5yBI'Q2X=_HfQ~nZywbuiqnmskvhyf{d}cba`Ă_΂_׃aۃc݃d݃d݃d݃d݃d݃d݃d݃d݃w$x5|AH'O2V=]GdQlZ|tbxitoptlxj{g~fdba`Dž`Ӆbمd܅eۆeۆeۆeۆeۆeۆeۆeۆeۆx$x5~@G&N1U<[FbPiYqb{{ivprunyk}ifecbaˇbՇdڇeوgىg؉g؉g؉g؉g؉g؉g؉g؉y#y4?F&M0S;ZE`OgYna~xiyptvp{mjgedbÉbЊd؊f؊g׋h֌i֌i֌i֌i֌i֌i֌i֌i֌y#z4>E%L/Q:WD]NeXkati|pwvs|okhfdcnjcԌf֌hՍiԎjԎkԎkԎkԎkԎkԎkԎkԎkԎz#{4=D$J.N8TBZLaVi_phzp{wv|qmjgfeǎfԏhӏjӐkґlґmґmґmґmґmґmґmґmґ{#|4<C$H-L7RAXJ_Tf]nfwo态v{}uqnkihhϓkѓlГmДoГoѓoѓoѓoѓoѓoѓoѓoѓ|#}4;A#F,K5P?VH]Qc[kdumކ~u؀|zvromlkȖmϖoΖpϖqϕrϕrϕrϕrϕrϕrϕrϕrϕ|#}4:@"E+I4NEK2TC[Saahmnwtz{upmjiÜk˛n̚o̙o̙o̙o̙o̙o̙o̙o̙!+ 3214;?I0RBYQ`_fklur~xztojgdcd͘g͘h͗h͗h͗h͗h͗h͗h͗h͗!) 0.,/8 =H.P@XO^]dhjrpz{vt}nhda^]]Д`ДaДaДaДaДaДaДaДaД!( , (& (2 >G,O=VL\Ybehn{ovtu|m|hc_[YXWԎYӏZӐZӐZӐZӐZӐZӐZӐZӐ!'' !  0=F,N:UH[Ua`|gitnpmuvg|{b˄~^ʍZʗWʣUʯT˾SՆTوUىUىUىUىUىUىUىUى% /:"C1J>PJWT|^]tedlljftoa|s\لvYَyU٘{Sڣ|Qڰ}P۾}P|P~QQQQQQQQ  .9'B5IAPK{WSr]Zjc`dje_ri[zlWnSqPrNtLuKvJvJvKuKuKuKuKuKuKuKu !.9*B6JA{RIrWPi\VccZ]i^YpaUwcRfOgMiKkJlImHmGnFnFnFnFnFnFnFnFnӺ "/:+C5zL>qQEhVKa[O\bSWhVToXQuZN|\L]J_H`GaFbEcDdCdCdCdCdCdCdCdCdֲľ %2<)yE2oJ9gO?_UCZ[GUaJRgLOlNMrOKxQI~RGSETCUBVAW@X@X@X@X@X@X@X@X@XƸ  (4w<%mB,eG2]M6WS:SY=O_?LdAJiCHnDFsEDyFB~GAH?I>J=K$[D)TJ,PQ/LW2I\3F`5De6Bi7An8?s9=w:<|;;<9=8=7>6>6>6>6>6>6>6>6>|q$ h+_2W9Q?LF!HM#ER%BW'@[(>_)vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj$i2 l>vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj#i1 n>wE|M(~T3|\E%L.S8ZAaKiS|q[v|bqhmmiqfucxaz`{_|_}b}c~df߀g߀g߀g߀g߀g߀g߀g߀g߀o!o0 ~6<D$L-R6Y@`IfRnZ|yawhrnmsjwgze|c~bÀbӁd߁eނg݂h݃i݃i݃i݃i݃i݃i݃i݃i݃p!r/ 4;C"K+Q4W=]FdOkXu`|hwnrtnyk}hfee˄f܄hۅiۅkۅlۅlۅlۅlۅlۅlۅlۅlۅq!t. 3:C!I)N2T;[DbMiUs^ۂ|f|owurzoljiiĈi؈kوlوmوoڇoڇoڇoڇoڇoڇoڇoڇq v, 2:B G'L/R8X@_IgRڏp\чxfʁo|vw|tqomllϋn׋o؊p؊qىqىqىqىqىqىqىqىr x+ 09AE%J-P4V<\EܛeOғm\ʌufÆ}ov|}xusqppɍqՍs֌t֋t؊t؊t؊t؊t؊t؊t؊t؊s z* /9?C#H*N1T8\@՟bN˘k[Ñrfzow}}ywuttŏuԎvՍwՍw֋w֋w֋w֋w֋w֋w֋w֋s |) /8=A!F'L-R3ܪY?УaMƜiZpewov}~{yxxyӐzԏzՍ{֌{֌{֌{֌{֌{֌{֌{֌t~( .8<?D$J)Q.֮W>˧_MgZneun|v}~}}~Б~ӏ~Ԏ~Ս~Ս~Ս~Ս~Ս~Ս~Ս~Սt'.7:=B H$߷N,ѱU=Ǫ^LeYldsnzv|̑ӐԏՍՍՍՍՍՍՍՍu&- 68;?FڻK+ʹT<®\KcXjcqmwu~|}{ɑ|Ӑ|ԏ}Ս}Ս}Ս}Ս}Ս}Ս}Ս}Սu%- 568=EվI*ȸS;[JbWhbolut|{|yvtƑuӐvԏxՍxՍxՍxՍxՍxՍxՍxՍv$, 235:?H)ĻQ9YH`Ugamktszz{vronÐnӏpԎrՍrՍrՍrՍrՍrՍrՍrՍw", 0 /17 ;F'P8XG_Te_kirqxx~ztoliggՎiՍl֌l֌l֌l֌l֌l֌l֌l֌x!+, * + 29E%N6VE]Rc]igpovvy}|snieca`ҋc׋e؊e؊e؊e؊e؊e؊e؊e؊z )'$$'7C#L4TB[ObZhdnlytrs{xm}hc_][ZЇ\ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ~& %5A!K1R?YL`Wf`zlgssmlzsgwb{^~ZXVUρVނX݂X݂X݂X݂X݂X݂X݂X݂ &6@I-Q;XH^R{eZskalrgfylaǁp]ƊtYƔvVşxSƬyRƻzQyQzS|S|S|S|S|S|S|S| &4? G-O9VD{]LsdTlkZfr_ayd\ԂgXԋjUԕmRԠnPԭoNռpMoMpNrNrNrNrNrNrNrNrع  ' 4>$G0N:zTCqZJiaPdhU_pYZx\V_SbPdMeKgJgIgHgJgJgJgJgJgJgJgJg ۱ʽ (5?&G1yN9pT@hZFa`K]gOXnRTuUQ}WNYK[H\F^D_C_B`A`A`A`A`A`A`A`A`ާ˶ +6@&xH/oM6gS<`X@[_DVeGRlIOrKKyMHOEQCRAS?T=U=VLh@InAFuCC|D@F=G4>3?3?3?3?3?3?3?3? y o( g0_7X>RDLJ"HP$DU&AZ'>_);d*:i+8n,6t-4z.3/1000.1-2-2-2-2-2-2-2-2 ujb!Z) S1M8H>CD?JwFxN(wV1t_:nhAjsHf~NbS_V\ZZ\X^W`UaTbScSdRdTdVdXdYeZfZfZfZfZfZfZfb$^/j5 t<zD|L'{T0w\9reAloHh{NdS`X][[^Y`XbVcUdTeSfTfVfYfZg[h\h\h\h\h\h\h\hc$_.m3 w:}BJ&R0|[8wcAplHlwOgTcY`\]_[bYdXfWgVhUhViYh[i\j]k^k^k^k^k^k^k^kd#a-p2 {8@I%Q.Y7|a@viHpsOlUhZd^aa_d]f[hZjYkYkYk[l]m^n_n`o`o`o`o`o`o`oe#d+s0 ~6?H$O-W6^>|fFvpNq{UmZi_ecbf`i^k]l\m\n]n^o_qaqbrcrcrcrcrcrcrcrf#g)w. 5>G"N+U3\_JeUl^sfzlrw|{wtrƒrڃsށt߀uuuuuuuo#+,,16ɻCM.V<]IdTj]qexkqvyzu~qnlkՂmށo߀pppppppq!)'&*5ĿAL-T;[GbRi[ocvj~|oxtsyo|khfeрfh~j~j~j~j~j~j~j~u % "3 @J+S9ZEaPgYm`~tgxzmrrmvhyd|a~_~_~_}b}c|c|c|c|c|c|c|x0 >H(Q6XB_MeVk]xrdryilngrbu_x\zZzYzXz[z]y]y]y]y]y]y]y} . ;F%O3V?]IcRxjYqp_kwdfiam]pYrVtTtStStTuVuVuVuVuVuVuVuٸ +9D"M/T;[DxbMqiSkoYev^`~b\‡fXhUkRlPmOmOlOnPoPoPoPoPoPoPoگͻ +9CK*S5yZ?qaFjhLeoR`vV[~ZWχ]Sϑ_PϜaNϩcLϸcKcLbJeKfKfKfKfKfKfKf ަδ¿ - 9B J*wP3oX;i_AcfF^nJZuNV}QR߆SOߐVMߛWKXIYHYHYGYF[F[F[F[F[F[F[ѭ¸ .:C!vJ*nP1fV7`\<[d@WkCSrFPzIMKJMHNEPCQBQARAR@Q@Q@Q@Q@Q@Q@QԥIJ$1~;tB lH'eO-^U1Y[5Ub8Qh;Mo=Jv?G~ADCBE@F>G4>3?3?3?3?3?3?3? v$n- f5_<XCSINO!JU$F[&C`'@f)>k*;r+9y-6.4/1001.2-3,3,3,3,3,3,3,3}rha'Z/ T7N>IDEJAO>U;Y9_6d4i2p /w!-"+#($'%&&%&%&%&%&%&%&%&xo d\T N'H/C6 ?< sHrQ&oZ.jc6enxqFs{MnSjXg]e`ccae`g_h_i`iajbjcjdieieieieieiei^#i"v#, 6>EL"S*Z2߅e;~mExvMtTpZl^ibgeehdjckclcldmflglhkhkhkhkhkhkhk_#k y"+4 <CJP&X.׊a:΄jE~sMy{Uu[q`ndlgjjhlgngogohoiojnkmkmkmkmkmkmkm_#n{!*2 :AGM!ږU-Ϗ^9ȉgDoM~wUy[v`sephnllnkpkqkrlqmpmpnonnnnnnnnnnnna!p~ )1 8 >DߠJӚR+ʓ\8dCmMtT~|[zawetirmpporosospsprqqqpqpqpqpqpqpqpc r'/6 ;@ڤFΞQ*ŗZ7bBjLrTy[`|eyjwmupssstsutttsuruqupupupupupupet&-4 7 =ԧDɡO)X6`BhKoSvZ~`e}j{nyqxswuwvxuxtxsxqxqxqxqxqxqxqgw$+03ܮ7 ϪCťN(W5_AfJmStZ{`ejn~q}t|u}|v|}v|}t}|s}|r}|q}|q}|q}|q}|q}|qiy#),/ײ4 ˭AL'U4]@dIkRrYy_dimq|tyvwvvvvtwsxrxqxqxqxqxqxqk{!&'ߴ)ҵ2 ǰ@K&S3[>cHiQpXw^~di~mzqvssuqvovptqsrrsqsqsqsqsqsqm~" ں!͸1 ´>I$R1Z=aGhOnWu]|c}hxltpprmtjuiuitksmqmqmqmqmqmqmqpӽȻ/<G#P0X;_EfNlUs[}zawfrjnnjqfsdscscreqgpgpgpgpgpgpgpsپ -:F!O-V9^CdLjS|qYvx_qclhhkdn`p^q]q]p^p`oaoaoaoaoaoaow׵ *8DM+U6\@bI|iPvoVpv[k}`fdbg^j[lXmWmWlWlZlZlZlZlZlZlZl| ح ͸ '6AK(S3Z<}aEvgKpmQjtVe|[`_\bXeUfSgRgRgQhShThThThThThTh ۥαŻ#3 ?H$Q.}X8v_?ofFilKdsP_{T[XW[T]Q_O`M`M_LaMbMbMbMbMbMbMb Ъŵ / <F~O)vV2o^9hd?ckD^sIZzLVʃORʍROʘTMʥVKʳWJWIVIXGYHZHZHZHZHZHZԢǯ !0 ;}DuM$nU+g\2bd7]k;Yr?UzCRڃENڍHLژJIڥKH۳LGLFLFLDOCOCOCOCOCOCOۚʩ %3 {<sDkK"dR(^Y-Y`2Uh5Ro8Ow;L=I?GADBBCAD@D@D@D@C@C@C@C@C@Cͣ (x2 p;iCbJ\P#VW'R^+Oe-Ll0Is2F{4C6A7>9=:;;:<9<8<8<8<8<8<8<8<|t&l0 e8^@XGSMOT KZ"Ha%Eg&Bm(@u*=}+:-8.6/40312212121212121212yog"`,Z4 T<OCJIGOCU@[>a;f9m6t 4}!1#/$-%,&+&*')')')')')')'~ukb[T&N.I5E< AC >H;N8S5X3^1d.j,r*z'%$#"!!!!!!~pg^ VOI C'?.:47:3?0D.I ,N )S 'X %^ #d !l t }L*H3O4T7ZA\JZTW`$Tk*Px/M3J6G9F;EC?B?B@AAAAABABABBADAFBGBGBGBGBGBGBM)J2Q2W6\?^I]SZ^$Wi*Su/P4M7J:HFNW&~a1xj:ssBo|HlMiQfUdXcZa\`^`_`_a_a_c_d_d^d^d^d^d^d^[ ht~#+4 ;CJڊT%Ѓ]0~g:xoBtxHqNnRkViZg\e_dadbdbdbebfag`h`h`h`h`h`h`]jw!)18 ?ݔGҎQ$ʈ[/ƒd9~lAytHu|NrSoWm[k^j`hchdhehdidjckbkakakakakaka_mz'.5; ֘C̓O"čX.a8iA~qHzyNwStXq[o_nbmdlflflfmendncnbnbnbnbnbnbao|$+1ݠ6 ќAǗM!V-_7g@nH~vN{}SxXv\t_rbqepgphpgqfrerdrcrcrcrcrcrccq!',ؤ2̟@ÚK U,]7e?lGsM{S}Wz\x`vcuftgththugvfueududududududet#ߦ&ҧ0ȣ>IS+[6c?jFqMxRW\}`{czf~yh{yizyiyzhzzfzyezydzydzydzydzydzydgv۫Ϊ/Ħ=HQ*Y4a>hEoLvR}W[_~czfw~hu}is~is~ht~ft}eu|du|du|du|du|du|dixծʭ-;FP)X3_bpC^wGZKVNSPPRMTLTKTKTJUJVJVJVJVJVJV֘ɥ(6 AyJrR&lZ-fa2ah7\oqHjPdX%__*[g/Wn3Sv6P9Lӈ;JӔ>GӠ?EԮ@DԿAC@D@BBADADADADADADјå }&u2n<gEaM\U W]$Td'Pk*Ms-J|0H2E4C5A6@7?7?7?6=8=8=8=8=8=8ơyq'j2d; ^CXKSRPYL` Ig#Go%Dw'A)?*=,;-9.8/7/7/6/6/6/6/6/6/{tmf&_/Z8 T@PGLNHUE[Bb@h=p:x8 6"4#2$1%0&/&.&.&.&.&.&.&yphaZ#T+O3J;FB CI @O=U:[8a5h3o0x.,*)('&&&&&&xlc\UOI&D.@4<;9A6F3L1Q .W ,] *d (l %u #! yk^VO IC> 9'5-23.8+=(B&G$L"Q W^enx        B-B2H2L6N<PGPRN_KkHw$E'B*A,?.?/>0=1=2<2<3;3;4;4;4<3<3=4?5?5?5?5?5?5C,D0J0N4Q:SFRQQ]Ni Kt$H(E+C-B/A0@1?2?3>4>4>5=5=5>5>5?4?6A7A7A7A7A7A7D,G.M.Q2T9WDVOTZQf Nr%K})H,F.E0D2C3B4B5A6A6@7@7@7@7A6A7A8C9D9D9D9D9D9E+I,P,U/Y7\B[MXWVc Ro%Oz*L-J0H2G4F5E6E7D8D8D9C9D9D9D9D:E;FH?J@J@J@J@J@J@G*P'X&^*c3f= fGdQ`[ \g&Yr+V}/S3Q5P7N9M;LK>L=K?KAJBLCMCNCNCNCNCNCJ(T$\#c(h0l; lDjNfXab%^m+[x0X4V7T9S;Q=Q>P?O@O@OAOAOCNENFPFQGQGQGQGQGQGM%W!` h&n.r8 rApKmTh^$di*at0^~4[8Y;W>U@TBSCRDRERFRFRHRIRJTJUJUJUJUJUJUJP#[dm$s+w5x>wGtPoZ"ke)go/cy5`:]>[AYCXEWGVIVJUKUKVLVMVMXMYMYMYMYMYMYMS ^hq"x(|1~: }CzLvWra(mk/it6e};b@`C^F]H[KZLYNYOYOZPZPZP[P\P]O]O]O]O]OValu |%.7 ?H}Sw]'rg0np7jxHQ%X._5f<}mAxtFs{KoOkRgUdXaY_Z_Y_Y_XaWaWaWaWaWaWo  ߍҘʢ© /<FO#V,]3}d9wk?rqDnyHiLePaS^U[WZXYWYWYV[U[U[U[U[U[Us ̜ؑå ,9DM T)}\0wb6qi|HuP!oX'j_-ee2`l6\t:X|>UAQDNFLHJHIHIHHIHJHJHJHJHJHJΔ¡ /{; tEnNhV!c]'^d+Zk/Vr3S{6O9LG?F@E@E?DACBCCCCCCCCCC֍ƛ y*r7lBfKaS\[Xb#Ti'Qq*Mz-J΃0HΎ2EΚ4CΨ5Bθ6A5A5@7?9>9>9>9>9>9ʖx sn&h3b> ]HYPUXQ`NgKo Hx#Fށ%Cތ'Aޘ)?ަ*>ߵ*=*=*<+;-:.:.:.:.:.vnic'^2X;TD OLLSI[FbDjAr?{<: 8!7"6#5#4#4#4#4#4#4#4#uid^Y&T0O8K@GG DN AU?\A;G8N5T 3Z 1a /i ,r *} (&%$#""""""sgYSMHC?&:-73390?.D+J)P'V$]"e ny         tgXMGB <840%,+)0%5#: ?DIOV^hr~      9/<0A1D4D:DEEQ C]Ai>v<:9 8!7#7#6$6%6%5&5&5&5&5&6&6&6&6'6(6(6(6(6(9/>/D/F2H8HCHO G[DgBs?=$=%=&<'<(;);););*;*;)<)<*;+;,;-;-;-;-;-<-D)J)N,Q4R>RJ PUMaJmHxE"C$B&A'@(@)?*?+?+?+?,?,?+?,?->/>0?0?0?0?0?0@*H&N&R)V2W<WG UQR]PiMt J#H&G(F)E*D+D,C-C-C.C.C.D-C0B1B2B3C4C4C4C4C4C'K#R"X'\/]9^C [NXXUdRo Pz$M'L)J+I-I.H/G/G0G0G0H0G2G4F5F6F7H7H7H7H7H7F$O V]$a,c5d@ bJ^T[_Xk Uu%S(Q+O-N/M0L1L2K3K4J5K5K6J8J:J:K;L;L;L;L;L;J!S[b"g)i2j< hFePa[^f [q%X{)V,T/R2Q4P5O7N8N9N:N:O;N=N=N>O>P>P>P>P>P>MV_g l&o.p8oB lKiWebal%]v*[~/Y2W5V7T9S;SR?R?R?RARASASATATATATATAPZdlq#u*v3v= sGoSk^fg&cq+`y0^4\7Z:YW@VBVCUCVDVDWDWDXDXDXDXDXDXDS]hpv z&|.|8zD uOpZlc&hl,fu1c}5a9_<]?\A[CZEZFYGZGZG[G[G\F\F\F\F\F\FU`ktz")ނ3@ zLvVq`%nh,kq2hy6f:d=b@`C_E^G^I]J]J^J_I_I`H`G`G`G`G`GXcnw~#և.̃= I{Sv]%se,om2mu7j|;h>fAeDcGbIbKaLaLbLcKcJdIdIdIdIdIdIZfqz݋Ћ,Lj; GQ{Z$wb+tj1qr6oy;m?kBiEhHfJfLeMeNfNgLgKhKhJhJhJhJhJ\ht}֏ˎ*Œ8 DOX#|`+xh1uo6sv;q}?oBmElHkKjMiNiOjOkNkLkKkKkKkKkKkK^kv ۏ Вǒ'6BMV"^*}e0zl5ws:u{>sBrFpIoLnN}nO{mPznPyoNyoMyoLyoKyoKyoKyoKyoK`m y ۋ ԑ ̕•%4AKT!\)c/~j5|q9zx=xBvEuI|sLyrNvrPurPsrPtsOtsMtsLtsLtsLtsLtsLtsLbo { ކՎϔ ǘ#2?IR Z(a.h4o9v=}~A}{EzyIvxLswNqwPovPnwPnwOnwNnwMowLowLowLowLowLd r ~ڈАʗ›!0=GPX'_-f3m8t={{AxEtHq}Km|Nk|Oi{Ph|Ph|Oi|Ni|Mj{Lj{Lj{Lj{Lj{Lf uԋ˓Ě.; ENV%],d2k7zrmBiFeIbK_M^N\N]M]L]K^K^K^K^K^Km|Ոʒ )6 AJR!~Z(y`.tg3on8kuQ@OBMCLCLCKCKDKDKDKDKDKD}ϋ–-}9 wCqLkSfZ"ba&^h+Zo.Vw2S5O8L:JE?E?E?E?E?ڃǑ {(u5o@ iIdQ_X[_ Wf$Tn'Qv*M-J0H2E4C4B5C4B5A7@7@7@7@7@7΋{tp"k0f<aE \NXVT]QdNlKt"H~$EȈ'Cȕ(AȢ*?ȱ+>+>*>+=-<.<.<.<.<.ē{pg d`*\6XATJ PR MZJbGiErB|@؇=ؓ<ء:ٰ 9 9 9 8"7#7#7#7#7#{pe]ZV'R2N<JDGMEU B\ @d>l;v9754221111111{ocXTQM&I/E8A?>G94 0,)&""',16<AHOW a l y 116.:/;2;9;C9O8\ 6h 4t2100//.........//......3/9,=->0?6?A=M<<;::9999999:9!9#9$9$9%9%9%9%<'C#H"L&O/P9NCLO J[HfEqC|BA@?? > >!>!>!>!>!?!>#=%='=(=(=(=(=(=(?#G LQ$U,V5U?SJ PVNbKmIwGFE D!C"C#C#B$B$C$C$C%B(B*B+A+A,A,A,A,A,C JPW![(\2[;YF VQT]QhOrM|K J!I#H$G&G'F(F(F)F*G*F,F.F/F/F/F/F/F/F/FNV\`%b-b7`A]L ZXXcUnRwP"O$M'L(L*K+J,J-J.J/K/J1J2J2K3K3K3K3K3K3JRZaf!h)h2g<dH aT^^[iXr V{$T'R*Q,P.O/O1N2N3N4N4N5O6O6O6O6O6O6O6O6MU_fkm$n,m6kCgOdZ`d]m"[v&Y~)W,V/U1T3S4R6R7R8R8R9S9S9S9T8T8T8T8T8OYcjort&t1q?mKiVf`ci"`q'^y+\.[1Y3X5W7W9V:V;VZ?Z?[>[>\=\<\<\<\<\`>`=`=`=`=Wb l t z ~ ҁȁ'6|B xMuVr_"of'ln,ju0h|3g6e9db@bBbBbCcBcAd@d?d?d?d?d?Yd n w}Ԃ ̄Å$4@ |KyTv\!sd&qk+or/my3k6j9h I}RzZ wa&uh+so/qw3o~6n:m=k?|kByjCxjDvjEvkCvkBvkAvl@vl@vl@vl@vl@] it|ЃɈÊ /< GP~X|_%yf*wm.ut2t|6r9|q=yp@voBtnDrnEpnEpoDpoCqoAqo@qp@qp@qp@qp@_kvˆŋ -: ENV]$~d)|k-zr2}xy5zw9wvf~Ac~Ca}D`}D_}C`}B`}Aa}@a}@a}@a}@a}@gtLj&3? HPX z_%ve*rl.ns2j{6f9c<`?]A[BZCZBZA[@[@[?[?[?[?jx̓Œ#1< FNzVu]#pc(lj,hq0ey4a7^:Z=X?V@T@T@T?U?U>U>U>U>U>o|ȇ .9 CyLtSoZ ja%fh)co-_w0[4X7U9R;P=O=O,=-=-=-=-=-ljsj gc(_5[?WH TP PXM_JfHnExBÂ@Î>Ü<ë ;ü!:!;!9"8$8$8$8$8$uj^YW!U.Q9NCKLISF[ Cc Ak>u<р:ь8њ6ѩ5ѻ45433333uj^TL JH&F2D<BE?M=U;]9f7o 5z 3 1 0..--,,,,,vj^SIEB@$=.:68>6F3M1U/]-e+p){(&%$#""""""wj]QF?<96 3(10.6+=)D'J%R#Z cn{xj]PD:52 .+(!&'#- 39?EMU_jx       yk^PC8/+'$!#(-28? F OYer,/0,2,30160A/M-Z+f)s(~ ' ' ' & &&&&&&&&&&''&&&&&&.,3)5*6-645?3K2W0d.p ,{ , + +****)))))**+***))))1)6&9&:);2;=9H7T5`3l 2w 0 0//.........//.......4&9#=#>&A/A9?E=P;\9h 7s 6~5443333333334332322228#= AE#G,G6F@DLAX?d >o>=========< qInRl[ibgj"fq%dx(c+a.`0_3_5^6^8^8_7~_6~`5~`4~`4~`4~`4~`4U`ipuxz{z/x<uF sPpXn`kg!jn%hu(g|+f.d1c4c6|b7zb9yb9xc8xc7xd6xd5xd5xd5xd5xd5Wblsx{} ~~,|9yD wNtVr]pd nk$lr(kz+j.~i1{h4xg6vf8tf9sf:rf9rg8rg7rh6rh5rh5rh5rh5Yenv{ *7}B {KxTv[tb ri$qp'~ow+{n.xm1vl4sk6pj8nj:mj:lj:mk8mk7mk6mk6mk6mk6mk6[gqy~ (5@ I}R{Yy`wg#|un'ytu*vs}.sr1pq4mp6ko8io:ho:go:go8ho7ho6ho6ho6ho6ho6^jt|%3> GPW~^{|e"xzl&tys*qx{-nw0kv3hu6ft8ds9bs:bs:bs8cs7cs6cs6cs6cs6cs6amw#0<ENU{\wc!sj%oq)l}y,i|/f{2cz5`y7^y8]y9\y9]y8]x7^x6^x5^x5^x5^x5dpz .9C LzSuZqa nh#jo'gw+c.`1]3[6Y7W8W7W7X~6X~5X~5X~5X~5X~5ht~+7A yItQpXl_hf!em%at(^},[/X1U3S5R5Q5Q5R4R4R3R3R3R3ly '~4y>sG oOjVf]cc_j"\r%Y{(U+R.P0N1L2L2L2L2L1L1L1L1L1q~|#w0r;mD hLdT`Z]aYhVp!Sy$P'M)J,H-G-F-F-F.F.F.F.F.F.w}wso,j7eAaI ]QZXW_SfPnMvJ!H$E&C'B(A'A'@(@)@)@)@)@)~ul ie'a3^=ZFVN SU P\McJkGtE~B@> < < < ;!:":#:#:#:#yma]Z X-T8QBNJLRIY F` DhAq?|<:8767554444{ocXP ML%J1G;EDCLAT>\=<&;19;8E6M5V3^1h0s.,ۍ*ܝ)ܭ(('&& & & & ~qeYMC:5 31 0*.3-<+D*L(T']%g#s" reYLA8/- +(&$$+"2!9AIQZersfYK@5,&$ !"(.5<CL V b ougZK?3)!  # (.5=FQ]k{',**+**.&4%?#K!X dp{     )*,'.'-*,2+=)I'U%a#m"x"!!!!!!!!!!!!!"" " ! ! ! ! ! ,&0$1#1&2/1:/F-R+^)i(u''&&&& & & & & & & & ' ' & & & &&&&/#3 57#8,876B4N2Z0e.p-{-, , , + + + + + + , , , , ,,,,,,,37:= ?(?2=>;I9U7a5l4v3 2 2 2 1 1 1 1 1 1 2 2 2111111117;?CF$F.D9BD?P=\FJDVCbAl @u ?~ >==<<<;;;<<<<<<<<<<>DJOQR#Q-O8MEKQI\Gf FpExDCBBAA@@@@AAAAAAAAABG OSVWV%U1S?RLPW Na LjJrIzHGGFFEEEEE F!F!F"F!F!F!F!F!EK S W Z[ZZ+Z;XHVS T\ RePmOuN|MLKJJ!I"I#I$J$J$J%K$K$K$K$K$K$H OV[ ^ ^ _`'_6^C[N YXWaUiTpSxRQP O"N#N%N&N'N'N'O'O'P&P&P&P&P&J SZ_bc ce#e2c@aK ^T\][eYlXsVzU T"T$S&R'R)R*R*S*S)T)T(T(T(T(T(LV]cghhj i/h<eG cQ aZ_a^i\p[wZ~!Y#X%W'W)V+V,V,W,W+X*X*X)X)X)X)OY`gjllmn,l9jDhN fWd^be`l_s^{!]$\&[([*Z,}Z-|Z.zZ.z[-z\,y\+z\*z\*z\*z\*Q[djnpp qq)p7nBlK jTh\fceicpbx!a$`&}_){_+x^-v^.u^/t^/t_.t_,t`+t`+t`+t`+t`+S^gmqss uu't4r?pI nRlYj`ighnfu!}e}$zd&wd)uc+rb-pb/ob/nb/nc.nc-nc,nc+nc+nc+nc+U`iptwwxy$x2v=tG rOpWo^md}lkzks wjz#ti&rh)og,mg.kf/if0if0ig/ig-ig,jg+jg+jg+jg+Xclsxzz{|"|/z;xE wMuUs\{rbxpiuop rnx#om&ml)jl+hk.fk/dj0ck0ck/dk-dk-ek,ek,ek,ek,[fov{~~-9}C {K ~zSzxZvwasugptnmsv"jr&hq(ep+bp-`o/_o/^o/^o/_o-_o,`o,`o,`o,`o,^iry+6@~I yQu}Xr|_n{ekzlhyt"ex}%bw'`v*]u,[u.Zt/Yu/Yt.Yt-Zt,Zt+Zt+Zt+Zt+amv} (4~>yG tOpVm]icfjcr `~z#]}&Z|)X{+V{,T{-S{-Tz-Tz,Ty+Uy*Uy*Uy*Uy*eqz $}1x;sD oL kTgZdaah^p[x!X$U&R)P*O+N+N+N*O*O)O)O)O)ju{!w-r8mBiJ eQbX^_[fXmUvR!O#M%K'I(H(H'I(I'I'I'I'I'o{~wso)k5f?bG_O \VX\UcSkPsM}JG!E#D#C#C#C$C$C$C$C$C$utn jf%c1_;[DXKUS RZ OaMhJqG{DB@>====<< < < |{oc_\Z+W6T@QHNOKW I^ Ff DnAx?<:988776666sgZS QO$M0J:HCFKDRAZ?b=k :u 8 64321100000ui^SGCB@'?2><5-% $#"%!. 7@JS^jx{naTH=3*" &-5=FP[i x }obUG;1'  # ) 08ALXfwqcVH:/% #*2<GTcs")#'#( +1=IVbnx$'&$&$$'"/ :FS_ju'#) ) (#)-'7%C#O![fq{+--. /)/4,?*K(W&b%m$w############$$$$$ $ $ $ $ .1256%6/4:1F/R-],h+r*{***)))))***** + * * * * * * 258;= <*;59A6M4X3c2m2v11000//// 0 0 1 1 111111169>ACB#A.>:=Ft ={ = < <<;;;;;;<<<<<<<<= BH K LLJJ,K;JHHSG]Ff Dn Cv C}BAA@@@@@@AAAAABBB@ FLOP O OQ'Q6PCONMXLa Ji IpHxGGFFEEEEEEFFFFGGGBJPTVU UV"W2V?TJSTQ] PdNlMsLzLKJJIIIIJJKKKKKKEMTY[[Z[\.[;ZFXPVY U`ShRoQvP}PONNNN N!N!O O OPPPPGQX]``^ `a*`7^C]M[U Y]XdWkVrUyTSSRR!R"R#}R#|S"|S!{T!{T {T {T {T JT\add}ICC_PROFILEc de'd4c@aJ_R ^Z]a[hZoYvX}XW}V {V"yV#wV$vV$uW$uW#uX"uX!uX!uX!uX!MW_dghghi$h2g=eGdO bW a^_e^l]s}]z{\y[v[!tZ#rZ$qZ%pZ%o[%o[#o["o["o[!o[!o[!OZbgkljkl!l/k:iDhM fU e\db}bizbpxaxu`s_p_!n^#l^%k^&j^&i^%j_$j_#j_"j_"j_"j_"R]eknonopp,o8mBlK jR ~iY{h`wffufnreupd~mckc"ib$gb%eb&db&db&eb$ec#ec"ec"ec"ec"U`hnqsqrst*s6r@pH}oP ymWvl^skdpjlmiski|hhfg!dg#bf%`f&_f&_f&`f$`f#`f#af"af"af"Xckquwuv wx'w3v=|uFxsN urUqq\npckojinqfnzcmal!_k#]k%[k&Zk&Zk%[k$[j#\j"\j"\j"\j"[fnty{yz {|$|1|{;wzDsyL pxS lwZivaguhdtoasx^r\q Zq"Xp$Vp%Up%Up%Up$Vo#Vo"Wo"Wo"Wo"_irx}~!{.w9rBnJk~Q h}Xd|_b{f_zm\yuYxWxTw!Rv"Qv#Pv$Pv#Pu#Qu"Qt!Qt!Qt!Qt!cmv}}yu+q6m?iGeO bV _\\cZkWsT}QO~M~ K}!J}"J}!K|!K{ K{ K{ K{ K{ gr{|vrn'j2f<cD`L\S ZZ WaThQqOzLJHFEEEEEEEEmxtn if"c.`8\AYIVPTW Q^ NfLnIxFDB@????????s~{le`][)X4U=REPMMTK[ Hc Fk CuA><:99998888zuh[V SQ#O/L8JAHIFPCXA_?h=r :} 8 6433322222ymaUKGED'B2A;?C=K;S9[7d5n3y1/.- ,, + + * * * }qdYMB; 875)423;2D1L/U.^,h*t)'&$###""""sg[OD:0* ('&'%0$9#B"K!U _lz͊͜ήuh\PD90(  "+4=HS_m~ߑ wj]PD8.%   ! ) 1 ;EQ^nyk^QC7-#  %.7BN]n{m`RD7+!  !)3>K[l&$%'.:G S _ k u           #!!$,7DP\gr{""! )4@LXcnw%&$%&%$0!;HT_is|)*),,!,+)7'C%O#Z"d!n!w!!!    !!!!""#######,.0332%00.<,I*U*_)i)r(z(((((((((()****** * * 02 6 8975(352B2O1Z1d0m0u0|/////////00 0 0 0 0 0 0 0 3 6< > =<99-:<:I9T9^8g7o7v6}6655 5 5 5 5 5 6 6 6777777;@BB ?>@'A6ADAO@Y?a>i=q=x< < ; ; ; ; :;;;<<<<<<<:@EHHF EG"H1H?GJFTE]DdClBs Bz A A @@@@@@@AAABBBB<DJNOMKMN-N:MFLOKXJ`Ig Hn Gu F|FEEEEEEEFFFGGGG?HOSUSQ RS)S6RBQKPTO\Nc Mj LqKxKJJIIIIJJ~K~K}K}K}K}KCLSXYXV WX%X2W>VHUQTXR_ Rf QmPtO{ONN}N{MzNxNwNwOvOvOvOvOvOFPW\^]Z[\"\/[;ZEYMXUW\ Vc UjTq~Tx|SzRxRvRtRrRqRpRpSpSpSpSpSpSISZ_ba^_``,`8^B]K\R[Y Z` }Yg{XnxXuvW}tWrVoVnVlVkVjVjWjWjWkWkWkWLV^beebbcd)c5b?aH`P}_W z^] w]d u\ks\rp[{n[lZjZhZfZeZeZeZeZeZeZeZeZOYafhief gh'g2f=eF{dMxcT ub[ raa paim`pk_yi_g^e^c^a^`^`^`^`^`^a^a^a^R\dillij jk$k0~j:ziCvhKsgRpgY mf` kefhdnfdvdcbc`b^b\b[b[b[b[b\b\b\b\bU_glpolmno!}o-yo8unArmInlPkkW ik^ fjedilait_h~]g[gYfWfVfVfVfWfWfWfWfWfYbjpsspqr|sxs*ts5ps?mrGjqNgqU dp\ boc_oj]nrZm|XmVlTlRkQkQkQkRkRjRjRjRj\fntwvuvzwvxry'oy2kx<hxDewLbwS_vZ ]ua ZuhXtpUsySsQrOrMqLqKqLqLpMpMoMoMo`jrx{zzz{t| o~l~$i/f9bB_~I]}PZ}W W|^ U|e R{nPzwNzKyIyHxFxFxFwGvGvGuGuGueow}~sl he b,_6\?YFWNTUR\ Oc Mk KtHFDBA@AA~A}A}A}A}ju}yjd`]['X2U;SCPJNRLYI`Gh Er B}@><;:;;;;;;q{se\W TR"P-M6K?IGGNEUC]Ae>o <:9)827;5C4K2S1\/f-q+*('&&%%%%%xk_SH=4/-, +)*2):(C'L&U$_#k"x {nbVJ?5,$ &/8AJUaoƑǤǹ~qdXK@5+#   ! * 4 > I U brԄԘԫsfYL?4*!    (1<GTctuhZM@3(  %.9ESdvwj\O@3'  *5CRcv#!! $ +7DQ]hr{ ) 4 AMYdnw%0=I U ` j s |   ",8DP[fow""!"" '2>KV`jrz&% ( )(& $+!8 DP[emu}   !"""#####) *./ -+("&/&='J'U(_(h(o'w'~''''''((())******-0342 .,.(/70D0O0Y0b0j/q/x///...///00011111058:95 46"818?8J8T7]7d6l6s6y55555555 5 6 6 7 7 7 7 7 3:?BB>;>?,?:?E?O>X=_=g^qF\pMYpTWp[UobSoj Pns Nn~LmJmIlHlGlGlHkHkHjHjHj^gnrrqzqqrktfucv`w(^w3[x<YwCVwKTwRRvYPv`NuhKuq It| GtEsCsBsAsBrBrBqCpCpCpclsvuvuvixcz^|\}Y~$W/U8S@PHN~OL~VJ~]H}eF}nC|y A| ?{ >{<{<{v;9 8 6 6 6 6 6 6 6 6 ox~wk^UNJHG%E/D8B@@G?O=V;_9h7s5310////// / v}peZOFA >=;(:19:7B6J5R3Z1d/o-{,*)(''''''~vj^TI@7210!.*-2,:+C*K)T(^&i%v#" }ocWMC80($#!! )1:BLVao~uh[PE;1' &.7ALW e t zl`SG<1' $,6@LYhy̌˟˳|obUH;0&  "*4?KZj}ݑݤ޶qdVI</$  '1=KZltfXK=/$  #.;J[m  (5ANZenw %1>JVaks{  "-9FQ\fow~( 4 ALWajrz   ".:F R \ e m u |   &3?KV_how}""%$! *8EPZbjqx~   !!""#####%(*+(! !$$%2&?'J'T']'d'l'r'y'''''(((()******(.353-*-.,/:/E0O/X/_/f/m/s.z.....///0011111-5:=<73 46'747@7J7S6Z6a6h5o5u5|555555566777772;ADC?; ;<"=0=;=E=Nk >k `inmmxmlnap[rVt RuPvNw'Lw1Kx9IxAHxIFxPDwWBw_@wh>ws<83245*555@5I5P5W5^5d4k4r4y4~4}4{5y5x5w6v6t7t7t7t7t75=BDB>98::&;1;;;D;L;S:Z~:`}:g{:ny:uw:~v:t:r:q:o;n;m;m<l<l<l<l<9BGHFC?> ??!@-@7@@}@H{@Oy@Vw?]u?cs?jq?rp?zn?l?k?i?h?g@f@f@e@e@e@e@>FKLJGCCCD~D){E4yE=vEEtDLrDSpDYnD`lCgkCoiCwgCfCdCbCaD`D`D_E_E`E`D`DAINOMKGGG|HxH&uI0sI:pIBnIIlHPjHVhH]fHdeHlcHuaG`G^H]H[H[H ZHZIZIZHZHZHELRQPNJJzKvLrL#oL-mM6jL?hLFfLMdLSbLZaLa_Li^Lr\L|ZLYLWLVLUL UL ULULULVLVLHPUTSQMzNuO pOmP jP*gP3eP<cPCaPJ_PQ]PX\P_ZPgYPpWPzUPTPRPQP PP PP PPQPQOQOQOKSWVUT|PuQpR kShTeT'bT1`T9^TA\THZTOYTVWT]VTeTTnRTxQTOTNTLTLT KT LTLSLSMSMSNVZYXWwTpUjVfWbW`X$]X.[Y7YY?WYFVYMTYTSY[QYcOXlNXvLXJXIXHXGXGXGXGWHWHWHWQY\[[}ZrXkYeZ`[]\Z\!X]+V]4T^<S^DQ^KP^RN^YL^aK]jI]tG]E]D]C]B]B]B\B\C[C[C[U]_^^x]m\e]__Z` WaUbRb(Qc1Oc9NcALcHKcOIcVGc^EcgDcqBc}@b?b>b=b`>`>`Yaaaataia_bYdTf QgNgLh$Ki-Ii6Hi>FjEEjLCjTBj\@ie>io=:731 12 3+353>}3F{3My3Tw3Zv3at3gr4oq4wo4n4l4j5i5h5g6f6f6f6f6f67>BA?<8677|8'z81w9:u9Bs9Iq9Pp9Wn9]l9dk9ki9th9~f9d9c:b:a:`;_;_;_;_;_;;BEDC@=;};y<u=#s=-p=6n=?l=Fk=Mi=Sg=Zf=ad=hc=qa>{_>^>\>[?Z?Z?Y?Y?Y?Y?Y??FHGFD@|?w@ s@oA lA*jA3hA;fBCdBJcAPaAW`B^^Be]Bn[BxZBXBWBVCUCTCTCTCTCTCTCBIKJIG}CvCqD mDjEgE'dE0bE8`E?_EG]EM[ETZF[YFcWFlVFvTFSFRGPGPGOGOGOGOGOGPGEMMLKJxFqGlGhHdHaI$_I-]I5[I=YIDWIJVIQUJYTJaRJiQJtOJNJMJLKKKJKJKKKKJKJKJHPOON{MsIlJgKbL_L\M!ZM*XM2VM:TMASNHRNOPNWON_NNgLNrKN}INHNGOFOFOFOFNFNGNGNLRQQQwPnLgNbO]P ZPWQUQ'SQ0QR8PR?NRFMRMLSUJS]ISeHSoFS{ESCSBSASASASARBRBRBQOTTT}SsSiQbR\SXT TURUOV$NV-LW5KW<JWDHWKGXRFXZDXcCXmAXy@X>X=Xc>=cEg4*!  "+5@N]nvgZNB7,"   )4BQbuɊɟʱn`SF:/$  (4CTg|fYL?2$ '5FXk,9EPZckrx~ (4ALV_fmtz "/;GQZbiouz )6AKT\cjpu{ "/;ENW^djpu{'3>HQX_ejpv|   ,7BJRY_ekqw~   $0;DLSZ`flry!%"*5>GNU[agmt|~}|zyxxx"),*'#$/9AIPV\bi} p| xz y!w!u"t"s#r#p$o$o$n$n$)020.*'# #$%*%4&=}&D|&Kz&Rx&Xw&^u&et'lr'tq'}o(n(l(k)j)i*g*g+f+f*f*/66540-*)*|+%y+/w,8u,@s,Gq,Mp,Tn,Zm,ak-hj-ph-zg.e.d.b/a/a0`0_0_0_0_04;::8520{/w0t0!q1+o14m1<k1Cj1Jh2Pg2We2]d2eb2ma3w_3^3]4[4Z5Z5Y5Y5X5X5Y58>>=<:}7x4t4 p5m5j5'h60f68d6?c6Fa6M`6S^7Z]7b\7jZ8tY8W8V9U9T9S:S:S:S:S9S9<A@@?~=x:s8n9j9g9d:$b:,`:4^:<];C[;JZ;PX;WW;_VN>N>M>N>N=N=?CCCBz@s=m<h=d=a>^>!\>)Z>1X>9W>@U?FT?MS?UR@\P@eO@oNAzMAKAJAIBIBIBIBIAIAIACEEEEvCo@h@cA_A \AYBWB&UB.SB6QB=OBCOCKNCRMDZLDcJDmIExHEGEEEEFDFDFDEDEEEEEFHHH{GrFjBcC^DZE VETFQF#OF+NF3LG:KGAJGIIHPHHXGHaFIkDIvCIBIAI@I?J?J?I@I@H@HIJJJwJnIeE^GYHUIQJOJLJ!JK)IK1GK8FL?ELFDLNCMVBM_AMh@Mt>M=MQS=R\U+=V24\F3]N1]W0]a/]l.]z,]+]*]*])]*\*[+[+ZUUUrUgV^VTWLYE[?]:_6` 4a2b1b#0b+/c2.c:-cB,cJ*dS)d](di'dv&d%d$d#d"d#c#b$a$aXXzYnYcYZZP\H^A`:c4f/h ,i*i)j(j&'j.&k5%k=$kF#kO"lY lelrlllkkjihh\\u\i]_]V^LaCdk7n0q)u"x{}}}~"~*~1~:~DNZh x  ~ ~ } } | { zewejeafVhLkBo9s1w*z#~    # + 3=HTaq~jqjgk[lPpFtQez)5AMV_fmty $1=HRZbiouz +7BLU]djpuz%1<GPW^ejpuz +6@JRY_ejouz$/:CLSY_djou{  (3=EMSY_djpv~   ,6? G N T Z _ e k r y  }|{{{ %/9AHOU[agnu}~|zxwutsqqqp%%#! )3<C~J|PzVy\wbvitqszqonlkjihhgg&***(%"|$z.w6v>tErKqQoXn^lek mi vh!f!e"c"b#a#`$`$_$_$_$,///-*(}$z" v#s# q$)o$2m$:k%Aj%Gh%Mf%Te%Zd&ab&ia&r_'}^']([)Z)Z*Y*X*X*X*X*13332/y-u*r( o(k)i)%g*-e*5c*=b*C`*J_+P^+W\+^[,fY,oX-zW-V.T.S/S/R/R/R/R/R/66665y3s1o/k.h-d.b.!`/*^/1\/9[/@Y/FX/MW0SV0[T1cS1lR2wQ2O3N3M3M4L4L4L4L4L39999|9t7n4i3e2a2 ^2\3Z3&X3.V35U4<S4CR4JQ4PP5XN5`M6jL6uK7J7I8H8G8G8G8G8G8G8;<<<x<p:j7d6`6\6 Y7V7T7#R7+P72O89M8@L8GK8NJ9UI9^H:hG:sF;E;D<C<B<B=B<B<B<B;=>>>u>l=f:`9[:W:S;Q;N; L;(K;/I<6G<=G\C>fB?qA?~@??@>@=@=@=@=@>?>?@@A|AqAh@a<[=V>R>N?L?I?G@%F@,D@3C@:BABAAI@AQ?BZ>Bc=CoE8=E?*VF)VO(WY'Wd&Wr%W$W#W"W"W"W#V#U$UMNuNiN_OVOMPER?S9V3X/Z+[*[(\'\$&\+%\3$]:#]C"]L!]V ^a^n^~^^^]]\[[Q~QpQdR[RRSJTAW;Y5[.^(`$b "c!cd d'd.d6e>eGeQe]ejezeeeedcbbTxUkU`VWVOWFY=\6_0b)d#gjllmm!m)m0m9}ICC_PROFILEnBnLnXnenu n n m m l k k jYrYfY\ZTZJ\A_9c1f*i$loru www w# w* w3 w< wGwRw_wowwvvuttt{]m]b^Y^N`EcM]pduWyK~?4)  &3ARdy\PD8,!  &5EWkӂӗөҸUI=0%  '8J]r &2=HRZbiouz !,8CMU]djpuz '2=GPX_ejpuz!-7AJRY_ejotz &1;DLSY_diotz  +5>FMTY_dinu{$.7@GNTY^diov~   '19AHNTY_dkrz~}{yxvuu t s s    * 3 ; B I~ O} T{ Zz `x gw nu vt r p omlkjiii~${-y6w=vDtJsPqVp\nbmjksi}hfecbba```"#$#" ~|z wtq(o0n8l?kEiKhQfXe^cfbo`y_]\[ZYXXXX'((('{%v#s q nki#g,e3c:bA`G_M^T\[[bY kX vV!U!T"S"R#Q#Q$Q$Q$Q#+,,-|,t*o(k%i"f!c"a"_#']#/\#6Z#=Y$CW$JV$PU$WS%_R%hQ&sO&N'M(L(K)K)J)J)K)K)./00w/o.j+e*c'_' \'Z'X($V(+U(2S(9R)@P)FO)MN)TM*\L*eJ+pI+|H,G-F-E.E.E.E.E.E-123|3r3k1e/`-],Y, V,T,R, P,(N-/M-6L-<J-CI-JH.QG.YF/cE0mC0zB1A1A2@2?2?2@2@2@2355y6n5f5a2\0W0T0Q0N0L1J1%H1,G12F19D1@C2GB2OA3W@3`?4k>5x=5<6;6;6:6:6;6;6;6678u8k8c7]6W3S4O4K4 I4F5E5"C5)A5/@56?6=>6D=7L<7U;8^:8i99v897:7:6:5:6:6:697989~:r;h;_:Y9S6N7J8F8 D9A9?9>9&<9-;:4::;9;B8;J7;S6<\52>1>1>1>1>2=2=;<{<n=d=\=U<N:I;E<A=>=<=:>9>#7>*6?15?84?@3@H2@P1@Z0Ae/Ar.B-B-B,B+B,B,B-A-A=>w?k?a@Y?R?I>D?@@K9L3N.P(S$T "U UVV$V,V3W;WDWNWYXfXuXXWWWVUUItJfK\KSKKLDM[6_.b&fjmps vx xyyyz&z/z9zDzPz_zpzzzyxxwj[_[V[L\B`9c0h(l ptw{ ~  (1<IWh{e`\`QaFdPdz͑ͤʹMA5) !1CVk !-8CMU]ciotz (3>HPX^djotz#.8BKRY_ejotz (2<EMSY_dintz",6?GMTY^chntz &08@GNSX]chnt| )2:AHMSX]ciow~}{zyxwxx  #,4;BHNS}X|^{dyjxrv{tsqpnmmlll  ~%|.z6x<wCuHtNsTqYp_nfmnkxjhg e d c c b b b }|| x u r (p 0o 7m >l Dk Ji Oh Ug \e cckbu`_]\[ZYYYY~xtqq oli"g*f2d9c?bE`K_Q]X\_ZhYrW}VTSRQQQQQ ""#w"p!ligfca_&]-\4Z;YAXGVMUTS\RdQnOzNMKJJIIIJ$%&{'q&j%f#b!`^ [YW"U)T0S7Q=PCOJMQLXKaIkH wG F!D"D"C"C#C#C#C"')*v*m*e)`'\%Y#W!U!R!P!N!%M",L"3J"9I"@H"FG#ME#UD$^C$iB%u@&?&>'>'='=(=(='>'*+-r-h-a,\+X(T&Q&N% L%J&H&"G&)E&/D&6C'<A'C@'K?(S>)\=)f<*r;*:+9+8,7,7,8,8,8,,.{/o0e0]/X.S+P*L*I* F*D*B*A*%?*,>+3=+9<+@;,H:,P9-Y8.d7.p6/5/4030202030304//1w2k2b2Z2T1O/K-G.D.A.?.=.;."9/)8//7/660>50F51N41W32b22n13}03/4.4-4-4.4/3/313t4h5^5W4Q4K2F1B2?2<2 938363 43&33-24414;05C05L/6U.6`-7l,7{+7*8)8(8(8)8*7*745q6e7[7T7M6G6B5=6:677 472718/8$.8+-92,99+9A*:I*:S);^(;j';y&<%<$<#<#<$<%;%;6|8m9b9X:Q9J9D9=99:5;2;/<-=,=*=!)=((>/'>6&>>%?G$?P#@["@h!@v @AAAA@@ ?9x:i;^<U<M<G<@<8=4>0@-A*B 'B&C$C#C%"C,!D3 D;DDENEYEeEtEFFFEEDD<s=f>[?R?J?D?=@6A1C,D'F$G !H III"I)J0J8JAJKKUKbKqKKKKKJJI?o@aAWBNBGBAB:C2E-G(I#KMO PPPP%P,Q4Q=QGQRQ_RmR~ Q Q Q Q P POyCjD]DSEKEDE>F6H/J)L$OQSV WXXX X( X0 X9 XC XN XZXhXyXXXWWWVsFdGYHPHHHAI:J2M+P%R UXZ] ` ` ```#`+`4`=`I`U`c`s`___^^^lJ_KUKLLEL=N5P.S'V Y\_b eg ghhhi&i.i8iCiOi]imiihhgfffOZOQOJOAQ8T0W([!^beh knp p qqrs!s(s1s<tHsVsfsyssrqqpaSVSOSEU;X2\*`"dhlo rvyzz {|}~"*5AO_q~~}\XTXIZ?]5a,e#josw { ",8FVh~Y]N_Cb8f.l$qw| #.<L^tSdGhHPW^dioty$.9BKRY_dinty )3=EMSY_dinsy #-7?GNSY^chmsz '09AHMSX]bgms{ !*3;AHMRW\agnu~~}}}} $-4;BGMRW\~b}h{pzyxvutrqpppp'}.|6z<yBwGvLuRsWr]qcokntl~kihgfeeee  ~| ywu!s)q0o6n<lBkGjMiRhXf_egcpbz`_^\\[[[[|vsr q nli#g*f1d7c=bCaI_N^U]\[ cZ mX xW V T S R R Q Q Q }tmjggf c a _ %] ,\ 3[ 9Z ?X EW KVQUYSaRkPvNMLKJIIIIvmfb_^^ [YW U'T.S4Q;PAOGNNLUK^IgHsFEDCBBBBB }!q"h"a!\YWUTQON#L*K0J7I=GCFJERCZBdAp?}>=<;;;;<!#x$l%c%\$W#S QOM KHG E&D-C3B9@@?G>O=X<b:m9{8 7!6!5!5!5!6!6!#&t'h(_(X'S&O$L"I G DB@ ? #> )< /;!6:!=9!D8"L7"U6#_4#k3$y2%1%0%0&/&0&0&1%&(q*e*\*U*O)K(H%D$A$?$ =$;$9$7$&6$,5%34%:3&A2&J1'S0']/(i.)w-),)+*****+*+*,)(|*m,b-Y-Q-L,G+C(?(<(9( 7(5(3(2(#0()/)0/*7.*?-+G,+Q+,[*,g)-u(-'-&.%.%.&.&.'-+x-j._/V/N/H.C-?,;,7,4, 2,0-.--- +-'*.-*.5)/=(/E'0N&0Y%1e$1s#1"2!2!2 2!2"1"1-u/g0\1S1K1E1@0;0603001-1 +1)2(2'2$%3+%32$3:#4C"4L!5W 5c5q666666650q2c3Y4P4I4B3=37314.5+5(6 %7$7"7!8" 8(80879@9I:T:`:n:;;;;::9}2m4`5U6M6F6@6:646.8*9&:#; <===>%>->4>=?G?Q?^?l@|@@@@??>y5i7\8R9J9C9=9791:+<'="?AB CCDD"D)D1D:ECENE[EiEy E E E E E D Dt9e:X;O;G<@<:<4<.>(@#BDFHJ JJKK% K- K6 K@ KJ KV KdKtKKKJJJIn<`=T>K>D>=>7?1@*B$EGILNQ Q Q QQ"Q)Q2R;RFRRR_RoRQQQPPPh@[APAHAAA;B4C-E&H KMPSU X XXYYY%Y-Y6YAYMZZZiY|YYXXWWcDVEMEEE?E7G/I(L"ORUX Z ]_ ` `aab b'b1b;bGbUcdbvbbaa``]HRIJHCH:J2M*P#SWZ] `cfgh ijklm"m*m4m@mNm]momllkkjXMNMHL>N5Q,T$X\`d gknprrs uvwxy#z-z9zGzVyhz|yxxwwTQLQBR8U/Y&^bgk oswz|~ %0>M_sRVGWr2x'  #5I^uیܟܫ $/9CKRY_dinsy*4=EMSY^chmsy $.7@GNSY^chmsy(1:AHNSX\aglsz "+3;BHMRW[afmt}%-5<BGLQV[`gn~w}{zxwvvvuu  '/5}<|A{FyKxPwUv[tasiqqp{nmkjjiiii{ ywv"t)s0q6p<oAmFlKkPjVh\gdeldvca`_^^^]] | wtq omki#h*g1e6d<cAbF`L_R^X]_[hZrX~WVUTTSTT zrli g f db`^%]+\1Z7Y<XBWGVNUTS\ReQoO{NMLKJJJJ~sjd`^] ] ZXV U'S-R3Q8P>O DN JL QK YJ bH mG zF D C B B B B B xlc]YVTTS Q O M "L (K .J 4I :GAFGEODWBaAl?y>=;;:::;sg^XSPNLL JHFE$D*B0A7@=?D=L<T;^9i8v76443344|nc Z S NJHFECA?> =';-:39:8A7I5Q4[3f2s0/.---..x j"_#V#O"J!F CA?= ;976#5)40361>0F/O.Y-d,q+*)( ' ' ( ) t#g$\%S%L%G$B#?!=:7 5310 /&.--3, ;+ C*!L)!V("b&"o%#$###"$"$"$#$$##q%c&Y'P(I'C'?&;$8"5"2"0" .","*")"#(#*'#1&$8%%A$%J#&T"&`!'m '}'((((('~%n'`)V)M*F*A)<(7'4&0&-&+' ('''%'$'!#('"(.!)6 )>*H*R+^+k+{,,,,,++z'j*]+S,J,C,>+9+4*0*+*)+&+#,", ,,-%-,-3.<.E/P/\/i0y000000/v*g,Z-P.H.A.;.6-1-,-'/$/!01 1222"2)31393C4M4Y4g5w5555444r,c.W0M0E0>08030/0)1$2!356 77888&8.969@9K9W:d :t : : 9 9 9 9 8n/_1S2J3B3;36312,3'4!689;= >>>># >* >3 >< ?G ?R?`?o???>>>>i3[4P5G5?59545.5)7#8;<?AC D D DD D'D/D8EBENE[EjE|EDDDDCd6W7L8C8<87818+9%; =@BDG I J KKKK#K+K4K>LILWLfLwKKKJJJ_:R;H;@;:;4;.<'>"ACFIK NPQ QRSSS&S/S9SESRSaSrSRRQQQY>N>E>>>8>0@)B#DGJMP SUWX YZZ[\!\*\4\?\M\[\l\[[ZZYTBJBBB^2c'jpx  &8Kaz7j+p x ,@WnԆԛӫ *4=FMSY^chnsy %.8@GNTY^cgmsz )2:BHNSX]bgls{ #,4<BHMRW[`flt}&.5<BGLQUZ`fmv}|||||  (/6<AFK}O|T{Zy`xgvpuzsqponnnnn~|{y"x)w0u6t;r@qEpJoOmTl[kbijhtfecbaaaaa~yuq omlk$k*i0h6f;e@dEcJaO`V_]]e\oZzYXWVVVVVzrligd ca`_%^+]0[6Z;Y@XEWKVQUXSaRjPvONMLLLLL | p h b _ ]\ ZXWV U&S+R1Q6P;OANGMMKUJ]IgGsFEDCCCCC ti`ZVT S S QONL!K'J,I2H7G=ECDJCQBZ@d?p>~=<;::::|nbZTPMKK J IGED#B(A .@ 3? 9> @= G< O: X9 c8 o6 ~5 4 3 2 2 2 2 wi^UOJGECCB @ ? = < $; *9 0877=6E5M3W2b1n/}.-,+++,rdYQKFB?><; :875!4'3-230:/B.K-T+_*l){('&%%%&~n`VMGB>:8754 20/-#,*+0*7)?(H'R&]$j#y"!   zj]S J D >:7420. ,*)' &&%-$5#="F!P [hwwg Z!P"H"A";"7!3 0-+(&%#!!$ *2:C M!Y!f!u"""""!!s d"W#M$E%>$9$4#0",")!&!$!"! !!""!"(#/#8$A$K%W%d&s&&&&&%%p"a$T&J&B'<&6&1%-%)$&$"%%& &''''%(-(5)>)I)U*b*q*** * * *)l$]&Q(H(@)9(4(/(+'''"()*++ ,,,-#-*-2.<.F .R ._ /n / / / .. . .h'Z)N*E+=+7+1*-*)*$* +-./1 222 2 2' 2/ 38 3B 3N3[4j4{333332d*V,K-B-:-4-/,+,&,"-/1246 8 8 888$8,848>9J9W9e9w988887_-R.H/?08/2/-/)/$013579 ;= >>>>!>(>1?;?F?S?a?s?>>===Z0N2D2<25201+1&2 468;= ?AC CDEEE$E-F6FBFNF]FnEEDDCCU4J5A59534.4(5"7:<?A DFHI J KLMN N(N2M=NJNXMiM}LLKKJP8F8=87817*9$;=@CF IKNPQR STUVW#W,W8WDWRVcVwVUTSSK<B<;;5;-<&?BEHK OQTWXZ[\ ]_`bb&b1b>aLa]ap``_^]G@??:?1@)C!FJNQ UX[^acdegh jlno o*o6nEnUnhmmlkjDD>C5D+G#KOTX\`dgkmoprtuw y|~".=~M}a}w|{zyCG9I/L%PU[`ejnrvy|~ %3DWm=N2Q(V\bhnty~ ):Mb{6W,\!bipw~ 0CXp0b%ipx  %8Ne~͖̩ %/8@HNTY^chmsz )3;BHNSX]bgmt{ $,5<CHNRW\agmt}'/6<BGLQUZ`fnv !(06<AFKOTZ`g~o|zzxwutsttt#*}0{6z;x@wEuItNsTqZpanimskihgfeffg|vt rqpp$n*m0k5j:i?hDgIeNdTc[ac`m^y][ZYYYZZ{snjgedccb%a*_0^5]:\>[DYIXOWVV^ThSsQPONNNNO{phb_][ YXWW V%U*S0R4Q9P?ODNKMRKZJcIoG|FEEDDDEq f ^ Y UTRP ONML K&J+I0H5G:F@EFCNBVA_@k>x=<<<;;; x j_WQM K JI H FEDC!B&A+?1>6=<<C;J:R9\8h6u5443333 qdYQKGDB A A ?><;:"9(8-72695?4G3P1Z0f/s.-,++++}l_TLFB><:: : 8 654 2 $1 )0 // 6. =- E, N+ Y) e( s' & % $ # # # xh[QHB=975332 0 / - , !+ '* -)4(;'D%N$Y#e!s sdWME?:520.-, +)(&%$$*#1"9!B KVcqp`TJB<62/,*(&% #" !'.6?ITapl]QG?94/+(&$"  $,4=GR_niZNE= 61-)%#  ")1:EP ] l | eWL!B!:!4!/!* &#    !!"""&#/#7 #A $M $Y $g $x$$$$##bT!I#@#8#2#,#("$!!!!!#$%& ' ' ' '# '+ (4(>(I(U)d)t))((('^"Q$F%=%5%/%*$&$"##$%&() , ,,,,!,(-0-:-E-R.`.q---,,,Z$M&C':'3'-'(&$&!&&')+, . 0 11222%2-263B3N3]3m322111V'J)?*7*0*+)'(#()*,.0 1 45 67888"8*939>9J9Y9i9}88776Q+F,<,4,.,*+%+ ,-/13 5 7:; < =>?@@%@/@:@F@T@e?x?>>==M.B/9/2/-.(."/0257 : <>ABC D FGHH!H*H5HAHOH`GsGFEEDH2>26201+1%2469< ?BDFHJKL NOQRR%R0R<QJQZQmPONMMC6;645/4'5!8;>A DGJMOQSTUW Y[]]]*]6\D\T[g[~ZYXW?98938+9#<?CG JNQTWZ\]_`bd fhkk#j.j<jMi_hugfed==7<.=%@DIM QUZ]`cfhjkmoqt vy{{'z5yExYxmwvut_C^H]N[UZ]XgWrUTSRQQRR|qid`^\ [[ZZY%W*V/U4T8S=RCPIOPNXMbKmJzIHGGFGG~pf^YVSRP OONN M%L*J.I3H8G>FDEKDSC]Ah@u?>====>uh]UPLJIG FEEDC B%A*@/?4>:=@;G:O9Y8d7q6544445~m ` V N H D B@?> =<;;:!9%7*60554<3C2L1U0`/m.}-,,,,,w g ZPIC> ; 9 8 76 54321"0'/,.2-8,@+I*R)](k'z&%%%%%r bVLD>9631 0 0 / .,+*)#()'/&5%=$F#P"\!i ym^RH@:51.,** ) ( ' %$# " &! , 3 ; D O [ i y      iZNE=71-*(&$## "     # * 2:DP\j{eWKB:4/*'$"   !(09CNZiy    bTI?71,($! &-6ALW e u    _QF=5/*%"  # * 3 < G S aq\NC:3,'#      '/9CP^nXKA80*%!   !!!$","5"@#M#Z#k#~#""!!UH> 5 . ( #   " $ % %&&&!')'2'='I(W(g'{''&&%Q E!;"2","&!"!   "# % &( ) +,,,,&-/-9-F-T-d-w,,++*M"A$8$0$)$$#!"""#$& ( *,. / 02333"3+363B3P3`3s22100I%>&4'-'(&#%$%&(* , .0245 7 8::::':2:>:L:\:o98876D):)1)+)&("'()+. 0 2579;<> ? ACCC#C.C9CGBWBjA@?>>?,6,/,*+%*+-/2 58:<?ACEFH JLMMM(M4LBLQKdK{JIHG;03/-/(-"/147 :=@CFHJLNOQS UXYX"X.W<WKV^VsUTRR8312,1%258< @DGJMPSUWYZ\^a dfgf'f4eDdWdkba`^5705(7 :=B FJOSVY\_adegilnq tww v-v=uOtcs{rpo5:+;"?CH MRW\`dhknqsuwz| $3E[r/@%DIN TZafkoty} );Pg)INT[bipw} 0E\t"T[bjs{ &:Qhˁʖ %.6>DJOTY^cipx  (07>DINSW]biqz "*18=CHLQV\bir}zx}ICC_PROFILE $+17<AFKPU[bk~u|zxwvurnl %~+|1z6y;w@vDuIsOrUp\odmnlzjhgfeda`}wspoooom%k*i0h4g9f>eCcHbNaU_^^g\s[YXWWWVTulhda` ____]%\*[/Y3X8W=VCUISPRXQaPmN{MLKJJJJrg_ZWUSR RRRQO$N)M.L3K8J=ICHJFRE\DgCuBA@@?@@tg]UOLJHG G FFFED$C)B-A3?8>>=E<N;W:b9o8766666|k^TMGCA?>= =<<<:9$8)7.635:4A3I2S1^0k/{.----.sdWMF@;87654 44321 0$/)./-6,=+E*O)Z(g'w&&%%%&m^ R H @ : 6 2 0..- , ,+*)( '%&+%2$9#B"K"W!d sh Y M C<61 - * ( ' && %$$"!!" (.6?ITapc UI@82-)&# "    %+3<FR_n_QF<5/*&"          " ) 1 : E Q _ n  \NC:2,'#        ( 0; F Q ^ m   XK@70)%!      % - 6 A MZj|UI>5-'"       "*3>JXgzRF;2+%!   '0;GUdwOC90)#    $-8DRbuL@6-&!      !!"!*!5"A"O"_"r!! H=3+$   !" $ &&&''''2'>'K'\'n&&%$#D90(#  !"$&(* + ----$...:.H-X-j-,+*)@ 6!-!&!! ! " $&(+-/0 2 4555 5*565C5S4f4|3210<#2$*$$# "!!#% ' )+.02468: < >>>>&>1>?=N=a@BD F IIH!H,G:GIF[EqDCBA4*,*'("'(*- 0 369<>ACFHJLNP STTS'S4SCRUQjPOML0-+,&+,.2 59=@CFILNQSUWY\_ bccb,a<`N_b^{\[Y/0*/"037;?DHLORUX[]`bdfimp tts%r4rEpYoqmkj.3%58<AGLQUY]aehkmortwz~ +=Rg~): =BHNTZ`dinrvz} !3G^w#CHN U\cjqv{ (<RjNT \dlt|1H_vȎ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗  9` ˻0ƸOg{ĵ˲ѯխ٫ܩާख़㡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘  9` ˼.ŹMfzŵ˱Ѯլ٪ܧޥ࢚➙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙  9` ˾,ŹLg{Ŵ̰ѭի٨ۥݣߟᛙ⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙  9 ` ˿+ĺLg{Ŵ̰Ѭթئۣݠޝᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚ  8 _ )¹Mh{Ƴ̯Ѫէؤڡܞݚޕ  8 _ )Ni|Ʋ̭ѩԥעٟڛܗݓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ  7 ^ ǿ+Pj|ư̫Чԣ֟؜٘ڔܐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ  7 ^ ľ-Qj|Ʈ̩ХӠ՝ّ֙ؕڎێێێێێێێێێێێێێێێێ  6 _ 0Sl}Ǭ˧ϢўӚՖ֓׏؋ًًًًًًًًًًًًًًًً  5 b 3Um}ƪˤΟЛҗӓԐՌ։׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉  7 e 8Xn}Ƨɡ̜ΗϓѐҍӊӇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇ  : h>[o}ģǝʘ˓͐΍ϊχЅхххххххххххххххх  > mD^p}ßřǔɐʍˊˈ̅̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓  B rI`p}ÕđƍNJLjȆȄɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂ H xGbq|ÊĈĆńŃŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁſ% N p9Xlz€€€€€€€€€€€€€€€€€1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ0 S'|̨Dƥ]¤pùǷʵγбӰկ׭٭ګګګګګګګګګګګګګګګ0S&|˩CƦ\¤o~ùȶ̳ϱҰծ׭٬ܫݧۧۧۧۧۧۧۧۧۧۧۧۧۧۧ0S%|˩BƧ[¥n~ĸɵͲѰԮ׭ګܩߨߣܣܣܣܣܣܣܣܣܣܣܣܣܣܣ0S$|˩AƧZ¥m}ķɴαӯ֭ګܩߧ⤑ࠎܠܠܠܠܠܠܠܠܠܠܠܠܠܠ0S#|˪AƨY¦m}ŷʳϰԮثܩߧ⥗栖ݜݜݜݜݜݜݜݜݜݜݜݜݜݜ 0S"|ʪ@ƨX¦l|Ŷ˳аխڪݧच⟘㝚ᙗݙݙݙݙݙݙݙݙݙݙݙݙݙݙ 0S!|ʫ?ƩW§k{Ŷ˲ѯ֫ڧݤߠ◚ᗜޗޗޗޗޗޗޗޗޗޗޗޗޗޗ /R |ʫ>ƪV¨kyŶ̲Ѭ֨٤ܡݜޗޒޒޒޒޒޒޒޒޒޒޒޒޒޒ /R|ʬ<ƫU¨jwŵ̯Ҫ֥ءڝۙݔސގݎݎݎݎݎݎݎݎݎݎݎݎݎݎ /R|˭:ƬT©is~Ų̬ѧբמؚږۑ܍܋܋܋܋܋܋܋܋܋܋܋܋܋܋܋ /R|˯8ƭR«fo~ưͪѤӟ՛ًُ֗ؓڈڈڈڈڈڈڈڈڈڈڈڈڈڈڈ .Q|˰5ǯOð`l~ǭ̧ϡҜӘԔՐ֍׉؇؇؇؇؇؇؇؇؇؇؇؇؇؇؇ .Q|̳0DZLĸVnǩˣΞϙѕґӎԋԈՅՅՅՅՅՅՅՅՅՅՅՅՅՅՅ  -P|̶*ȷDYpªǦʠ͖̚ΒϏЌщч҅҅҅҅҅҅҅҅҅҅҅҅҅҅҅  ,O{ͼ"¼<^r¦Ţǜɗʓː͈̍͋Ά΄ττττττττττττττ  + N zFbtÞřǔȐɎʋˉˇ̅̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃  ) L ~%OfuÖőƎNjljȇɆɄɂʂʂʂʂʂʂʂʂʂʂʂʂʂʂ ( R -WhuÌĊňņƄƃƁǁǁǁǁǁǁǁǁǁǁǁǁǁǁ - Y +Pgu~ˆ†…ÃÂÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ 4 [v%E]ny~~~~~~~~~~~~~~~:Uh-x@Vgs~x{|ywÂu„t…srrqqqqqqqqqqqqqqq'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~')F5iިAǜaĜq›~ĹǷʵ̴γвұӱԮԬҬҬҬҬҬҬҬҬҬҬҬҬ'(F4jݨ@ǝ`Ĝqœ|ºŸɶ̴ϲѱӰկ֯תէӧӧӧӧӧӧӧӧӧӧӧӧ'(F3jݩ?ǝ`ĝpž{¹Ƿʵγѱӯ֮ح٪٥դԤԤԤԤԤԤԤԤԤԤԤԤ''F2jݩ>Ǟ_ĝoyøȶ̳бӯ֮ج۫ܦڢ֠ԠԠԠԠԠԠԠԠԠԠԠԠ&&F1jݪ=Ǟ^ĝoxĸɵͲѰծج۪ިߢڞ֜ԜԜԜԜԜԜԜԜԜԜԜԜ&&F0jݪ<Ǟ]ĞnvķʴϱӮ׬۪ި⤐ۚיՙՙՙՙՙՙՙՙՙՙՙՙ&%F0jܫ;ǟ]ğlt~ŷʳаխ٪ި⥗柕ۗזՖՖՖՖՖՖՖՖՖՖՖՖ&%F/jܫ:ǟ\Ġjs|Ŷ˳ѯ֬ۨߤ៙㜚ᗖܔؓ֓֓֓֓֓֓֓֓֓֓֓֓ &$F.jܫ:Ǡ\ġhqzŶ̲Ѯשۤޠᖛᕛݒؑבבבבבבבבבבבב &#F-jܬ9Ǡ[ģfnxŶ̰Ҫצڡܛޖߑߑݏُ׏׏׏׏׏׏׏׏׏׏׏׏ &"E,jܭ7ǡZťc©kuų̭ҧ֢؝ژےݎ݌܍ٌ׌׌׌׌׌׌׌׌׌׌׌׌ %"E+jۭ6ǢYŧ_­fp~ưͪѤԞُ֙ؔڋۈۈ؈׈׈׈׈׈׈׈׈׈׈׈׈ % E*jۯ4ȤUƫXó_n~Ǭ̦РқԖՑ֍׉؆؄ׄքքքքքքքքքքքք %E'j۰1ȨMDzNXpǩˢΝЗђҎӋԈՄՂՁՁՁՁՁՁՁՁՁՁՁՁՁ $D%jڲ.ʯ@Ƚ=]r©ƥɟ˙͔ΐόЉц҄ҁҀҀҀҀҀҀҀҀҀҀҀҀҀ $D!jڴ)ͼ(CasšǛɖʑˎ͈̋Ά΃΁πππππππππππππ #Ci#LeuÝŗƓǏȌɉʇʅʃˁˀˀˀˀˀˀˀˀˀˀˀˀˀ "Bh /Thv”ÐčŊƈƇƅǃǁǀǀǀǀǀǀǀǀǀǀǀǀǀ @ _ 4Zkw‰ˆÆÅÃĂāāāāāāāāāāāāā  = c3Sgt}€€€€€€€€€€€€€  Aax2L_nx|}|{zyxxxxxxxxxxxxxx " BZ(j9wI[i|qyvvzt}rqȁpǃoDžnƆmƈlŊlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋ &=N/[?gNq{[yveqlnrkwizg~fՀeԂdԄcӆbӉaҋaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ "0:=YJy؛[Ǖrŗ{ØúŹǸɷʶ˶~̵}̳|ͯ|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯| !/:}֨DɨOǰSŸYm}Ƭ˥ϟјӒՌ׈ׅ׃քԄффффффффффф%91Z<~׬;ʭDɹEYo~ƨʡ͛ϕЏҊӆԃԁԀӀррррррррррр$9/Z9~ٴ/̸2½@]q~Ťȝʗ̒΍ωЅЂр~}}}}}}}}}}}}"9-Z0z!Hbs~àƙȔɏʋˈ̅͂̀~||||||||||||8)Z$t*Oet›ÖőƍNJȇɅɂʀ~|||||||||||| 7%Zh 2VhuÌĉņńƃƁ}}}}}}}}}}}}6P f6Vjv~†„ƒÁÀ~~~~~~~~~~~~ 4 Eh7Ser{~}||||||||||||  ' Ie%x9O`mux}{z}yĀwÁvƒu„tsrqqqqqqqqqqqq  ,H\1kBvP~~_{iwntsqwpzn}mĺk̓j̅i̇hˉgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌ -A(P9\Hf|Tnw^uqezmk~jphufxe{c~bځaك`م`؇^؊^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍ (7.C=N|KWwV_o]ehbjdinaoq_ss]wu\{v[~wZxYyXzXzW{V|V|V|V|V|V|V|V|V|V|V|V|'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'5/DJQe^~۔mϒwŒēÒ¼~¼}û{Ļzĺyĵyõyõyõyõyõyõyõyõyõyõy&4/CJPe]ڕi͔tŔ~ĕ•ûĺ~ź}ƺ{ƹzƵzƱzızızızızızızızızızız%4/BJOf\ږf̕qŕ|Ė—úŹƹǸ}ȸ|ɵzɰ{Ǭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{$3/AJOf[٘c̖oŖy׺ŹǸɷʶ}˶|˰{ʬ|Ȩ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}$2/AKNgYٙa˗mŗwÙĹǸɶ˵ʹ~α|ά}˨}ɥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~#2/@KMgWٚ^˘jřtÚ}ºŸȶ˴γвѬ~Ϩ~̤ɡơơơơơơơơơơ#1/?KMgUٜ\ʙhŚrÜzùǷ˴βѱӬӧФ͠ʞƞƞƞƞƞƞƞƞƞƞ"1/?KLgSٝYʛeŜoÝxĸɵͲѰծקԣџ͜ʚǚǚǚǚǚǚǚǚǚǚ"0/>KKhQٟVʜbŝlßu~Ʒ˳ϰԭ٨ڢ՞ћΙʗǗǗǗǗǗǗǗǗǗǗ"0/>KKhO٠Sʞ_Ɵiár|ǵͲҮتߢܜ֙җΕʔǔǔǔǔǔǔǔǔǔǔ!//=KJhM٢Pˠ\ơeänx¸ȴΰիݥ曑ݖהӒϑːȐȐȐȐȐȐȐȐȐȐ!//PUQhS{WԞ_ʛkśuÛ~ŷʴϲҨϣˠǝś™%4%C>NUNhPzRա[˞fƝqÞz¹ǵΰԩ֡Н˚șŗ–%4%B>LULgMyNդV̡aơlâv÷ʲҬؚ۠ї̕ȔœÒ$3%B>JTJfJxK֨Qͦ[ǥeħpzö˯֥族ړґ͐ɐƏÏ$3%A>HTGfGwG٭KϬTȬ^Ưh±s}˥Քޏڍӌ΋ʋNjČ$2%A>FSDdCuB۴DҵJ˷Sʾ_n|©˜ҍ؆هӇχˇȈňˆˆˆˆˆˆˆˆˆ#2%@>CRAc?s=޾;?J]o}ãɖΊӁՁ҂ς̃ɄƅÅÅÅÅÅÅÅÅÅ#1%?>@Q>;O7]3j1u)8Ocsďȇʀ|zyz|}}}}}}}}}}!.%<>6L0Y,b'm&jNCdTH^YL[_OXdRUiTSmURqWPtXOxYN{ZM[L\K]I^H_H_H_H_H_H_H_H_H_H_$y3"p;*hB1aJ6\Q;WW?S]BPbDNgFLlHJpIItJHwKF{LEMDNCNBOAPAPAPAPAPAPAPAPAPAP' ;K/YCdTkcrq|}ㆄނ}zxwu}ICC_PROFILE trqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K0YCcTidprz~≂܅؂}{ywvtsrqqsttttttttt' ;K0YD`UfdmswጀۈՅ҂}{ywvutsuuvvvvvvvvv' ;K0YD^Udejts}ًԈЅ͂}{yxvuvwwxxxxxxxxx' ;J0XD\Uaegtpߏz؍ҋ·˄ȁ}{ywvxxxyyyyyyyyy' ;J1UDYU^edtlޑv؏э͊ɇƄā~{ywxxyyzzzzzzzzz& ;I1SDWU[eathޓr֑{ЏˍNJĆÃ{ywxyyz{{{{{{{{{& :I1QDTTXd]tcޖm֓wБʏƍɄ{yxyz{{|||||||||& 9H1ODRTUcZs_ޙi֖rϓ|ʑŐË{yz{{|}}}}}}}}}}& 9G1MCOSRcVr[ߝdךmЗwʔŒŽ{ijzī{¦|}~& 8G1KBMRPbSqW^؞gЛqʘ{ŕ’ŷ|ɫ|Ǥ}à~& 8F2IBJQM`PoT}Xڤbҡk˝uƚ˜¶ˬ}΢ɝĚ& 7F2GAHPJ_LmP{Tܫ\ԩeΦoȣzßİΠљʖŔ& 7E2E@FOG]IkLxOߴUٵ_ӵiεv|ġΔҐˏƎŽ& 6D1C?CND[EhHtL~Q[kƽqxÔ͉҇̈ljÉ& 6B1@>@L@YAdDoIwR|bhnvπ̂ǃĄ& 5?0==hOCbUG]ZKY`MVePSjQQnSOrTNvUL{VKWIXHYGZF[E\E\E\E\E\E\E\E\E\ ~)u5#l<*dC/^J4XP7TV:Q[Kd@JhAHlBFpCEtDDxEB}FAG@H?I=J=J=J=J=J=J=J=J=J| q$g,_5Y=!TE&OK)LR,HW/F]0Da2Bf3@j5?n6=s7KKPXUdZpa{iޚsו~Ўʅ}xy{}~ 4B$C0E=HILUQaWl]wcm֞y˕~|~ 4A#A/B;EGISN^ShZra{ۯn̦v~ 4?"?.@:BEFPKZRcYk߽drѶlĬsz4=!<-=8@BDLIUQ\Zaboɼipw4; 9+:5=?BGHNQR[Y`mgmt}x|386)82:;?AGETEWX^kd~krzvorwz}~353'4/65=8H8MEVV\ib{howxnhiosvxz{{{{{{{{300#/)2-;,@:HLN\Vl]zem}vsălgefknqstttttttt1-*)"-!3,XFeOpXzzdsmmvhdЈ`ϒ^Ν\ͩ[ιYȚZʜ\ɝ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ  "'-96J?XHcRmz\urd{mmhud~`؆]֏Z՘XԢWԮVԼV͐VђWѓWѓWѓWѓWѓWѓWѓWѓ   #*.;8IBUL_zVgs^mkdrflwbtz_|}\ZߋWޓUݜTܥRܯRܻQ̅RڅRڅRڅRڅRڅRڅRڅRڅ  $*09:EFOzQXrX^k^ceeh`lk]rnZypWrUtSvQwPxNyMzMzLzLzLzLzLzLzLzLzظ '(35??yJGpQNiWSb]W^d[Zj^Wp`TvbR|dPeNgLhKiJjIkHlGlGlGlGlGlGlGlGlݯż *#~6-vA6mHk2CE@K=P;U9Y7^!5b"4g#2l$1r%/w&.}'-(+)+)+)+)+)+)+)+)+)vs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvst1 rBtO'xX3y`?wiJsqTq|\nckiimgqetdvbxay`{_|^}]}]}_}`|b}b}b}b}b}b}b}b}wtu1 sBwM'{V4|_@zgKwoUsz^qenkkpisgweyd{b}a~`_ŀ^Ё_ڀaހb߀c߁d߁d߁d߁d߁d߁d߁d߁xuv1 tBzL'U4]@~eLznVvw_tfpmmrkviyg|e~cba`DŽ_ӄaڄc݃d܄e܄e܄e܄e܄e܄e܄e܄e܄yvw0 vB~K'S4\@dLlVzt`whsoptmyk|hfecbaɇaՇdڇeڈfوgوgوgوgوgوgوgوgوzxy0 xAI'R3Z@bLiW~qa{{iwqswp|mjhfdcb΋d֋f֋g֌h֌i֌i֌i֌i֌i֌i֌i֌i֌{yz0 |?H&P3X@_LgWnaxj{rwys~oljgedďdҏgӏhӐjӐkӐlӐlӏlӏlӏlӏlӏlӏlӏ|z{0 >F&N2V?]KdVkask~s{zvrnkhfeʓhѓjДkДlДmДnѓnѓnѓnѓnѓnѓnѓnѓ}{|/ <E%M1S>YJ`Uh`pjyt|zuqmiggΗk͘l͘n͘o͘pΗqΖqϖqϖqϖqϖqϖqϖqϖ~|~/ ;C$K0P(B2G;MDTM[UܰeaΨlqßt|§åţƢȟȟȟȟȟȟȟȟ- 49<&@/E8K?SF\MӶb`ƭipqy¨æŤƢȠȟȟȟȟȟȟȟ+ 279$=,B3I9R>XL̺`_gon~v~~¨æŤƢȠȟȟȟȟȟȟȟ* 146!:(@-H1Q7VK^]enl}s{ytwz§|å}ţ~ơȟȟȟȟȟȟȟȟ( 1236"=&G&L5TI\[cljzqywpln§ræuĤwƢxǡzȟzɞzɞzɞzɞzɞzɞzɞ& /./2:DJ3RGZYaigxnvyohdeŤjţmƢpǡrȟtɝuʝuʝuʝuʝuʝuʝuʝ$ + )),7AI0QDXV_fetl|tqib^]ɞbȟfȟiɞkʝn˛n˛n˛n˛n˛n˛n˛n˛#' " $ 0=$F4NDVR]acokztsk~bȌ\ȜYȱWΖ[͘^̙a̙d͙g͘g͗g͗g͗g͗g͗g͗g͗!  .:)C9JHPVWb_lvhulr}c~\،W؝TװT͌UӏWґZѓ\ѓ_ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ  ,7.@=HJOVV`v^ilepdpw^||YVޗSݦQܸQԄSڇT؉V׊X֋Y֋Y֋Y֋Y֋Y֋Y֋Y֋ ٿ ,!70@>HJPTwW]m]defj_pnZzrVvSyQ{O|M|M|P|QRށSށSށSށSށSށSށSށ ۷ ,#71A=IGxQPnWWe^\`fa[oeVxhSkPmNoLqJrIrHrKrNsNtNtNtNtNtNtNt ެ˺!.#9/B9wJBmPIeVN_^SZeVUmZRu\O~_LaJbHdFeEfDgCgEgFgFgFgFgFgFgFgʹ $0 ~;*tB2kH9cN?]UCX]GSdJPkMMrOJyQGSETCVAW@X?Y>Z>Z=Z=Z=Z=Z=Z=Z=Zҭ &|1q8"h>)`E/ZL3TS7PZ:L`Fm@DtBA{C?E=F;G:I9J8J7K7K7K7K7K7K7K7K w# m*d1\8U@"PH&LO)HU+D[-Ba/?g1=m2;s39z5765738291:0;0;0;0;0;0;0;0;| of^! V)P2K:FABH?N5D2I0N.S,X*])c'i%o$w"~!hd#_/^@cKgT%h]/fg9drAb}H`N]R[VZYX[W]V_U`TaTbScRcRcScTcVbWcWcWcWcWcWcWcie#`._@fIjS%k\0ie:gpBd{IbO_T]X[[Z]X_WaVbUdUeTeSfSfUfVeXeYfYfYfYfYfYfYfjf"a.`?iHmQ&n[0ld:inCgyKdQaV_Z]][`ZbYdXeWgVhUhTiUiWhYhZi[i[i[i[i[i[i[ijg"b.c>lFqP&rY1pb;lkDivLgRdXa\_`]b[eZgYhXiWjVkUlWlYk[k\l]l]l]l]l]l]l]lkh!c-g<pEtN&vW1t`;piEmsMj~TfZc^ab_e]h\jZlYmXnWoWoYo\n]o^p_p_p_p_p_p_p_pli!e-k:tCyL&zU1y]\IdSk]vfoxwr~mjhhЌkՍmՍo֌p֋q؊qىrڇrڇrڇrڇrڇrڇrڇspu&, 6@F'L1R;YE`OhYߎscՆ}nxxsomlȑnґpӐrԏsՍt֌t؊uىuىuىuىuىuىuىtqx$+ 5>C$I.P7VA]JߝgTԕobˍxnÅyyurqsДtђvґwӏwՍw֌x؊x؊x؊x؊x؊x؊x؊ur{#) 4<A"F*M3T<[DףcS̚lb“un~y{xvwϖyДzђzӐzԏzՍz׋z׋z׋z׋z׋z׋z׋us}!) 49>D&J.R5ܯYAϨaRŠiarnzy~|}͗~ϕ~Г~ґ~ӏ}Ս}֋}֋}֋}֋}֋}֋}֋vt ( 37;A"H(P.ԴV@ɭ_Qg`omwx˘ΖДҒӐԎ֌֌֌֌֌֌֌wt'2 48=F!ܿL,ιT?ñ]Pe_lltw|}zǘ|Ζ}Д~ҒӐԎ֌֌֌֌֌֌֌xu&/ 04:DH+ȽS=[Nc]jjqvzytqØsϖvДxґyӐzՎ{֌{֌{֌{֌{֌{֌{֌xv%+ , /6<G)Q;YLa[hhotw~yqlikДnђqґsԏuՍv֋v֋v֋v֋v֋v֋v֋yx#&%(07E'O9WJ_Xfemqu{z~qjebcґgӐjԏmՍn֌p؊p؊p؊p؊p؊p؊p؊{|! $5C$M6UG]Udbkm{svr|~jc^[[Ս_Սc֌f׋h؊jوjوjوjوjوjوjو|%6A!K3SCZQb]~igtqpk{xd~]XVUۆXڇ\ڇ_ڇaۆcۅcۅcۅcۅcۅcۅcۅ~ھ %5@!I/R>YK`Wvhampiezp^̆uX̕yȚ{Qͼ|P|SU߀XށZށ\߁\߁\߁\߁\߁\߁\߁ ۵ % 3>%G2N?UIv]Smf[eoa^zgX܆kSܕoPݦqM޻rMqNtPwRxSyUzUzUzUzUzUzUz ݫ͸ % 3='F3N>vUGl[NdcU]mZXw^SbNeJgGiFiHiKjLmNoOpOpOpOpOpOpOp б '4>'G2vN;lTBdZH]bMWkQRuUMXHZE\B^A_@`C`G_HaIcIcIcIcIcIcIcԩµ )5~@%tF-kL5cR:\Y?V`CPhGLqJG{LCN@P>R=T;U;UA;C9E8F6G5H5I4I7I7I7I7I7I7I7Iɫ~u' l/d7\>VE"PK%KR(FX+A_->g/;o18x364361708/:.;.;-<-<-<-<-<-<-<yne^' W0Q7K>FEAL=R9X6_!4f"1n$/w%-&+())(*'+&,&-&-&-&-&-&-&-}ui _WPI&D. ?6 ;= 7C3I0O.U,[*b'i%r#{!|peZQ IC=8&4-03-9*>'C%I #N !T Z a i r |  \W&Q2N<WE[N\X"[c+Yo2Wz8T=RAPEOGNIMKLLKMJNIOIPHPHPIPKPMOOPOPOPOPOPOPOP\X&R2Q:ZC_M_W#^a+\m3Yy:W?TCRGPIOKNMMOLPKQKRJRISJSKSMRORPSQSQSQSQSQSQS]Y&S1T9]BbKbU#`_,_k4\w;Y@VETHRKQNPOOQNRMSLTKUKULUMUPTQURVSVSVSVSVSVSV^Z%T1X7a@eIfS#d]-bh5_t<\BYGVKTNSPQRPTOUNVMWMXLXNXPXSXTYUYUYUYUYUYUYUY_[%U0\4e=jGkQ$iZ-fd6cp=_|C\IYMWPUSSURWQYPZO[N[O\Q[T[U\V]X]X]X]X]X]X]X]`\$V/`2j;oDpN#oW-ka6gl>cxE`K\OZSWVVYT[S\Q^P_P_R_U_W`XaYb[b[b[b[b[b[b[ba]#Z-e/o8tAvK#uT-q]6lg?hsFdL`R]VZYX\V_T`SbRcScUcXdZe\f]f^f^f^f^f^f^f^fb^#^*i-t5z>|H"{Q,xZ6sc?mmGizNdT`X]\Z`XbVeUfTgVgZg\i]j_j`jajajajajajajajc`"b'n*y2<F!O+X5{`>uiGotNjUf[b__c\fZiYjXkZk]m_naobocndndmdmdmdmdmdmda"f%r'~0 ;EM)U3^=}fFvpNr|Um\hbdfaj_m]o]p^p`rbsdsesfrgqgpgpgpgpgpgpeb!i#w%/ 9CL&S0[:cDlMywUt]nciifncqatauavdwfwhwivjujsksksksksksksfc!m {#. 8AJ#Q-Y7`AiJ߁tSz~]teolkqhufxeze{h{j{kzlxmwmvnunununununugd p~", 7@H N)U3]<ݏfGӈoSˁy^{funqtnxk|j~jl~m}o|pzpypwqwqwqwqwqwqwhd s +5>DK%R-ߝZ7ӕcFʎlSÇu^~g{owuszp~ooʂpށq߀r~s|szsysxsxsxsxsxsxifv*4 ;AH O'آV6̚`EÓiRr^zgo}vy|vttńu݃vށvw}w{vzvyvyvyvyvyvyiix(2 7=DݭK$ЦT5Ɵ^DfRo]wgow~}{zyz܄z݂z߀z~z|yzyyyyyyyyyyyyjk{&03 9AֱG#ʫR4\CdQl\tf}ov}ۅ݃ށ~}}}{|z|z|z|z|z|zkm~$,/4 ݺ:еF!ůQ2ZBbOj[reznv||ywׅx݃zށz{}|{|z|z|z|z|z|zkp"&)/ֿ6ʺD O1X@`NgZodwmu{ztqoхq݃s߁u~v}w{wzwzwzwzwzwzls !&4 ľBM/V>^LeWmbuk~ryyr~mig̓iނl߀o~p|rzryryryryryrymv2 @K,T<\IcUk_rhy{orvk{fb`ʀbe~h|j{lymxmxmxmxmxmxn{ڻ / =I)R8ZFaQh[zpdrykkqdv_z[|Y|Z{^{azcyfwfwfwfwfwfwfwp ٳ Ͼ ,;F&P5XA_M|gVso^kwedk^pYsUuTuSvWvZv\u_t`t`t`t`t`t`tr ٩ε )7D!M0U<}]GtePlmWev^^ācYÎhTÝkQîlOmNmPoSpUpXpYpYpYpYpYpYpwޠϮĹ )7BL)T5u\?mdHelO_vTYҁYTю]Pѝ`MҰbKbJbKfMhOiQiRiRiRiRiRiRi ҦIJ * 7B}J)tQ3kY:daA^kGXuKSOOSKUIWGWFWFYG\I^J`K`K`K`K`K`K`ٞǬ , 9|AsI'jP/bW5\_:Vh?RqBM|FIIFKCM@N?O>NBOCQDSETETETETETET˦ . y7p?hF"`M(ZT-T\1Oe5Km8Gw;C=??D>F>F>F>F>F>FП{t* l3d;]CWJ QQ$LX'H`*Dh,@q.<{192543617/8.9-919393939393939}vme$^- X6R=LEHLCS?Z>>>=>=?>>@>C=D>F?F?F?F?F?F?P K*E5J8M=QHRRQ^Oj%Mw+J/H3F6D8C:B@?@@?@?@>A@@B@E@FAHAHAHAHAHAHAQL)G4M6Q;UFVPU\Rh&Pt,M1J5H8F;EC?CABAABAC@C@CCCFBHCIDJEJEJEJEJEJERM)J2P3U9YCZMYX Vd'Sq-P}3M7K:I=G?FAEBDDDECEBFBFCFFFIFKGLHMHMHMHMHMHMHSN(N/T0Z6^@`J^U [`(Xm/Ty4Q9N=L@JBIDHFGGFHEIDJEJGJJIMKNLOLQLQLQLQLQLQLTP'R,Y-_2d<fGdR a\(]h0Zu6V;R?OCMELHJIIKHLHMHMHNKMNOPPRPSQTQTQTQTQTQTQUQ'V)^*d/j:lElO hY(dc0`p7\|=XBUFSIQKOMNOMPMQLQMQPRRTTUVUWUXUXUXUXUXUXUWR&Z&b&j,q7sBsLpV(k`0fk8cw>_D[HXLVOUQSSRTQUQURVTXVYXZZZ[Y\Y\Y\Y\Y\Y\YXS%^#g#p*w5 z@zJxS&s\/nf7ir?e~EaJ^N\RYUXWWXVYVYV[X]Z^\^]^^]_\_\_\_\_\_\YV#b l u(}3 =GP${Y-vb6qm>lyEhKdQaU^Y\[[^Z_Z`Za\b^b`baabac_c_c_c_c_c_ZY!fpz&1 ;DM!V+~^4yi=ttEoLjSfXc]a`_c^d^e_f`fbfdeedecfbfbfbfbfbfb[\iu~$.8BJR'[0݁f:zpEuzNpUl[i`fddgcibjcjdjfighhgifidididididid[_ly!,6 ?GO"܎X-҇b:ʁlE{uNvVr]nbkfijglgngnimjlkjlilglflflflflflf\bp|)3 <DߚKӔU,ʍ_9‡iEqO|{Wx^tcqhnllolplqmonnolojoiogogogogogog]dr&08 ?؟G͙R+Ē]9fDnNwW}^ydvismqqqrqsrqsosmsksjrhrhrhrhrhrh^gu#,3ݨ9 ѣEǝP*Z8cDlNtW|^d|jynwrvtvtwrwpwnvlvjvivivivivivi^ix',֬4 ˧CN)X6aCiMqVy^djo}r|t}|u|}s||q|{o}zm}yk}yi}yi}yi}yi}yi}yi_k{ ݰ$а2 ƬAL'V5_AgLoUw]din|rwtuutsuqvow~mx}kx|ix|ix|ix|ix|ix|i`n~ֶ˴0?K%T3]@eJlSt[}bhymtqptmtmsoqpormsktitititititiaq ٵ ϹŸ.=I#R1[>cHjQrYz`xfrlmoirfserhpjnllmkninininininicu ܢԭ ϸ ɽ+;G!P/Y;aFhOpWxx^rdkifmbo_p^o`ncmfkgjihihihihihihgy ߚӦ̱ǻ(8DN,W8^BfKxmSqvZk`ed`h[kYlXkYk\j_iahcfcfcfcfcfcfk~ ̪֞Ĵ$5 BL(T3\>ydFqkNktTd~Z__ZbVeSfReRfUfXfZe\d\d\d\d\d\dp ݖΣĮ 1 >I#R.zZ8rb@kjGdsM^|SYWT[P]N^M]K_N`Q`S`U`U`U`U`U`U`wӛƨ ,:FzO'rX1j`8dh?^rEX|ITɈMOɕQLɥSJɹTISGUHXJYLZNZNZNZNZNZNZܓʢ ,9yCqM jV(c_/]g5Xq:S{>OوBKٖEH٦GFںHEGDIBMDOEPGRGRGRGRGRGRϛ~-v8nAfJ_R#Y[)Ud-Pm1Lx5I8F:C<@>?>>>=?=B?D@F@F@F@F@F@F֓ģyq+j6 c?]GWORW!M`$Ii(Fs*B~-?/<1:38465655476989898989898Ȟyskd'^1X; SCMKISEZAc>l;v!7#4%2'0(.)-*,*,*/*/*/*/*/*/*um e^W#R,L4H< CD ?L94%0,,2(8%>"DJQYcn|  rdTKD=7 1,($" ',16<BI Q Z fsD$?.<6@8A=AEAQ @]?j4B6D;DCEO D[Ah?u4@4A4A4A4A4A4G"A,E/I0L5M=NHMTKaHn E{%B(?+>.=/<1<2;3:4:5:5:5:5:5>5A7B8D8E8E8E8E8E8H"C,H,N-Q1S9UESQQ]Nj!Kw&H+E.D0B3A4A6@7?8?8?9?9?9@8C:EH@JAKAMAMAMAMAMAMAJ H'Q%X%]*`3c?bJ`U\a#Ym)Uy.R3P6N9L;K=J?J@I@IAJAJBJDLEOFPFQFQFQFQFQFQFL L$U!]!c'g1j< jGgRc\#_h*\t0Y5V9TeDbI`M^P]S[U[V[V\W]W^V`U`TaSaSaSaSaSaSPZepx$.8 BKW#yb/tl8ov@lFhKfPcSaV`Y_Z_[`[aZcYdXdWeUeUeUeUeUeUP]it}!*4= ܋HхT#^.zh8uq@qzGnMkRhVfYe\d^d^d^f]g\hZhYhWhVhVhVhVhVR_lx%/ޕ8 ӐEʋQ"…[.e8{nAwwHtNpSnWk[j^i`hai`j_k]k\lZlXkXkXkXkXkXTbo{(ؙ3̕BĐN!Y-b7k@|sHy|NvTsXq\o`nbmcnboao_o]o[oYoXoXoXoXoXVdr~ݞ ў1ǚ@L V,`7h@pH~yN{TxYv]tascrdsdtbt`s^~s\~rZ~rY~rY~rY~rY~rYXgu֣ˡ/ž>JT+]6f?nGvNT~Y{]ya}xdzxeyxexybyx`yw^yv\yuZyuZyuZyuZyuZyuZZix ݚ ٢ Цƥ,<HR)[4c>kFsM|SX]zav~ds}eq~eq~cr}`s{^tz\ty[uyZuyZuyZuyZuyZ]l { ܓ՝ ѥ ʪ*:FP(Y3a]xCXGTKPNMPKPKPJQLRNRPRQQQQQQQQQQv݉ʗ%4 |@uJmS#g\*ad0\m6Wv:S?OBKEHFGFGFDIEJGKILJLJLJLJLJLѐž y.r< lGeP_Y!Zb'Uk,Qu0Mρ4Iώ7Fϝ9DЮ;B;C:@>>@@BACBDBDBDBDBD݈ǘx tn+h7aB\MWVS_Oi"Ks%G~(D+B-?/>/>/<19496:8;9;9;9;9;9͒~tnhb*]5W? RHMQJZFcCm@x=!:#8$6&5&4&4&2(2+3,3,3,3,3,}qgb\W'R1M:HB DK AT>\;e8o5{20.,+********{oc[UPK#F,B4><:C7K4S1[ .d +o (| &$"! {n`TNIC?:%6,23/:+A(H%O"W `ly         |m_QGA< 72.*#&)"/5;BIQZf t   }m_PB:5/* &"#(-3 9 AIS^l|9'3254868;6C3N1[ /h -v+))((('''''''''(+-/////:'4181;4;9:A7K5X 3e1s/--,,++++* * * * + +,/!1"3"3"3"3"3";&50;/>1?6>=k;x977 6!5"5#4$4%4%4&4&4&5%5&6(8):)<*<*<*<*<*=%=*C(G)I-J6JAIM GZEgBt@> ="<$;&;':(:(:):):):);):+;-=.?.A.A.A.A.A.>%A&H$L%O)R3Q>QI OVLbJoG{ E#C%B'A)A*@+@,?-?-@-@-@/?1A2C3D3F3F3F3F3F3@$E#L R!V&Y/Y:YF VQT]QjNu!L%J(I+G,G.F/E0E1E1F1F2E5D6G7H8J8K7K7K7K7K7A#IQW\#`,`6`A ^M[XXdUp#S|'P+O.M0L2L3K4K5K5K6J8J:JO@OAQAR@S@T?T?T?T?T?FPYbhl$o.o8nDkNh[dg#`q*]{/[4X8W;U=T?SASBSCSDSETEVDWDXCXBXBXBXBXBHS]fmr!u)v3v> sJoWkb#gl+dv1a7^;\>[AYDXFWGWHXHXIYHZH[G\F\E\E\E\E\EKWakrx{$}-~9{FvSq^$mh,jq3g{8d=bA`E^G]J\K\L\M]L^L_J`I`H`G`G`G}ICC_PROFILE `G`GNZdov}'ۄ4ЁC|OxZ#sd,pm3lv:j?gCeGcJbMaO`P`PaObNcLdKdJdHdHdHdHdHP\h rzފ Ҋ0Ɇ@M}W#ya,uj4rr:o{@lDjHhLgOfQeReSfQgPgNhLhKgIgIgIgIgIR_k u ~ ֏̎.Ë= JU"~^+{g3wo:tx@rEoImMlPjSjTjTkSlQlOkMkLkJkJkJkJkJTa n x ܉ ؏ ГƓ+; HR!\+d3|m:yu@w}EuJrNqQoToU}oV|oT|pR{pP{oN{oM{nK{nK{nK{nK{nKWc p|܅ԌГ ʖ)9 FP Z*b2j9r?|zEzJxNvQ{uTxtVvtVutUuuSutQusOvrMvqLvqLvqLvqLvqLYfsֈϐʖĚ&7 DNW(`1h8p?xDI}}Mx{QtzTqyVoyVnzUnzSoyQpwOqvMquLquLquLquLquL[iw݂Ћɓę$4ALU'^/e7m=uC{~HvLrPnSkUhVgUhSi~Qj|Ok{MlyLlyLlyLlyLlyL^ lzֆˏė!2?JS%\-c5k;zsAu|FpKkOgRdTbUaTaRcPeOfMg~Lg~Lg~Lg~Lg~La o~ЉƓ /=HQ"Y+a2yi9tq?oyDjHeLaO^R[RZR[P\O^N`LaKaKaKaKaKdtڂˎ,: EOW(y_/sf5mn;hw@cE_I[LWNUOTNTNUMXLYK[J[J[J[J[JhyчŒ(6 BLxT#r\*ld1gl6bu;]@YCUGQIOJNININIPIRHTGTGTGTGTGnʍ#2~>wIqRkZ%eb+`j0[s5W}9S=O@LBJCIBHCGDIDKDMDMDMDMDMDu҆Ó {-u: oEiOcW^_#Yh(Uq-Q{0M4J7G9E:D9C;B=B>D>E>E>E>E>E>}ɍytp&k5e@ `K[TW]ReNo#Kz&GȆ)DȔ,BȤ.@ȸ/?/?0=3;5<6=7=7=7=7=7цxne c`-[:WF SP OYKbGlDwAׄ>ؓ <أ!;ٷ":":#7'6)4+6-6-6-6-6-ŐwlbZXT)P5L?HIES B\ ?fC;K8T6]3h 0t . ,*(''&&%%%%%vi]QIFB>!;*734:0B-J+S(\%f"s         vi[NC>: 62/#+*(1$7!?FNXcpwhZL@72.*&# &+28@H R ]k}xi[K>2+&!  $ *07@JVdu/++2/104/9+A'L#X!f t    !""""/+.02/3126/>+I)V'c%q$~ # #"""""""""""###$&''''0*1-5+7-624:2E/R-`,m *z )(((''''''''(((')+,,,,1)4)9(;*<.:69B7O5\3i 1v0/..--------..--/122223)8&=$@%A)B3A>?J=W ;d 9p7}655443333345433 6!7!8!8!8!8!5'="B F H%J/I:GFER C_ Ak?w=<<;;:::::;:!:#:%:%<&=&>&>&>&>&9$AGKO"Q+Q6OALM KZIfGrE}CBBA A!@"@"@#A#A$@'@)?*@*B*C*C*C*C*C*< EKQVX'X1W<UH RTPaNmLxJI H"G$G%F&E'E(E)F*E-E.E/F/H/I.I.I.I.I.@IPV\_#`,_7]BZO X\VhSrQ} O$N'M)L+K-J.J/J0K0K2J3K3L3M3N2N2N2N2N2CLT\aef'f1e=cJ `W]bZmWw#U'T+R.Q0P2O4O5O6O6O7P8P8Q7R6S5S5S5S5S5FPX `fjl!m+l7jE gRc^`h ^r&\{*Z.X1W4U6T8T:S;S;TX?X@Y?Y?Z>[<[;[:[:[:[:[:LV ` h o swyy.w> tKpVm`!ji(gr-ez2c6a9`<^?]A]B]C]C^A_@_>_=_<_;_;_;_;NX clsx{ ~~+|;yHvSr]!of(mn.jw3h7f;e>cAbCaEaEbEbCcBc@c>c=c|g=|g=|g=|g=R]irzʃņ&6CN|X y`'wi-tp3ry7pwj>wj>wj>T _lv}Ƀć#4ALU^&|f-yn2wv7u;t?|rCxqFupHsoIqpIqpGqqDrpBroArn?rn>rn>rn>rn>V boýŇ 1? JS\%d,k1}s6~{|;zy?vwBrvEouHluIkuIkuGkuEluCmsAmr?mr?mr?mr?mr?Yer|DŽ /< HQZ$b*i0|q5xz:t>p}Bl|Ei{GfzHd{Hd{Ge{DfzCgxAhv?hv?hv?hv?hv?[iv̀È ,: EOW"_({g.vo3rw8m_A\DZEXEXDXCYA[@]>]>]>]>]>bq~È%4@ JyStZ#ob(jj.fr2a|7]:Y>V@SARBRAR@R?U>V=W=W=W=W=gvɃ!0< xGsPmXh`$dg)_p.[y2W6S9P;N=L=L2@2A2A2A2A2|Š|phfc-^9ZDVN RWO_KiHsE~B ?"=#<#<#:&8(7)8*8+8+8+8+Ʌ|qf[WV#S2P>MHIRF[ Ce@o>{;ω9ϙ7ϫ664210!/!/!/!/!}qf[PG FE'D5A@?K=U:_8i5v 3 1 / .--+*)((((~qeYND? =;#9.684B1K/U-_*k(x&%#""!!     qdXLA85 30.'+0(8&@#I!R]iyrdVI>4.+ (%"&-4<DNYg w   sdVH;0'#  !' . 6>HTbsteVG9-#   &.7AM\m$/%/(/'1$6 >IVdr    %.)-+,+.)3$;FSan{       &-,).(/*-/)7'C$P"] jw             !!!!**/&2$3%2*14/?-L*Y(f&r%~%% % % % $ $ % % % % & & &%%&''''.&4"7 9!8%9/8;5G3T1a/m.y - - , , ,,,,,,---,,,-....2#8<>@"A+@6>B xJuSs\qd"ol'mt+l|/j2i5|h8yg:vf;tf#="=#<%;&;&;&;&;&;&zui^[Y$V1S=PGMPJY Gb DlAw><98775433 3 3 3 vk_TL KI(H5E@CJ@S>];g9s 7ǀ 4ǐ 2ǡ1ȵ00.-,++++xk`TJ@:98(756@4K3U1`/l-z+؋*؝(ٱ''& % $ # # # # yl`TH>5- ,+)*(5'?&J$U#a!n ~zl_SG<2*% #!"+4>HR_n      |m_RE9/&!(0 9 C N\l}n`RC7+"  "*3=IWi~paRC5)  #+6CSez/ ,!,.3<F T a o {                      -#)$)"+08CP^kw#*&&(%''#+3@MZgs~&&*", +"(&'0$<"IUbnz     *".000"0,.7+D(Q&]$i#u#########$$%%$ % % $ $ $ $ $ .35588'734?2K/X.d-o,z,,,,,,,, , -- , -,,,,---27:<?@">-<9:E8R7^6j5t5~44 4 4 3 3 3 3 4 44444344446;> CFFF&D2B?@L?Y>d=o}H |Q{zYwy`swhovp!lux%it(fs+cr.`q/^q0]q0]q.^q,^p+_p)`o(`n(`n(`n(Ubmu{.;~E zNuVq^n}fj|m g{v#cz'`y*]x,Zw.Xw/Ww/Ww.Xv,Xv*Yu)Zt(Zt'Zt'Zt'Yfqz +}8xBtL oTl[hcdkat!]}$Z(W*U~,R~-Q~-Q},R}+R|)S{(Tz'Tz'Tz'Tz'^kv~~{'v4r?mI iQeYb`^hW{!T$Q'O)M*K*K)L)L(L'M&N&N&N&cp{zur"o0j;fEbN _V[]XeUnQxN K#I$G&E&E%E%E%F$F$F$F$F$iv~pkhf*b7_A[JXR TZQbNkKuHEB@ ? ?? >!>!?!?!?!?!p}wi`][$Y1V<SEPNMW J_ GhDsA><:998777777xznbUPNM(K5I?FIDRA[?d+<6;A9K7T5_3j1w/-+**) ( ' ''''rfZOD:0.-,)+5+@*J(V'a&o$#ϑ!ϥ н tg[NC9/' &1<HUbrvh[NB7-$&0: F S b txi[M@4*!  $,7BPauyj\N?2'  '1>M_u|l]N?1%  !+9J]s,)(+0 8DQ^lx)&%',4 @N[ht&!" !#'0<J W c o z                ""$$"",8ER^ju&((&&&(#4 @MYepz*---.-",.):&G$T#`"k"u"~""""""###$$%%%%$$$$.12 4553'14/A-N,Z,e,p+y++++++++,-- - - - - , , , , 15 6: <;97+695G5T5`5j4s4|4433 3 3 3 3 4 4 4444444458<@A A?<"=1>A>O>Z=d=nCKQTTRQS"U3TATLSVQ_ PgOoNwNMLLKKKKLLLMLLLL@GPVYZXWYZ/Z=YIXS W[ VdUkTsS{RQQPP P!P!~Q }Q}Q}Q}Q}Q}Q}QBJTZ^_^\ ^`+`:_E^P \X [`ZhYpXwWVV~U!{U"yT#xU#wU"vV vVvVvVvVvVvVENX^bdcacd(e7dCcMaU `]_e^l]t~\}|[yZ wZ"tY$rY%qY%pZ#oZ"oZ pZpZpZpZpZHR[bfhhfgi%i4h@gJfS e[db~cj{brxazv`s_!p^#n^%l]%j^&i^$i^"j^ j^j^j^j^j^JU_ejlljkm"n1m=lGkP jX|h`xggvgosfxpemd!jc#hb%fb&db&db%db#db!ebebebebebLXbinppnprr.r;qE}pN znVvm^slepkmmjujigi!eh#bg%`g&_g&^g%^g#_g!_f`f`f`f`fO\emrutst vw+w8|vCxuL ttT qs[nrckqkhpseo|bn _m"]l$Zl%Yl%Xl%Yl#Yk!Zk[k[j[j[jS`iqvyywy {|({|5w{@szIoyQ lxYhwaevhbup_tz\tZs!Wr#Ur$Sr$Sr$Sq"Tq TpUpUoUoUoWdmu{~}}|x$u2q=mFiO fV c~^`}f]|nZ{wWzTzQy!Oy"Ny"Mx"Mw!NwNvOuOuOuOu\hrzytq n.j9gCcL`S ][ZcWkTuQNKIH GGH~H}I|I|I|I|anx{pk hf)b5_?\HYPVX S`PhMrJ}HECBAAAABBBBgt~uga^\#Z/W:TDRLOTL\ Ie GoDzA?=;;:::::::n{{nbWRQO(M4K>IGGPDXBa?k =w : 86544333333wsg[OGDCA+@7?A=J;S9\7g5s20.- ,, + * * * * * xk_SH=6 43!2,170A/K.U,`*m){'%$##"!!!!!{naUJ?4+$ ""!* 4?JVcsDžǙȮ}pbVJ>4*" %0<H V e x ֍ ؤ ؾ   rdWI=2(  $.:GVg{teWI<0%  !+7EVh~vfXJ;.#  '4CUixhYK;-! "0@Si(%% '-5AO\it~%"!# (0=KXdpz"" ,9FS`kv(4 A N[fqz     !! $/<IUaku~%%$ ##")5CO[fpy() (+ +)&"#.!; I U `!j!t!|!""""###$%%%%%%%%%, -.11 /+)%(3(B*O+Z+e+n,v,~,,,,,,,--....----/15763/.1,3<4I5U5_5h5p4x444444 4 4 5 5 5 5 5 5 5 5 5 35:>@=7 8:&=6>D>P=Z=c=kGPVXYVSTV%W4W@WJVSU[ Tc TjSrRz}R{QxPvPtPsPqPpQpQpQpQqPqPqP@KTZ]^[XY["\1\=\G[PZX Y` ~Yg{XoyWwvVtVrUoUmTlTjUjUjUjUjUkUkUkUCOX]ab`\^`a.a:`E`N~_V {^] x]ev\ls\tp[}nZkZiYgYeYdYdYdYdYeYeYeYeYFR[aefcabde+e7eB|dKxcSuc[ sbbpajm`rk`{h_f^c^a]`]_]_]_]_]`]`]`]`]JV^eiigef hi(~j5zi?viIshQpgY mg` kfghepedycd`c^b\bZbYbYbZbZa[a[a[a[aMYbhmmkik m|n%xn2un=qnFnmOklV hl^ ekecjm`iv]i[hXgVgUgTgTgTfUfUeVeVeVeQ]flqpon}pxrus!rs/os:lsDirLfrTcq[ `pc ]pk[otXnUnSmQmOmNmNlOkOkPjPjPjPjUajqutt|svuqwoxly+iy7fy@cyI`xQ]wX [w` XvhUuqRu|PtMtKsIsHsIrIqJqJpKpKpKpZfovyxxwyo|j} g~d&b2_=\FZNWUT~] R}e O}oL|yJ|G{E{D{C{CzCyCxDwDvDvDv_kt|~}~rfa^\!Z.X8UBSJPRNZKb Il Fw CA?=<<<===~=~=~fq{ym_XTRP'O3M=KEINFVD_Bh?s = : 8 766555666myrfZPI GE D+C6A@@H>QKZj~̫̔|n`RE9.#  '1>K[nބߛߴpaSE8,!  $/<K]qrcTF7*  +9J^tteVG8*  (7J^v$" !$)2>LYepz! #-:HUalv )6CP\gqz $0>KWblu~ + 8EQ\fpx   $0> J V a j s { " ! ! (6COZdmu}&%&'%! -<I U!_"h"p#x###$$$$%%&&&&&&&&)(-0/+" #&'(6*D+O,Y,b,j-r-z--------..//....,.5996/-0!214>5J5T5]5e5m5t5|554445556666555/4<AB@:69;,<:=F=P=Y=a=h @B'C5DBDLDUC]CdCkBsB{B A A A A~A|AzB yB xB xB xB xA xA 6@HMNMIEFH#I2J>JHJQIYI`IhHoHw G }G zGxFvFuFsFrGqGqG qG qG qF qF 9DLQSRNJKM O.O:OEONOVN]~Nd|Ml yMt wL} uLsLqKoKmKlKkLjLjLjK jK jK jK =HPUXVSOPRT+T7TBTK|TSzSZxSbuRi sRq qQz nQlPjPhPfPePdPdPdPdPeO eO eO ALTY\ZWTU WX'Y4}Y?zYHwXPtXXrW_oWf mVn kVw hUfUdTbT`T_T^T^T_T_T_S _S _S DPX]_][XZ [}\$z]1w]<t]Fq]No\Ul\]j\d h[l eZu cZaY^Y\X[XYYYXYXZXZXZW ZW ZW HS[aba_\^{_xa!ub.rb9obClaKjaSgaZe`b c`j `_s ^^}[^Y]W]U]T]T]T]U\U\U[V[ V[ LV_dedcaybudreof+lg7jg@gfIefQbeX`e`]dg [dp Yc{VcTbRbPbObObOaOaP`P`P` P` OZcihggyesgoiljik(gl4dl=blF_kN]kVZj]Xje Vin Six QhNhLgKgIgIgIfJfJeKe Kd Kd T^gmlkkskmmhn epbq$`q0^q:\qCYqKWqSUpZRpbPpk Nou Ko InGnEnDnCmDlDkEk Ej Ej Ej Xclqpozonpes`u]v[wYx+Wx6Ux?SxHQxOOwWLw_JwhHvs Ev Cu Au?u>u=u>s >r >q ?q ?p ?p ^iquttutiv^yX|T}R~Q&O1M;LCJKHTF\CeAp?~|<~ :~ 9~ 7~ 7} 7{ 7z 7y 8x 8x 8x doxyy{ypzd|XPK HG E+D5C>AG@O>X4*!! + 6 A N \ l teWK@5*!  "+6BP_qćĝĵxj\OA5)  !*5CRcxՏէ{l^PB4(  '3BTg~}n_QB4'  $1AUjqaRD4&!/AVm  %.;IVbmv  *7EQ^hrz%2@LYcmu}  ,:GS^gpx  &3@MXajrz  +9FQ[dlt{   " 0 > J U ^ gov~ (7DOYaiqx"!'*)$"1 >!I"S#\$d$l$s$z%%%%&&&''((''''&)1440)#&(+*8+D,N-W-_-g-n.u.}......////////)18<<92- /1&344@5J5S5[5b5i5q5y5555556}6{6{6z6z6z5z5-7?CD@:679":/<;h >g >f?e?e?d?dWaihg{gqgeh\jXlTnRoPo$Np.Mp8KqAJqIHqQFqYDpbBpl@px>p0$  !,:J]rzk\M?0# +:Maym^O@1"  );Of"+8FS^irz&4BNZdmu} ".<IT_hpx   (6CNYbkry "/<HS\elsz  (5ALV_fnt{  -:EPYahov}   $ 2 >IS[cjqx#%$+8CMV]els{       &-0.(" &!3">#H$Q$Y%`%g&n&v&&''''((~)})|(|(|(|($.5861,&&(!*.+9,D-L-T.\.c.j.r.z//}/{/z/x/v0u0s0s0s/s/s/*5;?<83/.02)354?5I5Q5X~5_}5f{6ny5vx5v5t5r6p6o6m6l6k6k6j6j5j50:ACA>:65 78%:1;<|;Ez"z?.x@8uABsAJrAQpAYnA`lAgjAphAygAeAcAaA`A^A^A]A]@]@]@]@9CJKIGDA~AzBvCtE*qE5oF?mFGkFOjFVhF]fFedFmbFv`F^F\E[EYFXFXFWEWEWDXDXD=GNNLKI}ExFtGpHnI'kJ2jK<hKDfKLdKSbKZ`Kb_Kj]Kt[JYJWJUJTJSJRJRJRIRIRHSHAKQPON~LxHrJnK kMhN$fN/dO9bOBaPI_PQ]PX[O`YOhWOrUO}SORNPNNNMNMNMNMMMMNLNLDNTSRQzPrMlOhP eQcR!aS,_S6]T?[TGZTNXTVVT]TTfRSoPS{NSLSKSISHSHRHRHQIQIPIPHRWVUTvSlQgSbT_V]W[W)YX3XX<VYDUYLSYSQY[OXdMXmKXxIXGWEWDWCXCWCVCUDUDTDTLVZYX{XqWfVaX]YYZW[U\&S]0R]9Q^AO^IM^QL^XJ^aH]kF]vD]B]@]?]>]=\>[>Z>Z>Y?YPZ]\[v[m[a[[]V^R` PaNb"Mb,Lc5Jc>IcFGcNFcVDc^Bch@cs>co=o"JV`hpx~ +8EPZckry  %2?JT]elsz  ,8CNW_gmtz  $1<GQY`gnt{  )5@JS[bhou}  !.:DMU \ c j q x  ! &3>GPW^els|#)*&"!-8BKRY`gow~ } { y!w"v"u"t!t!t!!+11.*&! !(#3$=$F%N&U&\~&c|'k{'sy'|x(v(t(r(q)o)m)l)k)k)k(k((28752-)' (*#+/~,9|,Bz-Jx.Qw.Xu.`s/gr/op/yo/m/k/i/h0g0e0d0c0c/c/c/.8=<:730. /{0x2+v35t3>r4Fp4No5Um5\l5dj5lh5ug5e5c5a6`6_6]6]6\6\5\5\43<A@><96{4w5t7q8'o92m9;k:Cj:Kh;Rg;Ye;ac;ib;r`;}^;\;[;Y;X;W;V;V;V:V:V97ADCB@~>y;t:q:m<k=$i>/g?8e?@d@Hb@Oa@W_@^]@f\@oZ@zX@V@T@S@R@Q@P@P?P?Q>Q>;EGFEDyBt>o?k@ gAeB!cC+aC5_D>^DE]EM[ETYE\XEdVEmTExREQDODMELEKEKDKDKCLBLB?HJIH}GuEnBiCeD bE_F]G(\H2ZH;YICWIJVIRTIYSIaQIkOIvMIKIJIHIGIFIFHFHGGGFGFCLLLKyJpIiFdG_I\JZKXL%VL/UM8SM@RMHQNOONWNN_LNiJNsHMFMEMCMBMAMALALBKBJBJGOONNuMlLcJ^LZMVNTORP"QQ,OQ5NR=MRELRMJRTIR]GRfERqCR~AR?R>R=RW{?\F>]O=]W;]a:]l8]y6]4]3]1]1\1[1Z1Y2Y2XTYXXsWiW`XTYN[H]C_@`>a=a ;b):b29b:8cB7cK6cT4c]3ch1cv/c.c,c+c*c*b*`+_+_+^Y\\{[o[e[\\Q^I`CbKYi{w}uptbuUxI|?4+" "+5BP_q}x|i|[NA6,#  "+7ETf{qaSF9.#  !+8HZnyhYK=1%  +:L`wؒجp`QC5(  *<QggXI:* ,?Un%2?KV`hpx -:FQ[cksy  (5@KU^fmtz ".:EOX`gmtz'3>IRYagmsz !,8BKSZagmtz%1;EMU[bhnu|   )4>GOV\cipx   " . 8 A J Q X ^ e lt}~}zxwwww!$# '2<DLSZ`~h}o{xyxvtsronmmmm )+*($  "-~7|@zHyOwUv\tcskq tp n!l!k!i"h"f"e#d#d"d"d!&/10.+($ ~ {"x#)u$3s%<q%Cp&Kn&Rm'Yk'`j'hi(qg({e(d)b)`)_)^*\*\)\)\)\(,55431-|+y(v'r)p*%m+/k,8j,@h-Gg-Ne.Ud.]c.ea/n_/x^/\/Z/Y/X0V0U0U/U/U.U.1:9876z2u0r.n. k/i0!f1+d24c2=a3D`3K_4R]4Z\4bZ4kY5uW5U5T5R5Q5P5O5O5O4O4O36=<<;{:t7o5l3h4 e5b6`7(^71]8:[8AZ9HY9PW9WV:_T:hS:sQ:O:N:L:K:J:I:I9I9I8J8:@??>w=p;j8f8b9_:\;Z;%Y<.W=7V=>T>FS>MR>UQ>]O?fM?pL?}J?H?G?E?D?D>D>D=D=E<>CBB}As@k?e<`<\>Y>W?U@"SA+RA4PB<OBCNBKMCRKCZJCdHCnGC{ECCCBC@C?C?C?B?A@A@@AEEEyDoDgB`?[AWBTC QDOENE(LF1KF9JGAIGHHGPFGXEGaCHlBHx@H>HCKFBLMALV@L_>LjPC%cG#cQ"d\!didyddddca``_YX{XmXbXYXPYG[>^7`1c*f$i !j jj k(k0k9kBlLlXleltllllkihhg]]u\h\^\U\K^Ba9d2g+j$mps ttt!u)u2u;uFuRu_ un u u ut t s q q pbapadaZaObEe2' $1@Re}o_QC6*  $3DXnшФgWI;.! $6I_x_PB4& %9Og"/;GR[dlsz *6ALV_fmtz $0;FPY`gntz *5@JRZagmsz#.9CLT[agmsz (3=FMU[agmsz!,6?GOU[agnu}   %09AIPV\bipx~}|{{{{  )3<CKQW^dl}t|~z x w u s r p p o o o    # - 6~>|F{MySxZvauhsqq{pnlkihfeeee$$#!|y(v1t:rAqHoOnVl]kdimhwfdca`^]\\\\%*))(%}"yxvro#m-k5i=hDfKeRc Yb aa i_!s]!\!Z"Y"W"V#U#T#T"T"T"+...-|+v(r&o#m! j"g#e$)c$1b%9`&A_&H]&O\'V[']Y'fX(pV(|T(S)Q)P)O)N)M)M)M(N(02221v0p-k+h)f( c(`)^*%\+.[+6Y,=X,DW-LU-ST-[S-cQ.nP.zN.L/K/I/H/H/G/G.G-H-4555{5r4k2f/b._-\.Z/X0"V0+U13S1:R2BQ2IP2PN3XM3aK3kJ3wH4G4E4C4B4B4B4B3B2B28888w8m7f6a3]2Y2W3 T4R5Q5(O60N68L7?K7FJ7NI8VG8_F8iD8uC8A9@9>9=9<9<8=7=7=6;;;;s;j:b9]7X6T7Q8 O9M9K:%J:-H;5G;<F=<=:=9=8=7=7<8;8;8:=>>|>o>f=^=X;S:O;L<I=G>F?"D?*C?2B@:A@A@@I>AQ=AZ@@@xAlAb@[@T?N?J@FADBBC@C?D'>D/:EF9EN8FX6Fb5Fn3F|1F0F.F-F-F-E.D.C.CCCCtChC_CWCPCHCDEAF>G nJnWnenvnmmllkjjZtZfZ\YSYHZ?]6`.c&gjmqt w wwww$x-x7xCxPx^xoxxwvuutt~_n_b^Y^M_Bb9e0h'lptw {~ &0;HWh|weid_cRdGgGNU[agmsz#.7@HOU[`fls{ '1:BIOU[`gmu~ !*3<CIPU[ahp~y|{yxvusssss   $.6>}D|KzQyWw]vdtlsuqonlkihhggg  |y(w0u8s @r Fp Lo Sm Yl aj ii rg ~f d b a ` ^]]]]{xxw sp"n+l3j;iBgIfOdVc]af`o^{\[YWVUTTTT""##"y!sonm jge'c/a7`>^E]K\RZZYbWlVwTRQONMLLMM&''({'r&l$h!fdb_]#[+Z3X:WAV HT OS WQ!_P!iN!tM!K"I"H"G"F#E#E"F"F!*++,v+m*f)b&_$]"[!X"V#T$(S$0R%7P%>O&EN&LL&TK'\I'fH'qF'E(C(A(@(?(?(?(@'@'-./}/q/h.a-]+Z(W'T' R(P)N)%M*,K*4J+;I+BH,IF,QE,ZD,dB-o@-}?-=-<-:-:-:-:-:,:,012y2m2d2]1X/U,Q,O- L-J.I/"G/*F01E08C0?B1GA1O@1W>1a=2m;2{928262524242515150345u5i5`5Y4T3P0L1I1G2E3C3B4'@4.?56>5==5D<6L:6U96_76k66x472717/7/7/6050504667r8f8]7V7P6K4G5D6A7 ?8>8<9$;9,:939::8:B6:J5:S4;]2;h0;v/;-;,;*;);*:*:+9,889|:n:c:Z:S:M:F8B:?;<< :<8=7=!6>)4>03>72??1?G0?P.?Z-@f+@t)@(@&@%@$@$?%>&=&=;<x=j=_=V=O=I=B=<>9?6A4A2B1B/C%.C--C4,D<+DD*DM(DX'Ec%Eq#E"E EEDDC B!A>?t@g@\@S@L@F@>A8C4E0F-G +H*H)H"(I)'I1%I9$IA#JJ"JU JaJoJJJJJIHGGBBpCcCXCPCICBD;E5G0I+K&M $N"N!O O%O,O5O=PGPQP]PkP|PPPPONMME{FkF_GUGMGFG?G7J1L+N&P SU VVV V'V0V9WBWMWYWhWyW W W V V U TSIvJgJ[JQJJJCJ;L3N,Q&T!VY\^ ^^^"^* ^3 ^= ^H ^T^b^s^^^]]\[[NpNbNWNNNGN>O6Q.T'W!Z]`c f gggg$g-g7gBgNg\gmgffeeddczRjS]RTRKRBS9U0X([!_beh kn ooopp'q0q;qHqVqfqyqpoonmmsXeWZWQVFWHRZbiou{ !,8CLT\ciou{ '2<FNV\chnt{!+6?HOV\agmsz %/8AHOU[afls{)2:BIOUZ`flt} #,4<CIOTZ`fnw~|{zxxxxx &.6=C~I}O|Uz[yawiuqt|rqonmlkkkk  | z(x0v8t>sDqJpPnVm]ldjmhwgedca`````| y x usp#n+l3j9i@gFfLeRcYba`j_t]\ZYWV V U U V vqnm m j g e &c .b 5` <_ B^ H\ O[ VY ^XhVsUSQPNMMMMMwoifddb_]![)Z1X8W>VETLSSQ[PeNpL}KIGFEEEEE!"|"q"h!b_\[Z WUT%R-Q4O;NBMHKPJXHbGmEzCB@?>=>>>#$%w&l&c%]$Y"VTS QNM"K)J1I7G>F EE MC UB _@!j?!w=!;!9!8"7"7"7"8!8!&')s)g)_)X(T&Q#O"L"J"H"G#E$&D$.B$4A%;@%C?%J=&S<&\:&g9&u7'5'4'2'1'1'2&2&3%)*},o,d-[,U+P*L(J&G'D' B(A(?)#>)+=)2<*9;*@9*H8+P6+Z5+e3+r1+0,.,,,+,,,,+-*-*,-y.k/`/X/Q.L.H,E+A+?, =,;-:.!9.(7./6/65/>4/E3/N10X00c.0p,0*0)0'0&0&0'/(/(..0v1h2]2U2N1H1D0@/<0:1 71625233%23,13304;/4C-4L,4V*5a)5n'5~%5#5"5!5!4"4#3#213r4e4Z5Q5K4E4@4:374452607/7.7"-8)+81*88)9@(9I&9S%9_#9l!:| :::9988746n7a7W7N7H7B7<75829/:,; *<)<(=&=&%=.$=5#>=">F >P>\?i?y???>>=<<7z8j9^:S:K:E:?:9:2<.>)@&A$B"B!B C#C*C2C:DCDMDYDgDwDDDDCBBA;v<f=Z=P=H=B=<=6>/@*B%D!FH IIII&I.J6J@JJJVJdJtJ J J J I H G G>q?b@V@M@E@?@9A2B+E&G!IKNPPPP!P)P1 P; QF QQ Q_ QoPPPPOONM}BkC]DRDJDCCGOW]ciou|"-7@IPW]chnu| &0:BJPV\agmt| *3;CIOUZ`fmt} $,5<CIOTZ_fmv~&.6=CINTY~`|gzoyzwutrrqpppq !})|0y7x=vCtIsNrTpZobmjktjhgeeddccd~{wurq#o+m2l8j>iDgIfOeVc]be`o_{]\[YYXXXY }v q om kige&c-a3`9_?]E\K[RZYXbWlUxSRQPONNNNtlgec c a^\![(Y/X5V;UBTHSOQVP _N iM vK I H G F E E E E xme_\ZZZ W U S $R +P 1O8N>MEKMJUH^GhEuCA@>====>rg_YUSRR PNL J'I.H4G;EBDICRA[?e>r<:8755667{ m!b!Z!TPMLKIGED$B*A1@8??=F<O:X9c7o5~320///00"w#i$^$V$P#K"H FEC A?>!<';.:59<7D6L4 V3 `1 m/ |-!,!*!)!)!)!* + "%s&e'['S'L&G%D$B!?!=! ;!9"8"6#%5#+4$23$92$A0$J/%S-%^+%k*%z(%&%$%#%#%$%%$%$%'o)b*W*O*I)D(@'=&:%7&5&4'2'1("0()/(0-)7,)?+)G))Q(*\&*i$*x#*!****) )!((|*l+_,T,L,F,A+<+8*5*2+0+ .,-,,,*-&)--(-4'.<&.E$.O#.Z!/g/v////..--+x-h.[/Q/I/C/>.9.4.0.-/+0 )1'1&1%2#$2*#21!39 3B3L3W3d4t44333321.t/e1X1N2F2@1;16111+3(4%5#6 !6 77 7'8.868?8I9U9b9q999888761p2a4U4K4D4=48434-5(7$9 :; <===#=+>3><>F>R>_>o> > > > = = < ;}4k6]7Q7H7A7;75707*9%; =?AC CCCD'D/D9 DC DN D[ DjD|DCCCCBAx8g9Y:N:E:>:8:3:-;'=!@BDFI J J J J#J+J4J>JIJVJeJwJJIIIHHr<b=U>J>B=<=6=/>)@#BEGJL O P QQQQ&Q/Q9QDRQR`QrQQQPPOOl@]AQAGA@@9@2A*C$FHKNQ SVW XXYZ!Z)Z3Z?ZLZZZlZYYXXWWeEXEMEED>D5E-G%JMPSV Y\^_ ` abcd#d-d8dEdTdfd{ccbaa`_JSJJICH9I/L'ORUY ]`cfhij k mnpq&q1p>pNp_psoonmllZOPNHM=N3Q)T X\` dhkortuwx z |}(5EVk~}|{zVTNSBT7V,Z"_ch mrvz} ,;MbzUYHZ;]/a$flr w} !1CWpNa@d3i'nu| %7LdFk9p+w +@XtӒҰ>y1# 3Kd )4?HPX^ekqw~ #.9BJRX^djpv}}ICC_PROFILE  (2;DKQX]chov~"+4=DKQV\agnv %.6=DJOUZ`fnw'/7=CINTY`goz~|zyxwxxwu !)07}=|CzHyMwSvYtariqsomljihiiii|ywvt#s+q1o7n=lCkHjNhTg[eccmbx`_]]\\\\\xtpm kihf%e,c2b8`=_C^I\O[VZ^XhWsUTRQQQQQR ~ s l heca _]\!['Y-X3V9U?TESKQRPZOdMoL}JIHGGFGG ukc^[ Z Y WUSR#Q)O/N5M;LAJHIOHWFaEmCzB@?>===>|nd\VSQP P OMKI%H +G 1F 8D >C EB M@ U? _= k< y: 8 7 5 5 5 5 6 vi^VPMJIIH F D C!B(@.?5><=C;K:T8^6k4y21/---./qdYQLGDCBA @><;%:+82796@4H3Q1\0h.w,*('&'()}m`VNHC@>=;9865"3(2/160=.F-O+Y*f(t&$"! !"#yi!\"R"J"D!?!< 9854 20/.%-,+3*;)C'M&W$d"r  u"e#Y$O%G%A$<#8#5"3 0 .! ,!+!*"("#'")�%#8##A"$J!$U$a$p$$$$$$##"q$b&V'L'D'>'9&5&1%.$+%)%'&%&$'#' "''!(. (6(>(H)S)_)n))))((('%n'_(S)I*B);)6)2(.(*(&)$*"+ +,,,$-+-3-<-E.P.].l.~.. - - -,,|(j*[+P,F,?,9,4+/+++&,"./0 1112!2(20293C3N3[3i 3z 3 3222 1 1w+f-X.M/C/<.6.1.-.).#02356 7778$8,85 8? 8J 8W 8e8v8877766s.b0T1I1A19141/0+0%2 368:< = = = =! =)=1>;>F>R>a>r>===<<<m2]3P4F4>47423-3'4"68:=? A C DDDD$D-D6DADND\DmDDCCBBBh6X7L8C8;75606)7#9;=@B EGI IJKK K(K2K=LILWKhK}KJJIIIb:T;I;@;9:39,:%<?ADG ILOP P QRTT#T,T7TDTRTcTwTSRRQQ\?O?E?>>7=/>'@ CFIL ORTWXY Z[]^_&_1^=^L^]^q]]\[ZZVDKCCBFLRX]cipx &/7?EKQV\ahpy  (08>DJOUZahq{|{y "*18>CHNT~Z|azixsvusqpoooml ~}|$z+w1u7t=rBqHoMnSlZkbilgxfdba`aaa`|wrp nllk%i,g1f7d=cBbH`N_U]]\fZrYWVUTTTUUunifc a`_^ ]&[,Z2X7W=VCUISPRXQaOlNzLKJIIIIJtjc^[YW VTSR"Q(P-N3M8L>KEJLHTG]FhDuCA@@??@@ y l a Z U R PON LKJI#G)F/E4D:BAAH@P>Z=d<r:9876667 re[SNJH G G EDBA @%>+=1<7;>:E9N7W6b4p210/..-.}l_UNHDA@@ @ > < ; 9 "8 (7 .6 55 ;3 C2 L0 V/ a- o+ * ( ' % % & ' wg[QIC?<:998 7542%1,02/:-B,K*U(a&o$#! scWME@;85432 1/-,"+)*0(7'?&H$S"_ m~o_SJB<741/.,+)(' %&$-#4"= FQ]k|}k\P G ? 941-+)'% $"! #*2:DN[izzgY!M"D"<"6"2!.!* ' $"  !!!"!"'"/"8#A#L#X#g#x# # # # " " !vd"V#K$A$:$4$/#+#(#$# #$%& &&''%','5(?(J(V (d (t ( ('''&&q"`$S&H'?'7&1&-&)%%%"%'(*+ ,,,,",)-2 -; -F -R-`-p--,,,++m%]'O(E)<)5)/(+(''#'(*,.01 1 1 1 1&2.272B2N2\2l2211000h)X*L+A,9,2+-+)*%* +,.024 7 7777"7*838>8J8X8h8|776665c,T.H/>/6.0.+-'-"-/1357 :; <=>>>&>/>:>F>T>d>w>==<<;^0P1D2;241.0)/$02469 ; =@A B CDEF"F+F5FAFOF_FsEEDCCBX4K5A59524-3&4 58:= @ BEGHJ KLNOO%O/O<OJOZNmNMLKKJS9G9>97817)7!9<?B EHJMOQRT UWYZY)Y6YDYTXgXWVUTTN=C=<<5;,<$>ADH KNQTWY[]^` bdgg"f.f<fMe`ewdca`_IBAA:?0@&CFJN RVZ]`cegikmo ruwv&v5uFtYtosrponFF@E5F*H LQV Z_chkoruwy{} +<OfFK:L.O#SX^ diotx| !1D[v?R2U&Z`g mt{ &9Pj7\+ahp x.E_~ɞȾ/i#py #:Tr !+5>GNU[afms{ $.8@HNTZ_ekr{(19@GMSX^dks| !*2:@FLQV\cjs~}| #+29?DJOU[ckv~|zywrpo %,28}={CyHxNvTu[scqnozmljihgedc{xv utsr%p,n2l7j<iBhHfNeUc]bf`r^][ZYYYXXyqmif edcc a&`,^1\7[<ZBXHWOVWT`SlQyPONMMMMMukd`]ZX WVVU!S'R,Q1O7N=MCLJJRI[HfFsEDCBBBCCxjaZURPN M LKJI"H'G-E2D8C>BEAM?V>a=n;~:988899o b X Q LIGFD CBAA?#>)=.;4::9A8I7R6]4j3z210///0 x h \RKE A ? >=< ;:98 6%5+40372>1F/P.Z-g+w*)('''' rcVME@<97 6 6 54210"/(..-4+<*D)N'Y&e$u#"  m^RHA;74200 0 / - , * ) %( +' 2& :$ C# M! X e u       {iZNE=830-+**) (&%$##)!1 9BLXfvweWKB:40,)'&%# "!  '.6@JVdt  saSH?72-)&$"  $+4=HTbr       o^PE<5/*&#! ")1;E Q ^ m k[MB:2-($! !!!!"& ". "7 "A "M"Z"i"|""!! gWJ!@!7"0!*!& "  !#$& & & & &"&*'3'='I'V'f'y'&&%%$c T"G#=$4$.#(#$"!"!"#$&( * ++++,',0,:,E,S,c,v,++**)_#P%D&:&2&+&&%#$$$%')+ -/ 00111#2,262B2O2_2r1100//Z'L(@)7)/))(%'!&'(*,. 024 5 6788 8(829=9K9[8n877655U*H,=,4,-+(*$)*+-/ 1 468:; = >@@@$@.@9@G@V@i@?>=<<P/C/9/2/,-', -/13 6 8;=@ACE FHJJJ(J4IBIQIdH{HGFEDJ3?36301*0#1358 ;>ACFHJLNO QTUU"T.T<TKS^StRQPONE7<756/4&57:= ADHJMPSUWX[] _bbb'b4aE`W`m_]\ZYA<:;49*:!<@C GKOSVY\_acegjm psr r-q=pOoenmkih?@9>.?$BFJ OTX]aehknqsux{~ $4F]v~|z?D3E(HLR W]chmqvz~ )<Rl8K,N SY `gntz 0F`~1U$[aiqy %;TqȒų)biq{ /Ie&0:BIPV\bhov  *3;CIOU[`gnv #,4;BHNSY_fnw~%-4;AFLQW^eny|vsr &-4:?EJPV^f~q|}ywusrnige  }&z-w3u8t>rCpIoOmVl^jhhugedba`\[Z~xsom lkkj h&f,e2c7b<`B_H]O\WZaYmW{VUSRRPOOxngc`]\ [[[Z!X&V,T1S6R<QBOINQM[KfJtIHGFFEEExlb[VSQOO NNML!J&I,H1G7E=DDCLBU@`?n>~=<;;;;<~naXQLIGED CCCB@"?'>,=2;8:?9G8P7[5h4x3211123vfYPIC@><;: :9976#5(4.342;0C/L.W-d,s+*))))*n_ S J B = 9 6543 2110/.$,*+0*7)?(I'T&`$o#"!!!!"{ h Z NE=8 3 0 . - -, +*)('!&'%-$4#="F!Q]lu dUJ@93/,)' ' ' & %$"! $+2:DO\k}q_QF=60+(%#"! !     " ) 1 9 C O \ k ~  m\NC:2-(%"  !(09DP] k |  iXK@70*&" %.7 @ K X gxeUH=4-(#   " ) 2 <GTcuaRE;2+%!   &/8DQ`r^OB8/)#     !#!+!5!@!N!]!o! ZK?5-'" ! " # $%%& &(&2&=&J&Z&l&%%$##UG ;N;`:w98765G);*2*+)%'!&'(*, /1468;=?A CEEE!E,D9DHD[CqBA@?>B-8./-)+$**,. 1 47:<?ADFHJL NPPP'O4OCOUNjMLJIH>251./). .137 :=@DGILOQSUXZ ]_^ ^,]<\N[cZ~XWUT:634-2$369=AEILPSVY[]`behk oon%m4mFk[juhfdb8927(9;?DIMRVZ^behkmpsvy} ,>~T~k{zwu8=,>"AFKQW\bfkotx{~ !3Ib1D%HMSZahnty (>Vs*OT[ bjs{2KfƇ©"[b kt}'?[z ",5=ELRX^djrz %.7>EKPV\bjr|'/7=DIOU[ais{vt  (/6<BGMSYaju|smjh !(/5:@E~K|RzYxbvltyrqomle`^\|zx wxwt!r'p-n3l8k>iDhJfQdZcdap_^]\[WTRQtnjfec ccca!_'],\2Z7Y=WCVKUSS\RhPwONMLKIGG|ne^YWUTS STRQ!O&N+L1K7J=IDGLFVDaCpBA@??>=>ocYQMJHGG FFGED!B&A+@1>7=><G:P9[8i7z6554445teXOHC?=<<; ;;:97!6&5,42391A0K/V.c-s,,++++,l]QH@;74322 2 110/-",(+.*5)=(F'Q&^%n$##""#$weVKB:50-,+*) ))('&%$$*#1"9!C NZi|p_Q F = 5 0 + ( %$## " "!  &.6?JWfxk[ M B 9 1 , ' # !     #+3<GTcug W I>5.($           ! ( 0 : E R a s      c SF;2+%!        ' / 9 E Q ` q      _PC8/(#      $ , 6AN]o\M@6-&!      !)3>KZlXI=3+$     '0;HXjUF:0("     $-8FUg}QC7.&         !!*!5!B!R d zM?4+$  !# %&&&'''2'?&N&`&w%$#"!H<1("  !#%') , ....#...;.J-\-r,+*)(D 8!.!&!  !#%'),.03 5 6666)666E5W5m4210/?$4$+$$#!  !# %(*-/2479;> @AA@%@1@@?R>g=<:98:(0()'#%#$%( *-0368;>@BEGJ MMLL+K:JLIaH|GECB6,-+')#'(*- 037:=@CFHKMPSVY [[Z%Y4XFWZUtTRPO30,.',-/2 6:?BFILORUXZ]`cgk lkk,i=gRfjda_]13,1"259 =BGLPTX[_behknquy} $~5|I{axvsp16&8;@ EKQV[`einrvy|~+@Ys+> AG MT[ahnsy~!5Mi#HNT\dmu| )A\|U\enw6Qn߱  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C"K2TE]Zdqjo˸r±twĴ{ͫԢۙᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚ%0:C"K1TE\[cqimɿpruëxʢ|љؐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ%0:C"K1SE[[argknqsvȚyΒ~ԉ؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉%0:C!K1RDZZ`rejmprtĔwʋ{τԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄ%0:B!J0RDXZ^rdiloprvƆz%09B J/QCWZ\qdiknoqtx{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}$0 9BJ/PBUY[pchkmoqt}ww|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|$0 9BJ-O@SY[ocgjmoqszwt{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{$/ 8AI+M@RXZmbgjmoq{tvwq{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{$/ 8AI(L@QWYkazgknp}sxusxn|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|$/ 8AF(LAPUXfatg~korzuuxq{l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~#- 6 =F*K@OQX`akhtm{qytuxr{n~kւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւ#,/;E+I=NLWXaaiionytruwuqzwn}yk{i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|""':B*F9MEVObV~j\wp`sucoxem|gjhhjfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfk& :>'D3K=UE|aKujOppRluTjyVh|WfXdZc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[ & 6;#A,J4xS:q_?liChoEetGcwHb{Ia~J_J^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8@I+R<\Oedmxsըy̟}ŗŶ̲ү֧~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~"- 7@I+R<[Pddlyrӭwʤzœ~÷ʲҮئڡաաաաաաաաաաաաաա"- 7@H+QG(N9TNYe`{fjmoruxz}tqqqqqqqqqqqqqqq!, 5>G'M8RLWd_zfjloqt|wv|qnnnnnnnnnnnnnnn!, 5>F%M6OLUc_xeiloq~txws{nkkkkkkkkkkkkkkk!, 5>F"K4OLTb^tdimorzttxp{khhhhhhhhhhhhhhh!+ 4 =EI5NLS_]pd}inq{tvwqym}iŁfąfąfąfąfąfąfąfąfąfąfąfąfąfąfą *3 <BI5MJR[]ietj}o|swwszo}lрhЄeχeχeχeχeχeχeχeχeχeχeχeχeχeχeχ )13 B!H5LFQU]`ejlq}qvwvzsy}o|l߀iރg݇e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉%"2A"E3JAQM]Vf^}ndvshrxkn|mlojpgresctctctctctctctctctctctctctctct1>"B/H:PD\K{gQtnVosYlx[i|]g^f_d`baababababababababababababababab 2:?*F3O:x[@qfElmHhsJfwLd{MbNaO`P^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q  05<$|D+sM1lX5}ICC_PROFILE gc9ck;aq=_u>]y?\|@[AZAYBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>F%P4ZEdWmiw{}ٖюˈǂ~zwuµqórrrrrrrrrrrrr* 5=F%O4YFcXlku}ߣ{՛͒Nj…|ùyǵvʭuƫvīvīvīvīvīvīvīvīvīvīvīvīv* 4=F%N4XFaYjlsݨxӟ~ʖĎŷ˴|ϫxϥyȤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤy* 4=E%N4WF`YimqܬvФ{Țŷ˴βѤ|џ}ʞ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}* 4<E$M4WF_YgnoڱtϨyş}Ƶ˯ϪҞә̘ʘʘʘʘʘʘʘʘʘʘʘʘ* 4<E$M3VF^Zfomٶsͭwĥ{Ʈ̨ϢҙӔ͓˓˓˓˓˓˓˓˓˓˓˓˓* 3<E$L3UF]Zeolػq̲uí|ƨˡЛӔԏΏˏˏˏˏˏˏˏˏˏˏˏˏ* 3<D#L3UE\ZdojoʹtzƢ˛ϕҏԊΊ̊̊̊̊̊̊̊̊̊̊̊̊* 3<D#L2TE\Zbphmżsx}ŝ˕ϏҋӆΆ̆̆̆̆̆̆̆̆̆̆̆̆) 3;D#L2SEZZ`pflqw|ŗʐΊхҁ΁́́́́́́́́́́́́) 3;D"K1RDYY_pdjoty}Ðȉ̃~}|||||||||||||) 2;D!K1QCWY]ocimptx†}ƀzvvwwwwwwwwwwwww) 2;C K/PBVW[nchlnqt~xw|rmmnnnnnnnnnnnnn) 2:CJ.O@RWZmbgknqtywt{njgfffffffffffff) 1 :BJ+L?QVYka|gknq{tuxp{lhdccccccccccccc(0 9BG(L@QUXhawglo~sxvryn|ifbaaaaaaaaaaaaa'/ 8 AF*L@PSWcapg{mqzutyp|lh̃dˈaʍ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ&-4<F+J>OOW\ahhqnx{s}uxq{mjڃgنd׋a֐`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց#&)<D+H;MIWTa]je|pjvvnqzqm~tkvhwfycza|`|`|`|`|`|`|`|`|`|`|`|`|`|( ;A)F6LAVKaR{kWtq\ov_l{aicgdefcgah_i_j_j_j_j_j_j_j_j_j_j_j_j_j ) 9>&D0K9T@xaFrjJlpMivPf{QdScTaU`V^W]X\X\X\X\X\X\X\X\X\X\X\X\X\X )4:!A)zI0rR6l^:hh=do@atA_yC^}D]E\E[FZGXGXHXHXHXHXHXHXHXHXHXHXHXHXH* 06w>"nG(fP,aZ/]d1[l3Yq5Xu6Vy6V|7U7T8S9R9R9R9R9R9R9R9R9R9R9R9R9R9R9) 5;D!N-YFI3NIT]\nc}imq{usxn|ieb_^^^^^^^^^^^^$,4 =BI3NHRZ[icvio~swwq{lhʃdɈaǎ^ƕ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ#*25 BH4LFQU[bdmkvp}yuszn~kׂgՆdԋaӐ^і\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ!&%3B!G3KBPO[Zecljzrptxto|wlzh|f}c`^ߖ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ3@"D0I=PH[PeWzm]tsaoydk~ghifjdlbm`n]p\q\q\q\q\q\q\q\q\q\q\q\q 3< B,H6O?ZFxeKqmOlsRiyUf~WdXbYaZ_[^\\][^[^[^[^[^[^[^[^[^[^[^[^  39?&F.zN5sX:mc?ilBerDbwF`|G_H]I\J[KZLXMWMWMWMWMWMWMWMWMWMWMWMWM! .4; vC'mL,fT0b`3^i5\o7Zt8Yy9X}:W;V;UR>R>R>R>R>R>R>R>R>R>R>" )~0s8i@bI#[Q&WZ(Ub*Ri+Qo,Ps-Ow.Nz.N}/M/L0K0K0K0K0K0K0K0K0K0K0K0K0K0(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(39BK'V4aBmPw]hr냒{}xtronlk›iʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜ'28AJ'T4_CjQt_~l펈x燏―{wtqomlægæiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡ'1 7@I'S4]ChSrb|pꔅ}㋋݄~zuromikmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥ'0 7@H&R4\DfTpdys瘂ߏوҁ{vspmknppppppppppp&0 6?H&Q4[DdUnewvܔԌ΄}xutpoqsssssssssss&/ 6?G&P4YDcUlgux|٘ѐʇł|ztrtvvvvvvvvvvv&. 6>G%O4XDaVjhszz͔֝ƍ}yvxyyyyyyyyyyy&. 5>F%N3WD`Vhip{ުwП|Ǘ~y{}}}}}}}}}}}&- 5>F$M3VD_Vgin}֬sʣz~&- 5=F$M3UD]Vej߸k~ЯqŦx~%, 5=E#L2TC\Vcjڻi~̲pv|‹Š%, 4=E#L2SC[VajԿh~Ƕntz†„%, 4<D"K1RBYU`jf}¹lrx~€%, 4<D!K0QAXT^ie|kpv|}{yzzzzzzzzzzz%+ 3<D J.P?VS]hc{iotzzwtsttttttttttt$+ 3 ;CJ,O=UQ[gbzgmrx~ytpnmnnnnnnnnnnn$*2 :BI)L;SQZe`xfkpv|xrmjgghhhhhhhhhhh#)1 :BG%K;QPYc_tejosuxn}iea__bbbbbbbbbbb!(08 @E&K;OOW`_of|lqzuszlgDŽcƊ_đ\ęZäZİZİZİZİZİZİZİZİZİZİZİ &.3<E(J;NLV[_hgsm|~rvxp}kԂf҇cь_ϒ\ΙY΢XͫXͫXͫXͫXͫXͫXͫXͫXͫXͫXͫ#&);D)I:MHUU_`hhopxuurzym}ie߉bݎ_ܓ]ۙZڡX٨X٨X٨X٨X٨X٨X٨X٨X٨X٨X٨) ;C(G6LCUM_Vi]ypbsvgn|jjmgodqar_t]uZwXxXxXxXxXxXxXxXxXxXxXx ) ;@&E2KG"R-]:iGtS~_ir}yxtpmkjiȓfϕdѓeԎeԎeԎeԎeԎeԎeԎeԎeԎeԎ&0 5=F!P-[;fHqV|bmw耕zuromkiɞeɞg͘iѓiѓiѓiѓiѓiѓiѓiѓiѓiѓ&/ 4=F!O-Z;dIoXyeqꋌ|䃒}xtpmkf§hƢj˛lΖlΖlΖlΖlΖlΖlΖlΖlΖlΖ&. 4<E M-X;bJlYvhu珉ڀzupmkhkæmȟo̙o̙o̙o̙o̙o̙o̙o̙o̙o̙%- 3<D L-W;`KjZtj~y䓆܋Ճ|wtspknpƢrʜrʜrʜrʜrʜrʜrʜrʜrʜrʜ%, 3;DK,U;_Kh\qlz|ߗՎͅǀ{xvupqtĤuɞuɞuɞuɞuɞuɞuɞuɞuɞuɞ%+ 2;CK,T;]Kf\onvՙ}̑Ŋ|zytuwæyǠyǠyǠyǠyǠyǠyǠyǠyǠyǠ%* 2:BJ+S;\Kd]loۥsΝzŕ~}zy{|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ%* 1 :BJ+R:ZKb^jpөpȠw~}ţţţţţţţţţţ$) 1 9BI*P:YKa^ܵgqάoäu|ĥĥĥĥĥĥĥĥĥĥ$) 1 9AI)O9WJ_]ֹfpɰmszææææææææææ$) 0 9AH(N8VJ^]Ѽeoijkqw~ææææææææææ$(0 8@H'N7UH\\̿coipu{~{}}§}§}§}§}§}§}§}§}§}§$(/ 8@G&M5TF[[bnh~nsz~zxuwx§x§x§x§x§x§x§x§x§x§#'/ 7?F#L2REYZ`lf|lrx~}xtqopr§r§r§r§r§r§r§r§r§r§"'. 6>F K.PDXX^kezjpu|}vqmjijkækækækækækækækækækæ &-5 =DH-OBVV]hcxhnt}zvpkgecdeŤeŤeŤeŤeŤeŤeŤeŤeŤeŤ%,3 <@H.MBUT[eatfl~rvyoƁjʼneŒbĝ_ħ]Ĵ^Ĥ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ#)14 AG.LASRZaanhynzur|k҂eψ`͏\̗ZˠX˫W˺Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙ %$2 @G/K?QNZZbejn}ruux{o~i݄dۊ`ّ]ؘZ֠X֨VմTTTTTTTTTT1@E.JC+H7OAYI}cPwmVptZkz^hadcae_g]hZiXkVlTmTmTmTmTmTmTmTmTmTm 2;A'G1N9zX?sbEnlIisLfzOcQ`S^T\UZWYXWYUZT[T[T[T[T[T[T[T[T[T[Ϳ!17>"}E)uM0nU5i`9ej_w@\~BZCYDWEVFUGSHRIQJQJQJQJQJQJQJQJQJQJϸ#-3y;pC"iJ'bR*]\-Ze0Xm1Vs3Ty4S~5R6P7O8N8M9L:K:K:K:K:K:K:K:K:K:K:"( v/m7e?^GXN!TW#Q_%Ne&Ml'Kq(Jv)I{*H*G+F+E,D,C-C-C-C-C-C-C-C-C-C-t# i*`2Y:SBNIKQHXF]DcCgAl@p?t >x =| qJ}U^g{nvsrxo}ligƆeψb׊aوb݂ccccccccc}y&|. 2:CL'X3c?nLzWbk~syztpljhƏfђbђdՌeۆf݂f݂f݂f݂f݂f݂f݂f݂f݂}z&, 1 :BK&V3a@lMvZfp삔y{uqmkișd˛eΗgґh؊iۆiۆiۆiۆiۆiۆiۆiۆiۆ~{&+ 1 9BJ&T3_AiOs]~j쌈u煑~xrmlkŠgǠh˛jДlՍlىlىlىlىlىlىlىlىlى~{%* 0 8AI&R3]AgPq_{m參zއ~xtqonkţkȟm͘oґp֌p֌p֌p֌p֌p֌p֌p֌p֌|%)/ 8@H%Q2[AdQnavpܑ~҉˂}xusrpæoƢq˛sГtԎtԎtԎtԎtԎtԎtԎtԎtԎ|%(/ 7?G$O2YAbRkbޞrsҕzʍÇ}ywvvsåuɞwϖwґwґwґwґwґwґwґwґwґ}%'. 6?G#N1WA`Rhd֢pt̙wÒ~{zywyǠz͘{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ~$&. 6>F#M0V@^RݮfdХnsƝu|~}{}Ƣ~̙ДДДДДДДДД~$&- 5=E"L0T@]Qײdc˩lsszŤ˛ϕϕϕϕϕϕϕϕϕ$%- 5=E!K.R?[Qѵccƭjrqw~ĥʜΗΗΗΗΗΗΗΗΗ#%, 4 <DK-Q=ZP͸abhqo~u|æɝ͘͘͘͘͘͘͘͘͘"$,3 <CJ+Q;XOȼ`agpm}sy|zzæ{ɞ|͘|͘|͘|͘|͘|͘|͘|͘|͘!$+3 ;BI(O9WN^`eok|qx~}xussæuɞv͙v͙v͙v͙v͙v͙v͙v͙v͙ #*2 :AH%M8UL]^cnj{ov|{vqnlmæoɞp͘p͘p͘p͘p͘p͘p͘p͘p͘")08@F K6TK[\blhxnsz{uokhffŤhʜi͗i͗i͗i͗i͗i͗i͗i͗i͗!'/6 >CJ4RHZZ`ifvlr{xtnieb`_Ša̚bϕbϕbϕbϕbϕbϕbϕbϕbϕ %+18C I3QFXW^edrj||ptwn~hÇc_\[³ZŚ[ϕ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ!"%7C"H3ODVS]`ck~juup}nwgbЇ^БZМXЧVеUǑVԎV֋V֋V֋V֋V֋V֋V֋V֋V֋&7B#G2L@UM]Xeaylirtol|tgxb{^~[XߧUޱS޾R҃Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂ &8@"F0K!D,J5S>y]ErfJmoNhvRd~UaW_Z\[Z]W^U`SaRaPbPbPbPbPbPbPbPbPb ָ ) 5;B&}I.uQ4o[:ie>enAbuD_|F\HZIXKVLUMSNQOPPOQOQOQOQOQOQOQOQOQگƼ+ 18y@ pG&iO+cX/_b2\k4Zr6Xx8V9T;RN>M?K@JAJAJAJAJAJAJAJAJAȵ & -u5l=eD^L"XT%U]'Re)Pl*Ns+My,L-J.I/H0G0E1D2C2C2C2C2C2C2C2C2C2 }!r( h0`8Z@THOOLWI]Gc Ei Do!Bt"Az"@#?$>$=%<%;&;&;&;&;&;&;&;&;&znd# \+ U3O;IBFIBO@U>Z<_;d9h8m7r6w5|43222222222pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl(k1 u6 {<FP!^*~k3{x;xBuHrMpQmTkWiZg\e^b_`a^b\c[dZdZbZbZbZbZbZbZbZbqm(n0 x4 ;DN![+h4u=|EyLvRrVoZm^jahcfecgai_k]l[m\h\g\g\g\g\g\g\g\grn(q. {2 :CL!Y+e5r?~H|PyVu\r`ndlhikgmdpar_s\t\q^l^k^k^k^k^k^k^k^kso't-~1 9BK!V+c6oA{KS|[xatgpkmojshvexbz_|]{_v`p`n`n`n`n`n`n`n`ntp'v+/ 8@I!T,`7lCwMW`zgvnrsnxk|hf͂b؄_܅`azctcrcrcrcrcrcrcrcrtp&y*. 7?H R,^8iDtP[e}nwur|njgeʍbԎb؊c܄e~fxfvfvfvfvfvfvfvfvuq&|(- 6>G P+[8fEpR{_ꅅj~tx}rmjhhÑgђeԏgىh݂i|jyjyjyjyjyjyjyjyvr&', 5=FN+Y8cFmTwboڀ{zuqnlkk˕iДkՍlۆmm|m|m|m|m|m|m|m|vs%&, 4<DL*W8aGjVre،{sυ|zvspooĘm͘oӐp؉qނqqqqqqqqwt%%+ 3 ;CK)T8^GgWڙogϑxsNJ}zwtsrr˚sГt֌u܄uށuށuށuށuށuށuށuށxv$#*2 :BJ(R7\GޥdXѝmfȕus|}{ywvwʜwϖxԎxۆx݃x݃x݃x݃x݃x݃x݃x݃xx##*1 :BI'P6ZFةcW̡kfšrrz|}{{{ƞ{͘|Ӑ|و|܅|܅|܅|܅|܅|܅|܅|܅yz"")1 9AH&O4ߴYEҭaVǥieprw|~ž̚Ғ؉ۆۆۆۆۆۆۆۆy{!"(0 8@G$N3۸WDͰ`V©gdnqu{|˛ѓ؊ڇڇڇڇڇڇڇڇz} !(/ 7?F"N0ռVCȴ^Ufclps{z~~ʜД֋ووووووووz!'.6 >EL/пTBķ]Sdbjoqzw~}zxwʝyϕy֌y؉y؉y؉y؉y؉y؉y؉y؉{ &-5 =DI.SA[Rbainoxu|{wsqpȝrϕsՌt؉t؉t؉t؉t؉t؉t؉t؉|%,3 ;BH,R@ZQa_glmwtzzupljiślДm֌m؉m؉m؉m؉m؉m؉m؉m؉}#)18 :F*P>XO_]ejktq}xztnifcbØeѓf֋gىgىgىgىgىgىgىgى~!&,19D(N;VL]Zcgiqoyzvs}mhc`^\”^Ӑ_ى`چ`چ`چ`چ`چ`چ`چ`چ  ,;D%L8TI[Wachl{nusu{l|gb^ZXWX׋Y܅Y݃Y݃Y݃Y݃Y݃Y݃Y݃Y݃,;D%K5RDYR`]|fftmnlttf|yaͅ}\̎Y̙V̥T̳SąS݃S~T}T}T}T}T}T}T}T} , <C%H3P@YK~`Tvh\oobhwhcl^ވpZޑsWޛuTާwRߴxPxOxOuOtOtOtOtOtOtOtOt۸ - ;A$G/N:~XCwaJpiPjqUeyYa\]_ZaWcUeRfQgOhNhMhMhMhMhMhMhMhMh ݮ̼ / 9?!F*|M2uW9n`?iiCdqGayJ]LZOXQVRSTQUPVNWMWLWLWLWLWLWLWLWLWδ / 6=xD$pL*jT/e^3ag7]o9ZvV?SAQBPCNEMEKFJGIGIGIGIGIGIGIGIGѮ"+ ~2u:lBeI"_Q%ZZ(Wc+Tk-Rr/Py0O1M2K4J5H5G6F7D8D8D8D8D8D8D8D8D8{' q.h6a>ZFUMQUN] Kd"Ik#Gq$Fx%D&C'A(@(?)=)<*<*<*<*<*<*<*<*<*wm"d* \2U9PAKHHOEVB\@a>guEqKoPlTjXh[f]d`ab^c\e[fZc[`][][][][][][][][ie(n+x. 6?HS%`/l8|yAxItPqVnZk_hbfedhbk_m]n[m\h^d________________jf(q){, 5 >GP%]/i:uD|MxUs\oblgikfocrau`w\x^r_m`hbcbcbcbcbcbcbcbckg't'+3 <EN%Z0f;qF|Q|Zvbqilphudzb~aa_~awbrcmdgdgdgdgdgdgdgdglj&w&*2 ;CL$W0bF M-X<٠aL͘jYőreznv}}ywuttƏu֋v݃v|vtvtvtvtvtvtvtvtou%-5 =EL+߫W;Ҥ_KȜhYodwnv}~{yxxzՍzۅz~zvzvzvzvzvzvzvzvpv%,4 <CK)گU:ͨ^J fXmdun|v}~}}ӏ~ڇ~~w~w~w~w~w~w~w~wpx$+2 :BJ'ԳS9ȫ\IdWkcrmyu|Αو߁yxxxxxxxqz#)1 9@ݼH%϶R8ï[HbVjbplwu~||{ˑ|؉}ނ}z}y}y}y}y}y}y}yq|"(/7 ?F$ʺP7YGaUhankut|{|xvtȑv؊w݂wzwzwzwzwzwzwzwzr &-5 <D#ŽO5XF_Tf`mjsszzzuromŐp؊p݃q{q{q{q{q{q{q{q{s$*15B!M4VD^Rd^khqqxx~ytokhgŽi؊j݂k{k{k{k{k{k{k{k{t %*2 AL1TB\Pb\ifonvuy}{smheb`bوcށezezezezezezezezv0 ?J/R?ZMaXgbmkytqr{wl|gb^\Z[ڄ]^x^x^x^x^x^x^x^xz / =H,P;XI_Te^ylfrrlkzrfvaz\}YWUUVzXuXtXtXtXtXtXtXt 1 =F'N7VD]OzdXrj_kreeyj`ɂo[ɋrWȖuTȢwRȯxQxPwQsRoRoRoRoRoRoRoRo ߮м 1 =D&L3T>{\GscOkjVer\`z`[كdWٌgSٗjP٣lNٱmMmLlMjNgNgNgNgNgNgNgNg Ѵſ"3;B$I.{S6s\>ldDglIbtM^|QZTVVSYQZN\M\L]K]J\J\J\J\J\J\J\J\Ԭŷ$2:A xH'pP.jZ4ec8`k<]t?Y|BWDTFQHOJMKKLJMIMHMHMHMHMHMHMHMHMڣDZ'/ }7t?lG fN%`W)\`-Yi0Vq2Sx4Q6O7M9K:I;HD>D>D>D>D>D>D>ˬ$z, p4h<aD[KVS S["Pc$Mk&Ks'Iz)H*F+D,B-A.@.?/>0>0>0>0>0>0>0>0 v l( d0 ]8W@QGMNJVG\DcBi@p?x=; :!8"7"6#5#5#5#5#5#5#5#5#} rh_#X+ Q3 L: GACH@N=T;Z9_7e5k3r1z/.,+********xn cZRK$F,A3 <: 9@ 5E 2J 0P .T,Y*^(d&j%q#x" \"W-X3_6 c= eFfPe^dn"a|'_+^.\1[3Z5Y6X7X9W9V:U;TU>T?S?R@R@R>R>R>R>R>R>R>]!X,\0d3 h: kClNlZjj$gx)d.b2a6_8^:]<\>[?ZAYBWCVDUDTETETDTBTBTBTBTBTBTB^!Y,_.f2 l8 oAoLqWng%ku+h0e5d9b<`>_A^B]D\FZGYHWIVJUJUJVGVEVEVEVEVEVEVE^!Y+b-j0o6 r@tJuUrd&or-l3i8fxHyRw`'tn.p{5m;jAgEeIcLaN`Q^S]U[VZXXYYVZS[O[M[M[M[M[M[M[M` ])h)q+x3 |<}F~P}](yj0uv8q?mEjKgOeSbV`Y_\]^\`ZaZ`[[\W]S^Q^Q^Q^Q^Q^Q^Qa`'k&u)|1 :DMY(f2zr;u~CqKmQiVf[c_`c^f\i[kZk\f^a_\`XaUaUaUaUaUaUaUbc%o$y(0 9BKV(b3n=zyGuPpXk^fdci`m_o^p^q]q_kafbac\cXcXcXcXcXcXcXcf#r"}'. 7@IS(_4j?tKx~Ur^mejjgmepcsbtauavcqdjeef`g\g\g\g\g\g\g\ch!u %-5 >GO([4fAoN}yXw`sgollpisgvfxeyeyfv}ICC_PROFILEhoiiicj_j_j_j_j_j_j_dk x$,4 <EM'Y4bB׉lN΃uX}~axhtmprnulxj{i|i}jzlrllmfnbnbnbnbnbnbnbem{#*2 ;CK%V3ږ`AώiNLjrXza}hynusrwpzn}m~mn~pupoqhqdqdqdqdqdqdqdeo~")1 9AI#ޡT1Қ^@ȓgMoXwah}nzswxt{s~qqr؁txtqukufufufufufufuffq!(/7 ?H ئR0̞\@×eMmWta|hn~t{xy|wvuvтxzxsxlxhxhxhxhxhxhxhgs &.5 =߯FҩQ/ǢZ?cLjWr`yhntx}||zzz̓|||u|n|i|i|i|i|i|i|igu%,4 ;۳DͭO.æY>aKhVp_wg~nsx|ʄ}vojjjjjjjhx#*19 շBɰN-W=_JgUn_uf|msx|}{yDŽz{w{p{k{k{k{k{k{k{kiz!'.޽5 к@ĴL,V;^IeTl]sfylrw|{wtrăttxuqvlvlvlvlvlvlvlk}#)0 ˽?J*T:\GcRj\qdwkq~vy{t~pmkmnxoqplplplplplplpln!-=I(R8ZEaQhZobui~|oxtsyn|jgeehxiqjljljljljljljlq+;G&Q6XC`NfXm`~sgwzlrrlvhyd|`}_~^}avbpclclclclclclclt (9E#O3W@^KdT~k\wqcqxikmfrau]x[yYyXyZs\n]j]j]j]j]j]j]jy ܮһ %6B L/T<\GbPwiWpp^jwceh`l\oXqUsSsRsToVjWgWgWgWgWgWgWg ҳɾ#3 @J*R7ZAxaJphQjoWdv\_`ZňdVĒgSĞiPĬjOļkNjOhPdQaQaQaQaQaQaQa Ԫȶ %5 >H%P0xX:p_BigIcnO^vSYWUӉZRӓ]OӠ_Mӭ`KԾ`J`K^L\LZLZLZLZLZLZLZڢʯ (4=D"wN*oW2i_8cg=_oBZwEVISKPNMPKQIRHRHRHQHOHOHOHOHOHOHOͩ *3|;tClK#fT)a]-]f1Yn5Vv7S:PK@IAGBFCECDCDBDBDBDBDBDBDBѢ (y1 p9iAbI\P WY#Tb&Qj(Os*L{,J.H/F1D2C3A4@4?4?5?5?5?5?5?5?5Ī~u%l- d6]>XERMOUL\IdGkDs B|"A#?$=%;&:&9'8'8(8(8(8(8(8(8(zpg!_)X1 R9 MAIHEOBU@\=b;i9p7y5320//.......vlbZS$M+G3 C: ?A ;G 8M 5S3X1^/d-k+s)|'%$#"""""""~pg] TMGA$<+72480=-C*H (M &R $W "] c k s |          R%M/Q2W5Z< [EZOY]XmV{U"S%R'Q)P*P+O,O-N.N.N/N/M0M0L0L0L/L/L/L/L/L/L/S$M/T0Y4]: _C^N]Z[jZy!X$V'U)T+S-R.R/Q0Q1P2P2O3O3N4N4M4N2N2N2N2N2N2N2S$N.V/\2`8 bAbL`X_h]v"[&Y)X,V.U0U1T3S4S5R6R7Q7Q8P8O8O7P5P4P4P4P4P4P4T#P-Y-_0c6 f@fJeUceas#^(\,[/Y1X4W5V7U8U9T:T;SkHjShafp%c}*`/^3\6[8Z:XW?VAUBUCTDSDTAU?U\A[CYEXGWHVJVKULVJWFXCY@Y?Y?Y?Y?Y?Y?W"Y'c&k(q0t9 uCuMuY!qg)mt0j6fHR!~_+yk5su>nFiMeTaY_\]_\a[b[cZc\`_Z`UaQbMbKbKbKbKbKbKY!b nx#+3 <EN![+~f6xpArzKmRiXf\d_bb`d_f^g^h_fc_dYeUePeOeOeOeOeOeOZ eq|")1 :CL X+b7~lCxvLsSoYk^ibfeehcjbkblbkfdg]hXiSiRiRiRiRiRiR[ gt '/7 @IU*ۊ_7фiC}rLx{TtZq_ndkgijglfnfofojhkal[lVlUlUlUlUlUlU\jw%-5 >FޖR)Ґ\7ʉfBÃoL~wTy[u`rephmllnkpjqjqnkodo^pXpWpWpWpWpWpW^lz#+3 ;EכP(̔Z6čcBlLtT~|[z`wetirmppornsosrnsfs`sZsYsYsYsYsYsY_n}")09 ޥCџN'ǘX5aAiKqTy[`|eyjvmuqssstsuvpwhwbw\wZwZwZwZwZwZaq &.6 ة@̣L&œV4_@gJoSvZ~`e}j{nyqxtwuwvzr{j{d{]{\{\{\{\{\{\cs#*2Ҭ>ǦK$U3^?eJmRtY{`ejn~q}t|v}|v}~ske~^~]~]~]~]~]~]eu &۴.ί=êI#S1\>dIkQrYy_dinq|tyvwvvtylyfz_z^z^z^z^z^z^gw!շ*ɳ;H"R0Z=bGiPpXw^~di~myqvsrupvousmsft`t_t_t_t_t_t_izݹϺ(ķ9F P/X;`FgOnVu]|c}hxlsporltjuiulmmgn`n_n_n_n_n_n_l} տʾ&7DN-W9^DeMlUs[|zawfrjmniqfscsbsflgfh`h_h_h_h_h_h_o ڭ Ӹ #5BL*U7\AcJjR|qYvx^pckggkcn_p]p\p_kaeb`b^b^b^b^b^b^s ۥѱ˻ 2 @J'S4Z>aG|hOuoUovZj}_ecag]jYkWlVlXhZc[^\]\]\]\]\]\]x ߜҩɴ¾/ =H#Q/X:|_CufJomPitUd|Z_^[aWdTeRfQfRcT_U[VZVZVZVZVZVZ~ ֡ʭ +:EN*}V4u]=neDhlIcsN^{SYVUYR\O]M^L^L\NYOUPUPUPUPUPUPUݘͦ (7B}K$uT-m\5gc*=+;+;+:+:+:+:+:+:+:+~wog&`/Y7 T?OGKNGVD]Bd@l=u;~9765332 2 2 2 2 2 2 {r jaZ"T*N2I: EA AH >N;U8[6b4i2r/{-+*)('''''''zmd\TMH$B,>3:96@3E0K .Q +W )] 'd $l "v yk_VN GA<7$2*/0+6';%@"E JPV\dmw         I'D1K1P4R:RC QNO\MkLyKIHH G!G"F#F#F$F$F%F%F%F%F%F%F$F#F#F#F#F#F#I'F/M/R2U9UB TMRYPhOwNLK!J"J#I$I%H&H&H'H'H(H(H(H(H(H'H&H&H&H&H&H&J'H-P-U0X6Y@ XKUVTfRtQO!N#M%M&L'K(K)K*J*J+J+J,J,J,J+J)J(J(J(J(J(J(K&K+R+X.[4]> ]IZTYbWqU~ S#R&Q(P*O+N,N-M.M/L0L0L1L1L1M/M-M+M+M+M+M+M+K&N)V)\+`1b; bF`Q^_\mZz#X&V)U,S.R0Q1Q3P4O5O6N7N8N8O5P3Q1Q/Q/Q/Q/Q/Q/L%Q'Z&`(e/h9 hCgNeZbh _v%]*Z.X1W4U6T8S:R;Q=Q>P?P@Q>S;T8U5U3U3U3U3U3U3M$T$]#e%j-m6 n@mKkVhd!eq(b}-_2\6Z:X=W@UBTDSFRHQIRHTDV@X=Y:Y8Y8Y8Y8Y8Y8N$X!a j#p+s4 t>tHrRo_#kl*gw1c7`=]AZEXIVLTNTPTPSQTNWJZE\B\>\<\<\<\<\<\HT"~_.xi8ss@n|GkLhQeTcWbZ`\`^_^__bYeSgNgJgFgFgFgFgFgFWdp{"*2; DފQ!Ԅ\-~f8xoAtwHpMmRjVhYf\e_d`cacbe]iWjQkLkIkIkIkIkIkIYgs~ '/8 B֏N ̉Y-Ńc7}k@ytHu|NrSoWm[k^i`hcgdgdiamZnTnOnKnKnKnKnKnK[iv$,4ܚ?ϔLƎW,`7i@~qHzyNwStXq\o_mbldlfkfmdq\rVrQrMrMrMrMrMrM]ky!(0՞=ʘJT+^6f?nG~vN{}SxXv\t_rcqepgpgpft^vXvRvNvNvNvNvNvN_n{#ݥ+ϡ;ŜHS*\5d?lGsMzS}Wz\x`vcufthththx`zYyTyOyOyOyOyOyOap~ר(˥9FQ)Z4b>jFqLxRW\}`{czf}yh{yizyi||a~~Z~}U~}Q~}Q~}Q~}Q~}Q~}QcrߪѬ&Ǩ7 DO'X3`=hEoLvR}W[_~czfw~hu~is~ivbx[xVyQyQyQyQyQyQeuٯ̯$«5 CN&V1^;fDmKtQ{V[|_xbteqhnimiocr\sVsRsRsRsRsRsRhx ޠ ֩ Ҳ Dz"3 AL$U0]:dBkIrPyU{Zv^rbnekghhghicl\mWmRmRmRmRmRmRk{ ֣Ь ˵ 1 ?J"S.[8b@iHpNzwSu~Xp\l`hcdebf`fbbe\gWgRgRgRgRgRgRn ٛϦɯĹ/=H Q+Y5`>gEznKtuQo|UjYf]b`^b\cZc[`_[`VaRaRaRaRaRaRr ߓџɪ,:EO(W2^:yeBslHnsMizQdV_Y\\X^V_U_U]XXZT[P[P[P[P[P[Pw֘ˤ(7CL$U.y\6rc=mjCgqHbyL^PZTVVSXPYOYOXQTSPTMTMTMTMTMTM}ߏΝè#3 ?IyR(rZ0ka7fh.=.=.=.=-=-=-=-=-=-şztm f*_4Z= TEOLLUI]FeDnAw?=; 9!8"7"6"6"6"6"6"6"6"6"wo g`Z'T0O8J@ FH CO@V=^;e8n6w420/.-,,,,,,,uia [TN"I+D2@:+C(I%O#V!]eoz           ugXNHA ;61-")(%-"28=BHNU]g r }        ?*?0D0H3I9HBFM E[CiAw@?>>====<<<<<==========@*A.G.J1L7K@JK HYFgDuCBAA@@??????????@@@@@@@@*C,I,M/O5P>NI LVJdHrGFEDDCCBB B B!B!B!B!B!C CCCCCCCA)F*L)Q,S2T<TG QRO`MoL|JIHG!G"F#F#F$E%E%E&E&E&E&F$F#G!G!G!G!G!G!B(I'P&U(X/Z9ZD WOU\SjQwON!M#L%K&J'J)I*I*H+H,H,H,I*J(J'K%L%L%L%L%L%C(M$T#Z%^,`6`A ^L[WYfWrU~"S%Q(P*O,N.M/L0L2K3K4J4K3M0N-O+P)P)P)P)P)P)F%P!X _!d*f3f= eHbS`a]m Zy%X)V-T0R3Q5P7N9N;MR@QAPBPCPDPCR?U;W7X4Y2Y1Y1Y1Y1Y1M W`io%r-t7sAqKnXjd$en+ay3^8\IS'[0b8i>pDxI~MzQvUrXoZl\k\kYnRqMrHrGrGrGrGrGf u܏Ҙ̡Ȩ-<GQ%Y/`6g=nC}vHy}LtPpTlWiYf[e[eYhRkMlHlGlGlGlGlGi x֒͜Ƥ+:EO#W-_5f;}lAxsFs{KnOjRfUcX`Y_Z^XbRdMfHfGfGfGfGfGl|ފЖȟ(7 CM!U*\2|c9wj>rqDmyHhLdP`S]UZWYWXV[P]L_G`F`F`F`F`Fp֏ʚ$4 @JS'|Z.va5ph;ko@gwDbH^LZOWQTSSSRRUNWJYFYEYEYEYEYEuϓğ 1=H|P"uX*o_0jf6em;`u?\~CXGUJQLOMMMMMNIPFRCRBRBRBRBRB|׌ș ,: {DtNnV$h]*cd0_l4Zt9V|K=K=K=K=K=͒&z5sAlJfSa[#\b(Xj,Tr0P|3Mņ6JĒ9Gğ;EĮ#<$;$:$9$9#9$9$9$9$9$9$~si d_ Y+T5O>KF GN DWB_?g=p:{8653211111111~qe^ YSN'J0E9A@>H;O 8W 6^ 3g 1p .|,+)(''&&&&&&~pdXR MGC">*:2793?0F-M+T([&c#m!y            ~pcUKF@;73#/)+0(5%;"AGNU^htpbTF?94 /+'#!%*/4:@FN V `lx6-9.>.@2@8>A@J>W *C*F-G2F<EHCU Ab ?p=}<;;::::99999::::::::::9+A'F'J)K/L9KEHQ F^DlByA@@??>>>>==>>>>???????=(E$J#N%Q,R6QAOM LZJgHtGFEDCCBB B B!A!B"B"B CCDDDDDD@%H!O S!W)Y3X>VI RUQcOoM{KJI!H"G$G%F&F'E(E)E)F(G&H$I"I IIIIIC"LSY]&_0_:]E ZPX^UjSvQ!O$M&L)K+J,I.H/H1H1H1I.K+L)M&N%N#N#N#N#N#GPW^c#f,f6dA bL_Y\eYp V{%T)Q-P0O2N3M5M6L7L8L8M5O1Q.R+S)S'S'S'S'S'JT\ci l)m2l= iGfTc`_k"\u(Y-W0U3T6S8R:Q;PU?UATBTBUAW[AZCYDYEXFXF[@^;_7`3a1a1a1a1a1S]hpw|$-;zIuTq_$mh+jp1gy6e:c=a@`C^E^G]H]I\I_Db>c9e6e3e3e3e3e3U`kt{އ'ф7F{Qv[#re+om1lu6j|:h>fAdDcGbIaKaLaLcGeAgm:n7n7n7n7n7Ye q z ݎϏ ƍ2AMV"|_*xg0uo6sv:q}?oBmFlIjKjMiOiOjLmEo?p;q8q8q8q8q8[gs}ކٌ Ց ʒ0?JT!])}e0zl5ws:u{>sBrFpIoLnN|mO{mPznM|qF~sAt=u:u:u:u:u:]jvىҏϔ Ŗ.= HR [(c/~j5|q9zx=xBvEuI|sLyrNvrPtrPtrOvuGxwBzx>{y:{y:{y:{y:{y:_ lyރӋ͒ɗ,; GPY'a.h4o9v=}~A}{EyzIvxLswNpwPnwPmwOpyHr{Ct|>u};u};u};u};u};a o|نώȕÚ*9 ENW&_-f3m8t={{AwEtHp}Km|Nj|Oh|Pg|Pj~ImCn?olBhFeIaK^M]N\M^H`Cb?cHQ ~Y'x`-sg2on7ju];];];];];n~΋ĕ .; F~NxV#r]*md/ik4ds8`{<\?YBUESGQGPGQDS@UΨ&<κ&<&<%;%;%;%;%;%;%;%Óyod ^[ W-S:PDLN IW F_ChAq>|<߉:87665444444ymbXUQ M+I5E>BG?O=X :` 8j 6t 320.--,,,,,,,yl`UN JFC'?0;88@5G3O0W._+i)t' % $ # " ! ! yl_RHC?;7!4)00-7*>'D%K"S \frzl^PD<73 /+(!%'!-28?FMV`l {    {l^OB61,'# !&,1 7 >FOYft./3,7-80764?1K/X,f*t ) ( ( ( ( ' ' ' ' ' ( ( ( ( ( ) ) ) ( ( ( ( ( 0-6*9*;.:48<6I3V1c /q -~ - , , , , , , + , , , , , , - - - , , , , , 2+9(=(?*>0=:}==<<;;;;;;;;;<<======="DIMP&Q0P;NFKS H`FlExDCBAA@@????@@ABBBBBBB@HNRV#X,W7UBRM PZMgLrJ}HGFE D"D#C$C%C&C&D$E"F GGHHHHHDLRX]_(^2]=ZI WUUbRmPwNL"K$J&I(I)H*H+H,H,H+J(K%L"M MMMMMGOV^be$e-d8aC _Q\]XhVrT{"R&P(O*N,N.M/L0L1L2L1N-P*Q'R$R"R"R"R"R"JS[bhjk(k2i>fL bX_c\m Zv$X~(V+U.S0R2R3Q5Q6P7P7R3T.V+W(W%W%W%W%W%MV_ glpq"q,p:lH hTe_bh!_q&]y*[-Z0X3W5V7V8U:U;U;V7X2Z.[+\(\(\(\(\(PY c k ptvw%v6rD nPk[gd!em'bu+`|/_2]4\7[9Z;Y=Y>Y>Z;]5^1_-`*`*`*`*`*R\ f n t x{| {3wA tMpXla!ji'gq+ex/d3b6a8_;^=^?]@]A^?a8b3d0d,e,e,e,e,U_irx|  ́0|? xKuUq^!nf&ln+ju/h}3g6e9db@aBaBbAd;f5g1h.i-i-i-i-W alu{ӀЃ Dž-< }HyRv[ sc&pk+nr/my3k6i:hyn8zo4{p0|p0|p0|p0|p0[fr{ςɇĊ(8DNW|_$yf*wm.ut2t|6r9|q=yp@voBsnDqnEpnErp?sr9us5vt1vt1vt1vt1vt1]it}˅Ċ&5BLU]$~d)|k-zr2}xy5zw9vv HQY!`'{g+wn0su4o}7k;h>eAb~C`~D_~D`@b:d6e3f2f2f2f2dr~LJ .; FOWz^%ue*ql.ms2i{6f9b=_?\AZBYBZ?\:^6_2_2_2_2_2hv͂Œ +8CLyTt\"pc'kj,gq0dy3`7\:Y=W?T@S@T=V9W5Y2Y1Y1Y1Y1m{ȇ'5@ yJsRnYi`$eg(ao,^w0Z3V6S9Q;O&=&=&=%=$=#=#=#=#=#Ljsh`^[,W8TCPLMU J]GfDoAy?ȅ<ȓ:Ȣ9ɳ887766666th]S OM"K0I<FFDOAX?a5;>9G7P4Y2b0m.y,+ ) ( ' ' ' & & & & & th[OE> <96%4.17.?,G)O'W%a#l!zugZMB851.+)&%-#4 ;CKS]jxvgZL?5-*& # #)/5=E N XetwhZK>2'#   "(.5=GR^m~*-.+0+0..5)=%I#W!dr,+0(3(3+11-:+G(T&a$o"|""!!!!!!!!!""""""""""".(3%6%7'5-482D/Q,^*k)w('' ' ' ' ' ' ' ' ' ' '(((((((((2%7":!;#;);49@6M4Z1f0s. . . - - - - - - - - - . . . . . . . . . . 5";?@B&B1@<>H;U9b7n 6y 5 4 4 43333333444455 5 5 5 5 9?CFI#I-H8EDCP@] >i =t <;;::9999999::;;;;;;;=CHLOP(O3M?JJGW Fd DoCyBA@??>>>>>>?@@AAAAAAAGLRVW$V.T9QEOR M^ KiItH}FEEDDCC C!C!C!DEFGGGGGGDKQW[]]([3Y?WMTY RdPnNwLKJ J!I#H$H%H&H'G'I%J"KLLMMMMGO V \`bc!b,`:^H[T X_ViTrRzQ!P#O%N'M(M*L+L,L,M*O&P#Q RRRRRJR Z ` eghg$f5dDaP ^[\dZmXu W}#U%T(S*R,R-Q/Q0Q0Q/S*U&V#V!WWWWM U]di k lml1j@gL dWa`_i]q!\x$Z'Y*X,W.V0U2U3U3U3W-Y)Z%[#[![![![!O Wahmpp rq.o=lI iTg]debm!at%_|(^+]-[0[2Z4Y5Y6Y6\0]+^(_%_#_#_#_#Q Zdlqtu vv*t:qF nQkZibgi!eq%dx(b+a.`1_3^5^7^7^8_3a-b)c&d%d%d%d%S]gotxyzz(x7vD sNpWm_kg!jn%hu(g}+e.d1c4b6|b8zb9yb9yc4ze/{f+|g(|g&|g&|g&|g&U`jrx{}~~%}5zA wLtUr]pd nk$lr(kz+j.~i1{g4xg6vf8tf9sf:sg6ti0uj,vk)wk'wk'wk'wk'Wcmu{#2~? {JySv[tb ri$qp'~ow+{n.xm1ul4sk7pj9nj:mj:mk7om1pn-qn*qo(qo(qo(qo(Yepx~ 0=H}Q{Yy`wg#|un'ytu*vs}.sr1pq4mp7jo9ho:go:gp7iq2kr-ls*ls(ls(ls(ls(\hs{ .;EOW~^{|e"x{l&tys*qx{-nw0kv3hu6et8ct9at:at8cv2ev.fw+gw)gw)gw)gw)_lv +8C LUz\vc!sj%oq)l~y,h}/e|2b{5_z7]z8\z9\z7^{2_{.`|+a|)a|)a|)a|)boz(6A JzRuZqamh#jo'fw+c.`1]4Z6X7V7V6X1Y-[*[)[)[)[)fs~$2> yHtPoWk^he!dm%`u(]~+Z.W1T3R4Q5P4R0S,T)U(U(U(U(kxƒ ~/x;sE nMiUe\ac^j![r%W|(T+Q.N0L1K1J1L-M*N(N&N&N&N&p}~ zu*p7lA gJ cR_Y[aXhTp Qz#N&K)H*F,E,E+E)F'G%G$G$G$G$w„tol$h2d=_F [O XVT^QfNnKxH E"C$A%@%?%?#@"@!@ @ @ @ ~wjca^,Z8WBSKPS M[JcGkDuB?=;:99999999ymbVSR#P0M;JEGNEWB_ @h =r ;~8Ì6Û5ë333221111{ncXMD CB%@2?==G;P9Y6c4n2z0҈.Ҙ -ө ,Ӿ , + * ) ) ) ) ) |ocWLB9 542'120=.G-P+Z*e(q&%#"!  }pcVK@6/-+)"'+%4#<!ENXdqqcVI=3*&$ !")19AJUa o   rcVH;0&  $ + 2;DO\k}sdVG:.# $+3=IVfx%+()))(,#2;GUbp|()+&,&+)(/"8 DR_ly*&.#/"/%,+*5'A$N"[ ht."243 2&22/>,J*W'd&p%{$$$$$$$$$$$$%%%%%%%%%2688:#9-8:5F2R0_.k-v,,+++++++++,,, , ,,,,,,5:=?AA)@4=A:M8Z6e5q4{3 3 2 2 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 9>AEHH$G/D;BG?T>`>>>>>>?@@AAAAA@F K Q STT"R-P;OIMUK` IjHsG{FEEDCCCCCCEEFFGGGGDJPU X YXW$W5UDTPR[ PeNmMvL}KJIIH H!H"H"H"IKKLLLLLG MTZ]] \]]0\?ZLXW V`TiSqQxPOO N!M#M$M%L&L&N"OPQQQQQIPX^bca bc,b;`H]S [\ZdXlWtU{T T"S$R%Q'Q(Q)Q*R&T"UVVVVVLS\bfhggh(g8eEcP aY_a]h\pZwY!X#W%W'V)V*U+V,W)X$Y ZZZZZNW_fjlklm%l5jBgM eVc^be`l_t^{!]$\&[(Z*Z,}Z-|Z.{[+|\&|]"}^}^}^}^}^PYcjnpppq"p2n?lJ jSh[fbeicpbx!a$`&}_){^+x^-v^.u^/t^-u`'va#wb wbwbwbwbR\fmrtttut/r=pG nQlYj`ighnfu!}e}$zd'wc)uc,rb.pb/ob/nb.od(pe$qf!qfqfqfqfT_ipuxxx yx-w:uE rNpVo^md}lkzks wj{#ti&rh)og,lf.jf/if0hf/jh)ki%li"lj lj lj lj Wblsx{|| }|*{8yC wLuTs[{rbxpiuop rnx#om&ll)jl,gk.ek/dk0bk/dl*fm&fm#gn gn gn gn Yeov|(5~A|J ~zRzxYvw`svgptnmsv#jr&gq)dq+bp-`p/^p/]p/_q*`q&ar#br br br br \irz%3>~H yPu~Wq}^n{ekzlhyt"ex}%bw(_v*\v,Zu.Yu.Xu.Yv*[v&\w#\w \w \w \w `lv~!0~;yE tNpUl\icfjbr _{#\~&Y})W|+U|,S|-R|-S|)U|%V|"W| W| W| W| dpz},x8sBnK jSgZca`h]pZy!V$T&Q(O*M*M*M'O$P"PPPPiu}ICC_PROFILE~ yu(q5l?hH dP aW]^ZfWnTwQ N#K%I&H'G'G$H"I JJJJn{upm#i0e;aE]M ZT W\TcQkNtKHE C!B"A"A BBCCCCuyjec`+]6Y@VISQ PY M`JiGrD}B?=<;;;;<<<<|}qdZWU#S0P;MDKMHUE] Ce @o >z;97655444444th\PI HF'E3C=AG?P=X:a8k6w4 2 0 / . . - , ,,,,vj^RG=876'534=3G1Q0[.e,q*)̐'̡&ʹ%%$#####xk_RG=4+ &%%%$0#;#E"P![ hvއߙ߬yl_RF;1)!'09CNZgw {m_RE9/% % - 5 ?JWfw}n`RD7,"  '0:ESbupaSC6*  !)4@N^r )"'"'*09E S ` m y             #&%$%$#',5BP]jv         &#( ( &""( 2?LYeq|*,,+)$(/%;"HTamw-0101 0*.6+C(O&\$g#r#|""""""""""###$$$$$$$146798%613=1J.V-b,m+w+*********++,,,,,,,,59: >@? =*;78D6Q5\4g3r3{222111 1 1 1 2 2 3 3 3 3 3 3 3 3 9= @ D FED#A/?<>J=W>>>>>>?@@@@AAA? DJNPO LLM0M?LLKWIa Hi GqFyFEDDCCCCCDEFFFFFFBGOSUUR ST+T;RHQRP\ Nd MlLtK{JJIIHHHHIJKKLLLLEKSX[[XXZ'Z7XDWOUX T` ShQoPvP~ONNMMM M MOPPPQQQGOW]``^]_#_3^@\KZT Y\XdVkUrTzTSRRQ!Q"Q"~R!~S~T~U~U~U~U~UJR[adecbc c0b=aH_Q ^Y \a[hZoYvX~WW}V!{V"yV#wV$vV$vWwXwYwYwYwYwYLV_ehihg hh-g:eEcN bW a^_e^l]s~\{{\y[vZ!tZ#rZ$qZ%oZ%p[ q\q]q]q]q]q]OYbhlmlk ll*k7iChL fT e[cb}bizapxaxu`s_p^"n^$l^%k^&i^&j_!k`kalalalalaQ\ekoqqoop'o5n@lIjR ~iY{h`wffufnrevpd~mckc"ib$fb%eb&db&dc"edfdgdgegegeS_hosuusst$s2r>pG}oO ymWvl^skdpjlmjski|hhfg"cg$af%`f&_g&_g"`hahbhbhbhbhWbkrwyywxx!x/w;|uExtM trUqq\npckojhnqfnzcm`l!^l#\k%Zk&Yl&Zl#[l\m]m]m]m]mZfov{~~||}}-||9wzCsyK pxS lwZivafuhctoasx^r[r Yq"Wq$Uq%Tq%Tq"VqWqWqXqXqXq^isz {)v6r@nIj~P g}Wd|^a{f^zm[zvYyVxSx!Qw"Pw#Ow#Ow!PwQwRwRwRwRwbnw} xt&p2l=hFeN aU ^\[cYkVtS~PNL J!I!I~J~K~K~L~L~L~gs||uom!i.e9bB^K[R XY VaShPqM{JHFDCCDDEEEEmxylfca)^5Z>WGUORV O^ LfJoGyDB@>===>>>>>ssd\ YW"U/R9PCMKJSHZEc Cl @v>;9877666777{wk_RMKJ'H3F=DFBN@V>_;h9s7 4 2 1 0 0 / / / / / / {ocWKA>=;):49>7G6P4Z2d0o.|,*)(('&&&&&~qeYMB8/ -,+)*3)=(G'Q&\%h#v"Ɔ ƘƫsgZNB8/& %/:DP]k|׏ؤٻuh[NB7-$ # - 7 B O ]mwi[NA5*!  "*4?L\myj\N@3(  &0<IZm{l]O@2&  !+7FXk&$$'- 6CP^kv#!!#)2 @ MZgs}""!$/<IV b n y         %&%! !+7EQ^it})*)'(''#3 ?LXdnx-.. //.!,-)9&F$S"^"i!s!|!!!!!!!!""##$$$$$$$02 36 652%02-?,L+X+c*m*v**********++,,,,,,,4 69<< ;85)473F4R3]3g3p2x222211122 2 3 3 3333337:>AA? <:;1<@DGHF@ BD+D;DHCSB\BeAl@t @{ ? ? >>>>>>??@@ A A A A =CINONIIJ&K6KCJNIWH`Gg Fo Fv E}EDDCCCCDEFFF F F F @GOSUTPOP"Q2Q?PJOSN\Mc Lj Kq JyJIIHHHHHJJKKKKKCKSXZZWTVV.V;UFTPSXR_ Qf PmOtO|NNM~M|MzMyMxNxOxOxPxPxPxPFOW\__\Y Z[*[8ZCYLXUW\ Vc UjTqSy}SzRxRvQtQsQqQqRqSqTrTrTrTrTHS[`cca^ __'_5^@]J\R[Y Z` }Yg{XnxXuvW~tVrVoVnUlUkVkVkWkXlXlXlXlXKV^dghfbcd$c2b=aG`O}_V z^] w]d u\ks\sp[{n[lZjZhYfZeZeZe[f[f\g\g\g\NYagjljggg!g/f;eD{dMxcT ub[ raa paim`pk_yi_f^d^b^a^_^_^`_a_a_b_b_b_Q\djnpnkjkk,~k8zjBviJshRpgY mf` keghdnfdwdcac_b]b[bZbZb[c\c\c]c]c]cU_hnrtsoo o}p)yo5un?rmHnlPklW ik^ fjedilaiu_h\hZgXgVgUgUgVgWgWhXgXgXgXckrvxwss |txt&tt2ps=msFjrNgqU dp\ apc_oj\nsZn|WmUlSlQlPlOlQlQlRlRlRlRl\gov{||xzyuyrz#nz/ky:hyCdxKawR_wY \v` YuhWtpTtzRsOsMrLrJrJrKrLrLrMrMrMr`kt{z~snkh,e7b@_H\~PY~WW}^ T|f Q|nO{xL{JzHzFzEzDzEyFyFxGxGxGxepywkf c`'^3[<XEVMSTP[Nc Kl IvFDB@?>??@@@@kvse] ZX!V-S8QANILPJXG`Ei Bs @ ><:98889999r}zm_TONL'J2H<FDDLBT@\>f;p9|7 5 3 2 2 1 1 1 1 1 1 zrfZNE B@?*>4<>;G9O7X5a3l1y/-,+**)))))vj^RF<5 32!1+/5.>-H,Q+[)g't&$#"!!  zm`UI>3*$ "! !* 3=GR^l|}obVJ>3*! %/:F R ` p ΃ Η ά qdWJ>2(  $.9ERbsވߝ߳seXJ=1&  "+6CRbvugYK</$  '3@QcwwhZL<."  #/>Obw#!!$*3AN\ht~  %0=KXdpz! , 9FS_ku~ (4 A N Zfpy ##!#/;IU`jt|'' % & %# (5BOZenw+ ++- ,)& #-!:HT _ h q!y!!!!!"""##$$$$$$$$//232/+'"'2)A*N*Y*b*k*s*z******+++,,,--,,,238995. /1,3;3H4S3\3e3m3t2{222222223344444458>BB?88:&;6EIJGA?A!B1C>CIBSA[Ab@j@q?x?? > > > > >?? @ @ @ AAA<CJOPNIFHI,I:IEHNGWG^FeFlEs E{ D D DCC~C|D{DzE zF zF zF zF zF >HOTUTPL MN(N6NAMKMSLZKaKhJo Jw ~I |IzHxHwHuHtIsIrJrJ rJ rJ rJ rJ BLSXZYVRRS$S2S>RGQPQWP^~Oe{Ol yNs wN{ uMsMqMoMnMlMlMlNlOlO lO lO lO EPW\^^[VVW!X/W;VDVM|UTzT[wTbuSh sSp qRx oRmQkQiQgQfQeReRfSfS fS fS fS ISZ_bb_ZZ[[,[8}[AzZJwYQtXXqX_oWf mWm kVv iVgUeUcUaU`U_U`V`VaWaW aW aW LV^cffd^^__)|_5x_?t^Gq]Oo\Vl\\j[c h[k fZs dZ}bZ_Y^Y\Y[YZY[Z[Z\Z\Z \Z \Z OYafijhbb ~czc&vc2sc<obElaLjaTg`Ze`ac_i a_q _^{]^Z^X]W]V^U^V^V^W^W^ W^ W^ S]djmnmg~g xgtg#qh/ng9kgBhfJefRceX`e_^dg \do ZcyXcUbSbRbQbPbQbQbRbRb Rb Rb V`hnqsqkxkrknlkl,hl7fl@ckH`kO^jV\j]Yie Wim Uiw ShPhNgMgKhKhKgLgLgMg Mg Mg Zdlrvwvyqqqkqhqfr(cr4`r=^rE[qMYqTWp[TpcRok Pot MnKnInGmFnEnFmFmGmGl Gl Gl _iqw{|{uxkwew ax_x$]y0Zy:XyBVxJSxQQwXOw`LvhJvr Hu} EuCuBu@u@u@t@tAs As As As dnv|re]YW U+S6Q>OFMNKUI]FfD~pB~{ ?~ =} <} :}:~ :| :{ :{ :z :z :z it|{n`UPNM&K0I:HBFJDRBZ@c=m;x97 5 4 3 3 3 3 3 3 3 pzuhZOG DCA*@4?==E;M:V8_6i4u20.-,,+++++xzmaUI?976"4,352>1G0P.Z-d+q)'&$###""""reYNB7.)('"&,%5$?#H"S!^ jyuh\PD9/&!*4>ITbq yk^RF:/%   (2=IWfwƋƠŶ{m`SF:.$ '1<IXi|ֿ֧֒~oaTF9-"  $.:IYkqcUG9,  !+8HZmteVH9+  (6GZn  !'0>LYepz!-:HUalv (6CP\gqz  $0>KWblu}  * 8EQ\fow !  #0>J V ` i q y %##$! '5COYcks{('**'" -< I S!]!e"m"t"|"""####$$%%%%%%%,-243.% %'')6*C+N+W+`+g+o+v+}++++++,,---.---03:=<91.0!203=3I3R3Z3b3i3p3w2222223344444443:ADDA;789+:8;D;M:V:]:d:k9r9z9999999:}:|;|;|;|;|;7@GJKIC> ?@&A4A?AIAQ@Y@`@g?m?u?}>}>{> z> x> w? u? t@t@t@s@s@s@;ELOPOJDEF"F0G<FEFNFUE\~Ec|DjzDqyDywDuC sC qC pC nD mD mE lElElElElE?IPTUTPJIJK,L8KBKJ|JRyJXwJ_uIfsImqIvoHmH lH jH hH gH fI fI fI fJfIfIfICMSXYXUNNOO)P5{P?xOGvOOsNUqN\oMcmMjkMriM|gL eL cL bLaM`M`M `N `N `N`N`NGPW[]]ZSR S|S%yT1uT<sSDpSLmRSkRYiR`gQheQpcQyaQ `P ^P \P[QZQZQ ZR [R [Q[Q[QJSZ_aa^WV zWvW"sX.pW9mWAjWIhVPfVWdV^bUe`Um^Uw\U ZU YU WUVUUUUU UU VU VU VUVUMW^beec\{[u[q[n\+k\6h[?e[Gc[NaZU_Z\]Zc[ZkYYuWY UY TY RYQYPYPY QY QY QY QYQYQZafhig}`u_o_k_h`(f`3c`<a`D__L\_S[_ZY_aW^iU^sS^~ Q] O] M] L^K^K^ L^ L] L] L]L]T^ejmmlxeodidedbd%`e0^e:\eBZeJXdQVdXTd_RdgPcqNc{ Lc Jc Hc Gc Fc Fc Fb Gb Gb GbGbXbinqrqtkiici _i\j!Zj-Xk6Vk?UkGSjNQjUOj]MjeJinHiyFi Di Ch Ai @i @h Ah Ag AgBgBg]fmsvwvpreq\pXpVpTq(Rq3Pq<OrDMqKKqSIqZGqbEplCpwAp?p=o ;p ;p :o ;n;n;m;m;mbksy{|{|mz`xVwPwNxLx$Ky.Iy7Hy@FyHDyOByWAy`?xiC=K;S9\7f5q310.----~-}-}-}nx}pcUKA;98"7,654=3F2O1X/b-n+{*(&%%%%%%%vvi\PD:1-,+$*-)6(?'H&R%\#h"w zmaUI=3*! $-6?JUapqdXL@5*" "+ 5 @ K X gxugZNA5+!  "+6AN\mxj\OB5*   "+5AP`rχϝϳzl^PB5) (4AQcw|n`QC5(  $1ASf|paSE6'  !.@Sh  $.<JVcmw *7ER^ir{ %3@MYdmv}  -:GS^hpx  &4AMXbjry  ,9FQ[dlsz   " 1 > J U^fmt{" #$! )7DNW`gnu|&'-/-'"1 =!H"R"Z#b#i#o#w#~#$$$$%%&'''''')06872+%')+*8*C+L+U+\+c+j+q,x,,,,,,-.....~.~..7=??<5/ /1&232>3H3P3X3^3e3l3s3|333}3|3z3y4w5v5u5u5u5u53=CEFC=668!9.999C9L9S9Z9a~9h|9oz9wy9w9u9t9r9q9o:n:n;m;m;m:m:9BHKKID><=>*?5??~?H|?Oz?Vx?]v>dt>kr>sp>|o>m>k>j>i?g?g?f@f@f@f?f?=FLOPOJDA BC&}D2zD<wDDuDLrDSpCYoC`mCgkCoiCyhCfCdCcCaC`D`D`D_D_D`D`DAJPSUSOIG }GyG"vH.sH8qHAnHIlHPjHVhH]fGdeGlcGvaG`G^G\G[HZHZHZIZIZHZHZHDMSWYXTN}KwKsLpL+mL5kL>hLFfLMdLSbLZaLb_Lj^Ls\K~ZKXKWLVL UL TLTMULULULULHQW[\\YSwOqOnPjP(hP2eP;cPCaPJ_PQ]PX\P_ZPgXPqWP{UPSPRPPP PP OPPPPPPPPPPPKTZ^``]|WrTlShTeT$bT/`T8^T@\THZTOYTVWT]UTeTTnRTyPTNTMTKTKT JTKTKTKTKTKTNW^bddbw[mXfX bX_X"]Y,[Y6YY>WYFVYMTYTRY[QYcOYlMYwKXIXHXGYFYEYFYFXFXGXGXR[afhigr`h^a] \]Z]W])V^3T^;R^CQ^JO^RN^YL^aJ^jH^uF^D]C^A^@^@^@]A]A]A\A\V_fjmmlogdd[bVbTbRc%Pc/Nd8Md@KdHJdOHdWFd_EdhCdsAc?c=cr@=rH;rP:rY8rc6rm4rz3r1r/r.r.r.q.p.o.o.ofovz|~}r}d|W{LzBy)G(P'Z&f$s#! t}~qeXL@6,% #"!% .6@IT`n~}wi]PE9.% $-7ALXg w {m`TH<0& $.8DP^nqcVJ=1&  %/9FTdvtfXK>1&  $.:GWi}ɔȪwhZM?1%  "-9IZn߅ߜ߲yk\N@1$   +:K^sm^PA2$ ):Mbx!+9GT_js{ '4BO[env~  "/=JU`iqy  )7DPZcksz "0=IT]emsz  (6BMW_fmtz -:FPX`gnu{   %2?IRZahov}#(*'!,8CLT\bipw     $,131-%  &!2"="G#O#V#]$d$k$r$z$%%%&~&}'{'y(x(x(x(x(+39;:6/('( )-*8+B+J+R+X,_,f,m},u{,~z,x,v-u-t-r.q.p/o/o/n/n/1:?AA>81./0(132=2F}2M{2Ty2[w2au2it2pr2yp3o3m3l3j4i4h5g5g5f5f5f46?DGGD?94 56$|7/y79w8Bt8Ir8Pq8Wo8^m8el8mj8uh8g8e8d9b9a:`:`:_:_:_:_:;CIKLJE?: {:w; t<+r<5o=>m=Fk=Mi=Sh=Zf=ad=ic=ra=}`=^=]>[>Z>Z?Y?Y?Y?Y?Y>?GLPPOKEz@u?q@m@(kA2iA;gABeAIcAPaAW`A^^Af]Bo[BzZBXBWBUCTCTCSCSCTCTCTCBJPSTSPJuEnCkDgE$eE.bE7aE?_EF]EM[ETZF[YFcWFlVFwTFSFQFPGOGNGNGNGNGOGOGFNTWXWT{NpJiH eHbI!_I+]I4[I<YICWIJVIRUJYTJaRJjQJuOJNJLKKKJKIKIKIKJKJKJKIQW[\\YvSkNdM _L\MZM(XM1VM:TMASNHRNOPNWON_MNhLNsJOIOGOFOEODPDOEOEOENENLU[^``^rWgS^QYQWQTQ%RR/QR7OR?NRFMSMLSUJS]ISfGSpES}DSBSAT@T?T?T@S@S@S@RPX^bee}bn\cYYVTVQVOV"MW,LW4JW<IXDHXKGXSEX[DXdBXn@X{?X=X^a<^l;^x9^7^6^5^4_4^5]5]5\5\Yaglnnvlgi\fQdHb DbBbAc$?c->c5=d=s4r 1s0s/s#.s+-t4,t<+tD)tM(uW'uc%uo$u"u!u uutsr q qksy|~tgZM~C~8}/}(} &}$}#~%"~-!~6!~?HR^kz~|{{{rz{m`TH<2( &.7ALXeu {seYLA4*!   & / 9 DP^nwj]PD8,"  '1<HVew{m`SF9-#   (2>L[lqcUG:-"  '2@O`tËáøseWI;-! &2ASf|ٔ٫vgYK<.!  $2CVkj[L>/   #3FZq(7DQ\fow~$2?LWajry ,:FR\eltz  &4@LV_gnt{  -:EOX`hnt{  %2>IRZahnt{  *7BKT[bhnu{  !.: D M U \ b i o v ~  $%" '3>GOV\cipx}||{{!)-/,' !-8AIPW^dks|}|zxwv t!r!q"q!q!q!(05751+# !'"2#<#D~#K|$R{$Yy$_w$fv%nt%ws%q&o&n&m'l'j(i)h)h)h(h(.6;==93-' '("|)-y*7w*?u*Gs+Nq+Tp+[n+bl+jk,ri,}h,f-e-d.c.a/`/`/`/`/`.4<ACC@:4.z-w.s/)q03o0;m0Ck1Ji1Qg1Wf1^d1fc2oa2y`2_2]3\3[4Z4Y5Y5Y4Y4Y48@EHHF@;y5s3o4l4%i5/g57e6?c6Fb6M`6T_6[]7c\7k[7vY7X8V8U8T9S9S:S9R9S9S9<DILLKF}@s;l8 h9e9"c:+`:4^:<]:C[:JZ;PX;XW;`V;hUM>M>M>M>M=M=@HMPQOKyEn@f= b=_=\>(Z>1X>8W>@U?FT?MS?UR@]P@fO@pN@|LAKAJAIBHBHBHBHBHAHADKPTTSPuJjFaB\AYBWB%UB.SB5QB=OBCOCKNCRMDZKDcJDnIEzGEFEEFDFCFCFCFCFCECEGOTWXX~UqOfJ\FWFTFQF"OF+NF3LG:KGAJGIIHPHHXGHaEIlDIxBIAI@J?J>K>J>J>I?I?IJRX[]\{YmSbOWLQJ NJLKJK(IK0GK8FL?ELFDLNCMVBM_@Mj?Mv=NRT2]F1^N0^W/^b-^n,_}*_)_(_'_'_'^'](](\\djnoyonn`kTiIg?e5c 2c0c/d!.d)-d1,d9+eB*eJ(eT'e_&fk$fz#f"f fff e d c!cbjpsuuuit\rOqDo:n0m)l 'l&l%m$$m,#m4"m=!nF nPn[ngnvnooonmlkkiqvy|{q{d{WzJy?x5x+w"vvwww&w.w7x@xJxVxcxrxxxxwvuutqx|wj]PD8.$ '0 9 D P ] l~y~}obUI=1&  )2=IVevtfYL@4(  "+5@N\nxj\OB6) "+6DScw{m_QD6*  !+8GXk~pbSF8*   +:K^sҋҤӻsdVG9* *<Od|fXI;+  +>Sj&4AMXbksz}ICC_PROFILE !.<HS]fmu{  )6BNW`hov| #0<GQZbiov|)5AKT\ciou{ ".:DMU\ciou{ '2=FOV\chou|  *5?HPV\ciov  !  # . 8 A I P W ] c jqz~|{zxvuttt&**(#'2;CKQ~W|^{eylwtv~trqonmkjjjj&-131,& "~,{6y>wEuLsSqYp`ngmpkzjhge d!c!b"a"a"a"a",48985/(!{ w!t"'q"1o#9m#Ak#Hi#Nh$Uf$[e$cc%kb%ua%_&^&]'[([(Z)Y)Y)Y)Y(29=??<60y*r&n'k(#i(,f)5e)<c)Ca*J`*Q^*W]*_\+hZ+rY,}X,V-U-T.S.R/R/R.R.R.6=BDDA<{7r1k, g-d-a.(_.1].9\/@Z/FX/MW/TV0\U0dS1nR1zQ1P2N2M3M4L4L4L4L3L3:BFIIGBw=m7d2 `2]2Z2%X3-V35U3<S4CR4JQ4QP4YO5aM5lL6wK6J7H7G8G8F8F8F8F8F7>EJMMK~GsBi=_7Z6W7T7"R7*P72O89M8@L8GK8NJ9VI9_H:iG:uE;D;C<B<A=A=A=A<A<A<BINPQP{LoFeBZ=T;Q;O;M;'K;/I<6G<=G\C>gB?s@???>@=@Ce=Cq;C:D9D8E7E7E7E7D8D8CIPUXYXvVhP]LSHJE FDDDBD"AE)?E1>E8=E?I=I;J&:J.9J58K=7KD6KM4LV3L`2Ll1Mz0M.M-N,N,N,M-M-L-LPX]ab{ap_b[XXNUCQ;O 8O6O5O#4P+3P22P:1PB0QJ.QS-R],Ri+Rx)R(S'S&S&S&S'R'Q'QU\bfgxfme`aU^J[?X5V1U0V.V-V',V/+W6*W>)WG(WP&XZ%Xg$Xu#Y!Y YYYX X W!WZbgkluljk]hQeFc;`1^*] (]&]%^#$^*#^2"^:!^C _L_W_c`q`````_^^]`hnp|rrrfqXnLlAk6i-g#fffff%f-g5g>gHgSh_hnhhhhhgfeegosvxxmx`wSvFt;s1r'qqp pppq'q/q8qBqN q[ qi qz qqqppo n nouy~|t~f~Y~M~@}5}*|!||| | | ||!|)|2|=|H|U|c|t|{{zyyyxw|yl^QE9-#  #,6BN]m~~qcVI<0$  $.9FUexugYL?2&  %/<K[nxj\NA3&  $0?Pbx{m_PB4&  $2CUj̜̃˵paRD6' $5H\scUF8(%8Mc|#0=IT^fnv|  +8DOYaipw}%2>IS\cjqw}  ,8CMV]dkqv|%1<FOW^djpv| *5?HPW^diou|#.8AJQW]ciov} &1:CJQW]cipw~}{zzyxx  )3<DKQW]c}j{rz|x v t s q p o nmmm#&&$   " ,~ 5|=zExKwQuXs^qepnnwlkihfedccbb$*./-("}yv's0q8o?mFlLjShYgaeidrb~a_^\\ZZYYY*15641+%ysol"i+g3e;dAbH`N_U]\\d[nYyXV U T!S!R"R#R#R"R"/6:<;82z-r&j f c!a!&_"/]"6["=Z#DX#JW#QU#XT$aS$jQ%vP%O&N'L'L(K(K)K(K(K(4;?A@>9u3l-c'^&\&Y'"W'+U(2T(9R(@Q(FP)MN)UM)]L*gK*sI+H+G,F-E-E.D.D.E-E-8?CEEC{>q9g4^.X+U+R,P,'O,/M-6L-<J-CI-JH.RG.ZF/dE/pC0~B0A1@2?2?3?3?2?2?2<CGIIHxDm>c9Z4R0 O0L0J0$I1+G12F19D1@C2GB2OA3X@3b?4m>4{=5<6;6:79797:7:6:6@FKMNLuHjC`>V9M5 I4G5E5!C5(A5/@56?6=>6E=7M<7U;8`:8k99y897:5:5;4;4;5;5:5:CJNQR~PsMgH\DR?H:D9A9?9>9&<9-;:4::;9;B8;J71>0?/?/?/?0?0>0>GMRUV|UqRdLYIOEE@?> <>:>9>#7>*6?15?84?@3@H2@Q1A[0Ag.Bu-B,C+C*C)D*C*C+B+BJQVYZyZnWaRWNMKCG:C 6C4C3C 2D'1D/0D6/E=-EF,EO+FY*Fd)Gr(G&G%H$H#H$H%G%G&GOUZ^_w^k\_XUUKQ@M5J0I.I-I,I$+J+*J3(J;'KC&KL%KV$Lb#Lp!L MMMNMLL KSZ_c~dtcia\^R[GXf3e)c a` ````&`.a7a@aKaX af bv b a aaa ` _ _fmq~suujt\sOrCp8o-n$lkkj j j j! j) j2j<kGkSkakqjjjiiihhmsw{zp{c{VzIz=y1x'wvvv v vvvv$u,u6uAuNu\ulu~ttssrrquz~vi[NA5)  &/;GUex~}}|{n`RE9,!  (2?M]prdVH;." )5CTf{ugYK=0# )8HZoxj\M?1# +<NbzƔƭl^OA2$  -@Tk`RC4%  1F\t ,9EPYbjqw~'3?JT]dkrx~ ".9ENW^elrw~ (3>HQX_ekqw} "-7AJRY_ejpv} &1:CKRX^dipv~  *4<DKRX]cipw  #,5>EKQW]cjqz}{ywutrrrqq  %/7>~E}K{QyWx]vdtkrtpnlkihgff e e  ##  |y(v0t8r ?p Eo Lm Rl Xj _h gg pe zc b ` _ ^ \\[[[!(++)${u q n!k*i2g9e@dFcMaS_Z^b\k[vYXVUTSRRRR(.221-'z!rk gda%_-]4\;[BYHXOVVU^SgRrPONLKKJJJJ-47874}/t)l#d^[Y!W)U0T7R=QDOKNRMZKcJnI|GF E!D!C"C"C"C"C"28<>=:y5o0f*^$W T Q O!%N!,L!3K":I"@H"GG"NF#WD#`C$kB$yA%?&>&='='=(=(='='6=@BB?v;l6b0Y*Q% M%K%I%!G&(E&/D&6C&=B'DA'K?(T>(]=)i<)v;*9+8+7,7,7,7,7,8,:@DFF}Ds@h;_6U1L+G)E*C*A*%?*,>+3=+9<+A;,H:,Q9-[8.f6.s5/4/30201111212030>DHJJ{IpEe@[;R6H1B. ?.=.;."9/)8//7/660>50F41O31Y22d12q03/4.4,5,5,5-5-4.4AHLNNyMnJbEX@N<E7=3 93736343&33-24414<05D/5L.6V-6b,7o+7*8(8'9&9'9(9(8)8EKORSwRlO_IVFLBB=88482818/8$.8+-92,99+:A*:J);T(;_'!>"=#=#<IOSVWuVjS]OSLJH@D6@/= -=+=*>!)>((>/'>7&??$?H#@R"@]!Aj AzABBBBBAAMSX[}\r[gX[TQRHN=J3G*C &C%C$C#D%"D,!D4 E<EEEOFZFhFxGGGHGGFFRX]`zap`e^YZOXDT9Q/N&K JJJJ!K(K0K8KBLLLWLeMuMMMNMMLLW]bewfmfcdVaJ^?[5X+V"TR RRRR$R,R4R>SHSTSb Tr T T TT T S R R]dh~ktlkl_jRgEd:b0`&^][Z ZZ [ [' [0 [: [E[Q[^[m[[[[ZZZYdkn{prrgqYpLn@l5k*i!gff e eedd#d,d5d@dLdZdid{dccbbbalquxwmx`wRvFu9t.t#rqq qqp ppoo&o0o;oGoTodounmmlkkksx}{s}e~X~K~>~2~&}|| |}}| ||||!|)|4{@{N{^{ozzyxwvvzxk]OB5)  ",8FVh|}oaSE8+  ".=M^srdVH:,  #1ASgugYJ<-   $5G[rj[M>/! '9Md~ܙܰ]O@2" *?Um  (4ALU]elrx~#/;FPX_flrx~ *5@JRY`flrx~$/9CLSZ`fkqw~ )3=EMTZ_ejpw",6>FMSY^djpw &/7?FLRX]cjqy~|zxxwww (19@FLRW}]{czkxsv}tqpnlkjjjj !~*{2y9w@uFsLrQpWn^mekniwgecb`__^^^  ~ yur#o+m3k:i@gFfLdRcYa`_i^s\ZYWVU T T T T %((%!{tn if d %b -` 4^ :] @[ GZ MX TW \U dT oR {PONLLKKKK&+//-)}$tle_\ZX'V.T5S;RBPHOPNWL`KkIxHFEDCCCCC+14541x+o&f ^W TQO#N*L1K7I>HDGLETD]CgAt@?=<;;<<<069;:~7s2j-a'Y!Q LJHF&E-C3B:AA@H>P=Y<d;q987 6 5!5!5"5!6!4:>??{<p8g2]-T(L"FCA?"> )= 0; 6:!=9!E8"M7"W6#b4#n3$~2$1%/%/&/&/&0&0&8>BCCxAn=c8Z3Q.H(@$ =#;$9$8$&6$,5%34%:3&B2&J1'T0'_/(l.({,)+***)*)+*+**+*<BFGGvElBa=W8N3D.<) 7(5(3(2(#0()/)0/*7.*?-+H,+R+,]*,j(-y'-&.%.$/$/%/%/&.?EIK~LtJjG^BT=K9A48/2- 0-.--- +-'*..).5)/=(/F'0O%0[$1h#1w"2!23333 3!2CIMO|PsOhL\FRCI??;66.2 +2)2(2&2$%3+$32#4:"4C!5M 5X6e6u77788877GMQS{TqSfPZLPIGE=A3=*9 %7#7"8!8" 8(80989A:K:V;c;r;<<==<<;KQUXyYnXdVXQNOEK:G0C'@ > >>>>%>-?5?>?H@S@`ApAAABBAA@PVZ]v^l]b[VWLUAQ6N,K#HE DDEE"E)E1E;FEFPG^ Gm G G GGG G F FU[`}bscjb`aS^GZUJVWVeUwUUUTTSSbhlwnoocnVlIj=h2f'ecba `` ____&_/_:_E_S_a^r^]]\\[[jo}rutju]tOsBr6p+o nml lkk jjjj!i*i4i@iNi\imhhgfeedqvzyp{b{U{Hz;z/z#yxw wwwwv vvvv#v.u:uGuVuht|tsrqppy}vhZL?2%  &2?O`u~~zl^PB5'  (6EWk~paSE7)  *:L`xsdVG9* .@TjgXJ;,  2F]vԒի[L=/ $8Ng $0<GQY`gmsy  +7BKS[agmsy&1;EMU[aglrx  *5>GNU[aflrx $.8@HNTZ_ekqx (19AHNSY^djqz~ "*2:AGMRX]dks}}{xvusqpppp  $,3:}A{GyLwRvWt]rdpmovljigedccbc ~zv%t-q4o:n@lFjLiRgXf_dgbq`|^\[YXXXWW~ w rnjh'e.d4b;`@_F]L\SZZXbWlUwSRPONMMMM"%%"}un g c_]![(Y/W5V;TASGQNPUN^MgKsI H G E D D C C D $),,*&w!nf_Y U S Q "O )M /L 6K <I BH IF QEZDdBp@?><;;;;<)/221|-r(i#aYQLJHF$E+C1B7A>@E>M=V<a:m9|76543444.4786x4n.e*\$TLF B@? ='<-;49:8B7J6S5^3j2y0/.---..28;<<v9k4b/Y*P%G@ <:86#5)40372>1G/P.[-g,v*)(' & ' ( ( 6<?A}@t>i:_5V0M+D%; 6320 /&.--4, ;+ D*!N)!X'"e&"t%###"$!$!%"%"$#$:?CE{DrCg?]:S6J1A,8&1# .","*")"#(#*'#1&$9%%A$%K#&V"&c!'r'(())))(>CGIzIpGfDZ?Q;G7>25-,( ('''%'$'!#('"(.!)6 )?*I*T+`+o,,------AGKMxMnLdIXDO@F==834*/$, !, ,--%-,.4.</F/Q0^0m11122211EKOQvRmPbNVIMFDC;?1:'62 2222"3)314:4D4O5\5k6}66 7 7 666IOS~VuVjU`SUOLLBI8E.A$=:88899&9.97:A:L ;Y ;h ;z ; <<<< ; ;NTX|[r[hZ^XSUIR>N4K*G!DB@ ??? @# @+ @4 @> AJAVAeAvAAAAAA@TY^y`p`f`]^Q[EW:T/Q%OLJH GGGG H(H1H;HGHSHbHsHHHGGGGZ`cwenfefYdL`@]5[*Y WUS RQ PPPP%P.P8PCPPP^PoPOONNMMaf}itllmakSiFg:d/c$a_^ \\[ ZZZY!Y)Y3Y?YLYZYkX~XWWVUUhmzprrgrZqLp?n3m(kjh ggff e eddd$d.d:cGcUcfczba`__^otxwnx`xRwEw8v+v tssrrrqq qpppp'p3o@oPo`ntnmlkjiw|{s}e~WI</"~~~~~~ ~ ~~~ ~+}9}H}Y|m|{zyxwwi[M?2$ "/?Pd{{m^PB4& $4FYppaSD6' '9Md~dUG8),@Vǫ͋XI:,2H`{ !,8CLT[bhntz '2=FOV\bhnsy",7@IPV\bgmsy &0:BJPV[aflrz *3;CIOUZ_ekr{ #,4<CINSY^dks}}{yxwwu&-5<BGMR}X{^yexmvvsqomljihhi  |'z.w5u;tArGpLoRmXk_ifgpe{cb`^]\\[[  { wso!l(j/h5g;eAcFbL`R_Y]a[jYuWUTSQPPPP wqkgda"^)]/[5Y;XAVFUMSTR\PeNpL}KIHGFFFE ""woh a ]YVT#R*P0O5N;LAKHIOGWFaDlCyA@>=<<<<"'))'{#qiaZ S OLJH$G*E0D6C=AC@K> S= ]; h: v8 7 5 4 3 3 3 4 ',//.w*m%d \TLF C A ? > %< +; 2: 88 ?7G6P4Z3f1t0.-,+,,-,145}4t1j+`'X!OG@ ;976!4'3-241;0C.M-W,c*q)'&%$%&&169:{9q6g1]-T(L"C;5 21/.$,*+1*8)@(J'T&`$o#!   4:=>y=o;e7[2R-I(@#80 ,*)' &'%-$5#>"G!R ^l~8=ABwBm@c<Y7O3F.=)5$- ' %#!!$ +2;E O!\!j"{""#####<ADFuFlDbAW<M8D4<03+*&#" !!""!"(#0#8$B%M%Y&h&y&'''(''@EH}JtJjI`FUAL>C::612(- ) ''''(%(-(6)@)K*W*f+w+ , , , , , +DIL|NsOiN^KSGJDB@9=/8%40- ,---#-*.3.= /H /U 0c 0t 0111100HMQzSqTgR]PRLIJ@F5B+>":74 33 3 3 4( 41 5;5F5R6`6q6666665MRVxXoYeX[UQRGOHPW]ciot{#.8BJQX]chnt{ (2<DKQW]bgmt{"+5=EKQV[afmt| %.6>DJPUZ_flu~~| '/7=CINSY_em~w|zxusrqppn !)07}={ByHxMvRtXr_qgopl{jhfecbaaa|xu#r)p0n6m<kAiGhLfRdYc`ai_t][YWVUUTU  {u plhf#c*a0`6^;]A[FZLXSV[TdRnQ{OMLKJIIIy qke a]ZX$V*T0S6Q;PANGMNKVI_GiFvDCA@??>?zrjb\WSPNL%J+H0G6F<DBCIAQ?Z>e<r:9866555 $&&$u ld\T N JGDB @%?+>1<7;>9E8M6V5a3n1~0/-,,,,%*,-{+r'h"_WOHA >;98!6&5,322 91 A/ I. S, ^+ l) |( & % $ # $ % */22y1o.e)\$SKC<5 3 1 / . "- (+ .* 5) ='F&P$\#j"{ /367v6m3c/Y*P%H ?80,*('%$$*#2":!C NZhx37:~;t;k8a4W/N+E&=!4-& #" !'/7AKWev6;>|?s?i=_9U5L0C,:'2"*" $,4>IUct  :?B{DqChB^>S:J6A29-1)(%  ")2<F S a !q ! " " " " " !>CFyHpHgF\DR?I;@884/0','# !!"" "'#/ $9 $D %P %^ &o&&&&&&&BGJxLoLeK[HPDGA?>7;-6$1-*( ' ( ( (% )- )7*B*N+\+l++++++*FKOvQmQcPZMOJGG>D3@)< 841 / ..//#/+050?0L1Y1i1|11000/KP}TuVkVbUXSNPEM:I/E%B>;9 7 6666 6)627=7I7W7g7y766655PV|Zr[i[`[WYLV@R5N*K HFC A@ ?>>>>&>/>:>F>T>d>v==<<;;W\y_paha_aT^G[:W/U%RPM KJI H GGFF"F,F7FCFQF`EsEDDCBB]bwenggh[fNcAa4^)\ZWVTSRQ QPOOO'O2O?OMN]NoNMLKJJe|itlmnbmTkGi:g-e"db` _^^]\[ ZZYY"Y-Y:YHXXXkWWVUTSlypsshsZrLq?p2o%nlk jjiihgff feee'd4dCdSdec{ba`_^}twwny_yQyCy6x)xwv uuuvuttsss rrr r,r;qLq_qtponlk{{r~d~UG9+  #2CVl~}|vhYK<.   '8Lb|j\M?0! -@Vo_PA3# 3Ib~SD5& %;Snߌݩ$/:CKRY^diou| )4=ELSX^cinu} #.7?FMRX]bhnu~'08@FLQV[agnv !)29?EJPUZ`gox}|{zwu #+28>DINS}Y{`yhwqu|spomkjiig }$z+x2v8t=rBqHoMmSlYjahjftda_^\[[ZZz uqnk%i+g1f7d<cAaG_M^S\[ZdXnV{TRQPONNM |unieb_]%[+Y1X6V;UASGQNPUN^LhJuHGEDCBBB{ sle_ [WTQO%N+L0K6I<HBFHEPCYAc?o>~<;:9888uld ]VQ MJGE D&B+A1?6>=<D;K9T7_6k4z210//.."$$z!qg_WP IE A><:!9&7,62483?1G0P.[-g+v*('&%%}ICC_PROFILE%#(**w(m%d [RKC = 96310"/'--,4*;)C(M&X%e#t"  (-/~/t.j+a&X!OG?81 .+)('#%)$ 0# 7! @ J U b r       -14|4r3h1_,U'L#D<4-& $ " !   % , 4=GSaq158z9p8g6]2S-J(B$91*# !)1:EQ_o     59<x=o=e:[7R2I.@*7%/!(  &.8BO \ l   8=@wAmAd?Z<P8G3>06+.''# # , 5 @ L Zi|<ADuElEcDYAO=F9>652..%*%!    "*3 > J!W!g!y!!!!! @E}HtJkJbIXFNBE?=<59+4"/+( $ ###$ $(%1%<%H&U&e&w&&&&%%EI{MsOjO`NWKMHDEO2L(HEB@=<; :999 9)949@9N9]9o887765UZv]m_e_]_R\DX8U-R"OLJ HFED C BAAA&A1A=AJAZAl@??>=<\|`scledfYdKa>^2[&YVT RQONML KKJJ"J,J9JGJVIhI~HGFEDcygrjkl`kRiDf7d*b`^ ][ZYXWVV UTTT'T4TBSRSdRyRQPON~jwnpqfqXpJoK=S;]9i7x6432211zph_ XQL HDA?=!<&:,91776>4F3O1Y/e.s,+*)((( !!ulcZR KD@ <8643!1'0,.3-:+B*K(U&a%p$"! "&(|'r%i"_WNF? 84 1.,*)"'(&.$6#>"G R^m~'+-y-p+f(]$TKC;4 - ) &$"! $*2:DO\j| +/1w2n1d.[*Q%I @81)#    ' . 7 A M Z i { /36v6l5c3Y/P+G&>!6.'       # + 4? J X g y37~:t;k:a8X5N0E,='5#-&    ( 2 <HUev6;|>s?j?`=W9M6D1<.4*,&%"   &/:FSbt:?{BrChC_BV?L;C7;430,,$)$   $-8DQ`r>CyFpHhH^FUDK@C=;:37*2 -)% "   " +!6!A!O!^"p"!!! CHxKoLfM]KTIJFBC:@/;%73/ ,)' &%&&!&)&3'?'M'\'m''&%%$HLvPnQeR\QSOJLAI5D+@!<96 20/ .----'-1-=-J-Y-k-,,+**M}RuUlWcW[VSUGQ;M0I%FC? =:87 6 5444$4.4:4G4W4h4}32110S{Xs[j]b][]OZBV6R*O LIGDBA?> ==<s0r#qo nmmmmlkjiiih hhg!g/g?fRffedcbawxmz_zPzBz3{%{zyyyyzzzxxwwwwwwww&v6vIu_uwtsrqq~cTE6(,?UmfWH9*!3IbZK<- '=UpM?/  /HbЀНи  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ݯŌh̜λŽzې[=eu4TӔ~I,Nʳ~emŮ滑tcĚsE&4}U0 `t5 R4Oi  R;5L[ML^`6`ʼϚmZF|>&T<.Sm1 aZ]5\} T}EDd/"7IXkA(?cղ廗wb۞g6 ?^ف9/Z$^w%j}[+L<0 -a''U'%ʝv]J<2-,09GԻ縏jK/og4<ւ;1oBPi7/"y4Ftjc)"aW7hӮ|uqprwۺiiȓe=ێLn|,E*"D}6jXFG5% ' p pUB3& &ӼҩeH,q<O5u#gCH.8thB`z]a$fɬ}vqligfgkpzŪyawݦwP, 1Np`o7@r_M;*3^+ ƣhM2|Fq|/;d tjK0/Ryt6m|i hpaPliZI9X)V/)G .>RhҰw]B( J}EP h6HuiR>3+X"\Jzwz LWhtңzX:)#RiC4yO]:*Ot3grD\A_KW $1?N`t¾~S?0# vuFNDkyf!SJ?w+ EM.*-E`ct3ICC_PROFILE˷|xtplhejH- 1B)kZN4 =eNCzt _t,8ESbrٲymd]VQKFA<82-(#K% f=3l 5[/^w^C@^N,>Rj|þm[L@7/(" 4v$Q|yfQ#:62/.1%B} 9b"Hri(N\3.2Rwr/BXpon~dVKC<60+'" RmQ:B#h >m7/Ptr*AZuXDTdu{xvtrsuxO:0(! #i 9c4[I9]{ !8RoX)9IZl~wqlhda^[YXWWY^eq1 V/W|7+a ,Pv0 #;Wvc*;L_tſld^YUQOLJHGFHKPYf&VP:y !2X1Z'KqI/Jhu&8J^urZSOKHFDCBABCGNYi}.VA{ 4`?%Jqf*Db5+>QhvPJGEDDDEFGKQZhA6ce 'Ls/*DbP6Ja{҇|SGIMQV`sV5Pmo>_{AdobedC D$ s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjz?3{oqo]o/":,u1~b_j76L W;נlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l*2XٞlٳШ~{cfyfB)͛7 ̧?g6l_=кUuWQ}6le}n6l,ٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳgɿZOԓ6l6llٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lo$͛=e87_o͛=e6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳft5Y([95kuіxvVg70 E+6l~r~e~MUyOS!hzE"25b@ƁU͛6ypss.̏&yy o Jբ-'6HnL "j6llٳf͛6lٳf͛6lٳ_p!y B>^m<駷n|\[jn/&WtDX!vmٳf{ X~d^~|KiEM6X `K?FBTy9Qf͛>)9_zeZO6ӡq[ikf͛=yygZ_jPZ!(EܳrNlٳYY6vw 1X[Ȳ42xD%YYH B7f9fn.--绻;[[X[X$qƀ;($͛6|Shj<;ci46jK]8M䶐Es4?1"̤ٳg^W>Jİf6!Iayd'tX(VYfsf͛6lٳk7q̭z-_t>XH6rʡF E#I ]6q?˯& /&~qY"SxWxX&n(bvz,r̪ ͛6}gxnYmb`H`6lضlٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l?"&?*?|w綂vKTUY]tvfϛֿ?(%>R9Kq";x ٳg#3<8Y*[1nm-.+xߧb%BYClٳgpgsWɟ~|?1 $ͼ15ixZ16l$|A*i^c<%\]D PC_6lW8C3k-[;U/ 4˟-&i\?uo+olnE_pŬUҾ%Z> 6lX??qy[̯=޼ N3~%#+CS彫6l_(ywo5VՖW-e_ޘ} B&rq6}A~Aҿ6lל$/Z֊ulYd\Em>q3r0;)]f͟"?P?ZKc6lƗ?_?-5ۉ8yJ_kghv9t2­nܫLٳgS~V\ϧ"O%-IHz+nW?|ٳg}4s~a~Z?$Ěޕjղ5k}kvncfQP~%͛6}=*U|MBXaV]M -Z F̧cLٳgoԵO(;ί.[g %ѳf9ɿ$/&lٳ=6lϩ??(항Go6l?3f͟WA~Gҭf͝6lxu\?y45+Ev}6~- x D;x"(Pfό?T??r2nυar#m2HZڽf͟K>B8C({֯~9~\\ٳd{RyچCgTLNUf.>OGu @Wuss;-D%M͕v4rCR'sn6lɟߙ?~X1|ìyKVo6yNH-\jW󋐲GpTVڑ͛%Wv>bYl<%3Xi#)HJ*:Zlٳlٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lYi6cvZ֛hGsKU4VFEP͛> ˿ ?#%,r'bO_7^`ӡCnKxP~ȜTafϬ󇿘kb90nn^HA[Lh)WlٳgԱXHJ藲KJEc#i7Flٳj96l| _6*6lOMǛ6lf͛?CW^P'6lOey O6l͛6~xԟ_#͛6voݼI)tob^3"r#o6l?qQxM LX .Av;f͛;NlٳwPw73t62&Ȝ /]8% .`S6l8Y.+4;M/͐FZK{%^}E桀&6G͛>I^BG':Mީ4v[G1U***Hf_"_Y{7>VC}C\Ү6+"Bx0*e;06l؟./1ӿ0>i^Z] liR*if͛>* ?,t)o+7>w:CfOOKAcqIuq(TA>aJvl/q"ʖh&}T+>~9r?S%sf͛͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|I9fY -WwfYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛>yY@/䷟<&a,'&Fc(`@6lwoMSrr\K/'۽㬪H.Ű_҃/I6lZ?=^^Ӡ4/[.l!bײ(P<lٳ_YF8{+3_ꚽB.׳j6O Ţ*@,X%vl$:LPO7oCqwt̉v+uy$X]PKPR6l#%C:+ V/])'G[X-K뗼˘Jm\ٳg?WsK@?ޗu*[.?H'S*\Ӧsf͟Cf͟|=N\yiJf(ЛyWY+g]W]˭y-<3f͐?_/ʏOZVG~.n_\!mzY<*6l6l88B+[o+*= oԾǨr WֵLٳg'?9KOVy{: bѮ4RdH. +}f!͛< 8>V7徫R#S?ҐiڂH$s_H}Fo|ٳg׼ٳa/y@|}&]l1-͵)U6l}>?5/0PW_DU ݍbDm$Azٳg^FoM毛<שE饓]/g KLRI啝Da6͛;W7bUHߕ1>ghх VEs eѪx6/Ф~Lʱͧz][7q[BHGlyq6l_r39o,WyZ.l{kkO#vfյ;KeR؍f͞_W5~` A?Y./OQCj =F_a6llٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛>Mٳg+uٳgf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͟&i?RNlٳ_lٳYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳfϓ'6l/e}n6l,ٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳgɿZOԓ6l6llٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lo$͛=e87_o͛=e6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l7I?sf͛͞͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|I9fY -WwfYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛>Mٳg+uٳgf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͟&i?RNlٳ_lٳYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf:hu_AiZds7.C1)gGbRNlٳ_Njmytw+'|>JӘW.lٳ>R|Zɺ4;FQ*TuGtu26l%͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|I9fY -WwfYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛<? 'v2yOuESORm/oVћ6lW6l蟖A-փv~osE5mޱʿ f͟]">Eѳ~^R#Mh1:%˞W%I7lٳDs 76%Ž,OGGVVj͛6+6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l7I?sf͛͞͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|v?L3f͟f͛6lٳf͞MU=^-ܘ5y93ēWGlٳwOtvu |ȩ3qi7—#Í\ٳgf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lo$͛=e87_o͛=e6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf91[ekn4 ' ts*AH ͛6@y?ܓ[ ٳf[ˡrMo3f͛qo.5 ͛6oOſ$6lٿy?ܓ[ ٳf[ˡrMo3f͛qo.5 ͛6oOſ$6lٿy?ܓ[ ٳf[ˡrMo3f͛qo.5 ͛6oOſ$6lٿy?ܓ[ ٳf[ˡrMo3f͛qo.5 ͛6oOſ$6lٿy?ܓ[ ٳf[ˡrMo3f͞7."|iY~m8c 4yP5w@ifϖ9f͛6lٳf͛6l|rI,NKD%YYMAn9f|E|~a^}K@Y1YHÐ.yFlٳu1AԬMb!.mޏ444skϺ6j~i?/ZRΚ)!ѡFb[,4^+E6lK?l6lٿ藟lٳ/?8{\ٳf^qgfDsf͛y ͛73?͛6o%g6k6lK?l6lٿ藟lٳ/?8{\ٳf^qgfDsf͛y ͛73?͛6o%g6k6lK?l6lٿ藟lٳ_/E|+_S^D^~sZ}[#VPٳf͛6lٳf͛6lٳfέW)ϫTu?sن iRUUlٳ?/ o5jIzVVC,vqX-+*ٳyf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l7I?sf͛͞͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|v?L3f͟f͛6lٳf͇ZǘYywʺ-5EYv149x4UnHfϩ_OHYc6x^w)Zzf͛>{˚-:=#aX!}=IN|ٳalٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l~O~De ,yy N-O&͛6|>͛6>8D$ieGƀ7$ٳg?"01E?1d;YcYgSCb#alٳZUQjdz׌#RV͛6tٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳgɿZOԓ6l6llٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ~l~WoȚאҒ ;VEh/`#K9#b*bsf͟'n_ig,O)n-f u߈yfϠߑ? mX5y0 qՑ^h߿;aօjٝf͛͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|I9fY -WwfYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛>Mٳg+uٳgf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͟&i?RNlٳ_lٳYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳfϓ'6l/e}n6l,ٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳgɿZOԓ6l6llٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳ-'I͛6zpoYo[͛6z6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lo$͛=e87_o͛=e6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6l7I?sf͛͞͞6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6|I9fY -WwfYf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛>Mٳg+uٳgf͛6l_}iZ_OSӽ~^֦Hy.<ȭ*+Lٳ`tH:8 ͛6;6lٳf͛6lٳf͛6lG3oq3HM7XՁ9"2:֪B3f͇f͛6lٳf͛6l`3#DL#V$)#͛6lٳfGomzN_Bֵ++NSHhfYflٳg\͛6Q!Af!UEI;lٲDY#`2::6lٳf͛6lٳf͛61$@7Y1F*A)lٱf͛6lٳf͛6l:~jڵZܩdi"ff *sf͉:Zfjv։ZC%ͭݭ ` ,G"0du$0 Lٳalٳf͛]Y@7P[!'u&S6l6lٳf͛6l'àyOF|sOחgek '87f6lcմ)V/Zّ #~49ff͛6lٳf͌Fdh]r ą$u4ٳcf͛6lٳf͛6l-4 #>[ [!_N1$̠PQ3f͇.yGҼN[еHombT #VSB Flٰ6-at/t/&h#wp JZ[=YaHJٳalٰC?κk:gSBt]m˸nŞd. .𱤑Nlٰ6lٳf͛6lٳf͛6l$fF:QU G HRGP SO͛6?6lٳf͛6lٳf̈́zj:L5o4Ii.{Fi!GW5.$($6lG nAyfd]>"m'c [ ҄f͛3f͛6lo$͛=e87_o͛=e6lٳfϛzf?ߖ.tMr+WQeV v$f͛ȝ#[.QBϯsik_OӟSմYŬZ2Af͛'ߐ?Qjb&#Z.jGskEͽ [GO2"?ŶlLw矓/oۭ+WFEί{P=ŝXhAPB(6-m9Pϛ?,,CWϙ6S!СH rHTlٳ3~tI9 -Oi֡M3IiZO;->jiSf/IjRyrrC^b疯J›6l!ʶ|5_:G󮳪y[䱖K8t謬ogDq&f͜{_rMWt|{{ 2\CejZ~e-7K<l,K\W6l+@W/˾fo`&]cѲ.a}х kbhfN9__1?Ӵ}|P-'CԿ?-!4cOKCImQhGd<V\j畴o=4y-jkFOK#FC"M`c6lk9-88Oɭ ?|%hOmNN]u46bٙTM+D_%lٳ?tйu;hZ_;sho,ړikysqur **Ǖ3f͓ǯ5M/)eoz2Z^*E ]Nlٳ_PO?~T$̋\)4TK&xޙfÿkK4oʚ.]\e_a}̡mꟄ84͛6󕿞~N_?i?zӧ :yG59c jMz`Jl=7y^%t+;KˋyP{{KVFi O6l_2c(h[~fy.ߓ nѴiWZYSMxvc|o,:ر#O?W7\mϾlٲu9jI02,ϛu}Z]'JP.gxʈcyI8vl[\&&CYQ|}&jZ]֝u4ȉp:cYٳ~DZl~d_1iڷu%y[%k_NeVB(k6lN(G:ֶڎkZ4k(;S6l6O?/'R򧘼~IRأ#vZ}h!)p@S6l?ߝOGW?~ACxϚtɻm; >s{[^hMG[+ iD%*+4f͞kkrWWO 9+M#j]aњ 7 dUU͛=ȏ?gߕߝPN6>E^v\J͒f,u6lدWͿVO- R1yVyo.um.{h#,y,v&cf&?SZ|'hږ6yaO-cZ4<,I~U 6l:ֿ>:~O~K~YWZމ_qyݗt}OYEX\]^J'?N5T(^6l <'߳Ƌo)ʝu䶹R?^DԨ+fٳg+|9/9S}]o&~[o[׼JZj=Ar=Hדf͛9cd~|Jy_rAN/69tv7WZ}MBѣzDbBlٳ~c@~b7^ !'^lɱyQ|3irZmec{qs1Gp8֜&f͜_rMWt|{{ 2\CejZ~e-7K<l,K\W6l7?0$<Q'ysJ-n6KtfӴM.H(H帕Csf͞sW΋ߗt<^Leyme]xցR iZ 6lտfm&6llٳf͛>Mٳg+uٳgf͛6l,0<~Dy_ɾlмi嫽# }q2JP$fW/96>-mPN2/*ٳf&5~7S%r)Z͛<}Kqrɾ3 5/;yG#/״+7Zw~\bkm$5ٳd[qZDyPj?)i:o|#ic]Cyc,MouJ(p+6l㷔o\Ot}m..%[9 +7]#f͝SUgo瞿o.\O_:w_Q{MJM@_Z<629;Wc$lٳg7Q9z8*5L^#i_?SlC~L~m6l~A'喵i]T~]7E[g橮-X:|=n9=CA6lv_̟%xhh痿1?o!uu2.?ҕJI#f͐ů/4OϾ~Χ8*Ce/Y\ǩyͬm嶞کz ͛6v?ˏ:yrqGFѾM? ;k?XRkv= %Yү]6q%X~~/^OU矐mk`5#MM~Qs>Ǫn,7' 6⣎lٲߛzgO䭝Οe/̽GrsEM2lt%ծU-!1w`45lٲ{3q[ʿZ?gֻjU֕vֺulD%VH拘UۉcvlCǕ.G}ry{QwZi.{ [{q"=89f i?0t=R?ͷC=ĿS?z62s\zڜ͛6uïˏ9UM?<~Ϝ<٪ []jz夞GeV.B` Flٲ19=?̈4?;/w䮷C&iwvv~cdo sS`lٲ*4οȯ͏)~M?1Z֭Sҭ5,MxeK ShN͛:_O姟ocJ'ߘK%^Gh|Zfc5 C5C4ETb„ҹfȵ~sO/_|}n7RK"R!hif~y>߃~W]o*}v(#dqiCz<6lrzyq U״,ŸNisဩN[̱HYƇf͉yɚcb\i_Yw~`l,]s oM6?W>p_󥖑]PE,wu宣4d[ $ZA+̬xc6lQA8#Ͼ4 oB#̞hU4O!J\JC͗M6zq~D&V7sicl'4U^2}Ƅٳgf͛6lo$͛=e87_o͛=e6lٳf͛6lٳf͛6lٳf.yq^ +n.}~ړJ%^,A$P$|Tf͛=.h^P4o+ycIм8tFEommn"4Uf͛f͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͛6lٳf͑/>y#˿^KG/ZܶO ${MPDIR}/upload_stimfit sftp -b ${MPDIR}/upload_stimfit p8210991@ftp.schmidt-hieber.de cd ${MPDIR} fi RMD160=`openssl rmd160 -r ../../../build/release/stimfit-${STFVERSION}.tar.gz | awk '{print $1;}'` SHA256=`openssl sha256 -r ../../../build/release/stimfit-${STFVERSION}.tar.gz | awk '{print $1;}'` SIZE=`wc -c < ../../../build/release/stimfit-${STFVERSION}.tar.gz | awk '{print $1;}'` echo "rmd160:" ${RMD160} echo "sha256:" ${SHA256} echo "size:" ${SIZE} ${GSED} 's/RMD160/'${RMD160}'/g' ${MPDIR}/science/stimfit/Portfile.in > ${MPDIR}/science/stimfit/Portfile ${GSED} -i 's/SHA256/'${SHA256}'/g' ${MPDIR}/science/stimfit/Portfile ${GSED} -i 's/SIZE/'${SIZE}'/g' ${MPDIR}/science/stimfit/Portfile ${GSED} -i 's/STFVERSION/'${STFVERSION}'/g' ${MPDIR}/science/stimfit/Portfile sudo portindex for _port in stimfit py-stfio $(port installed | awk '/^ +py[0-9]+-stfio/ {print $1}'); do if port installed "${_port}" | grep -q "${_port}"; then sudo port uninstall "${_port}" sudo port clean --all "${_port}" fi done stimfit-0.17.1/dist/macosx/macports/mk_diff.sh000077500000000000000000000007771517235503400213220ustar00rootroot00000000000000#! /bin/sh CURDIR=`pwd` UPSTREAM_BRANCH="${UPSTREAM_BRANCH:-master}" cd ~/macports/dports git pull origin "$UPSTREAM_BRANCH" cd $CURDIR declare -a arr=("python/py-stfio" "science/stimfit") for TARGET in "${arr[@]}" do mkdir -p tmp/a mkdir -p tmp/b cp ~/macports/dports/$TARGET/Portfile ./tmp/a/ gsed -i '2s/.*/# $Id$/' ./tmp/a/Portfile cp $TARGET/Portfile ./tmp/b/ cd tmp PORT=`echo $TARGET | cut -d'/' -f 2` diff -ur a b > ../Portfile-$PORT.diff cd .. rm -r tmp done stimfit-0.17.1/dist/macosx/macports/python/000077500000000000000000000000001517235503400206725ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/macports/python/py-stfio/000077500000000000000000000000001517235503400224445ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/macports/python/py-stfio/Portfile.in000066400000000000000000000040151517235503400245600ustar00rootroot00000000000000# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup python 1.0 name py-stfio version STFVERSION categories python science platforms darwin license GPL-2 maintainers {gmx.de:christsc @neurodroid} description Electrophysiology file support for Python long_description A Python module to read common electrophysiology file formats. homepage http://www.stimfit.org master_sites ${homepage} distname stimfit-${version} checksums rmd160 RMD160 \ sha256 SHA256 python.versions 27 35 36 37 if { ${name} ne ${subport} } { depends_build port:swig-python depends_lib port:boost \ port:hdf5 \ port:py${python.version}-cvxopt \ port:py${python.version}-matplotlib \ port:py${python.version}-numpy configure.args --disable-dependency-tracking \ --enable-module \ --without-biosig configure.python \ ${python.bin} use_configure yes build.cmd make build.target destroot.cmd make destroot.destdir \ DESTDIR=${destroot} post-destroot { set docdir ${destroot}${prefix}/share/doc/${subport} xinstall -d ${docdir} xinstall -m 644 ${worksrcpath}/dist/debian/copyright \ ${worksrcpath}/COPYING ${docdir} } variant biosig_external description {Use external biosig library for file I/O.} { depends_lib-append \ port:libbiosig configure.args-replace \ --without-biosig \ --with-biosig2 } # This legacy py-stfio port predates the current CMake provider model. # Prefer the active Stimfit CMake port in dist/macosx/macports/science/stimfit. default_variants +biosig_external } stimfit-0.17.1/dist/macosx/macports/science/000077500000000000000000000000001517235503400207625ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/macports/science/stimfit/000077500000000000000000000000001517235503400224415ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/macports/science/stimfit/Portfile000066400000000000000000000110461517235503400241520ustar00rootroot00000000000000# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup wxWidgets 1.0 PortGroup cmake 1.1 name stimfit version 0.17.1 checksums rmd160 c07ad51c7dddb533aaa1edb544386c2c8875b4b5 \ sha256 c6a5761644d9fb6504a097b9232197a0e65cc6f19afb9162c2e20a39e2efcf84 \ size 20174648 categories science license GPL-2 maintainers {gmx.de:christsc @neurodroid} description Electrophysiology analysis suite long_description A program for viewing and analyzing electrophysiological data homepage http://www.stimfit.org master_sites ${homepage} worksrcdir Stimfit-${version}-Source wxWidgets.use wxWidgets-3.2 depends_build-append \ port:gawk depends_lib port:fftw-3 \ port:hdf5 \ port:${wxWidgets.port} compiler.cxx_standard \ 2017 configure.args -DCMAKE_INSTALL_PREFIX=${applications_dir} \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SUBMODULE \ -DSTF_LAPACK_PROVIDER=AUTO \ -DSTF_BUILD_MODULE=OFF \ -DSTF_BUILD_TESTS=OFF \ -DSTF_MACOS_APP_BUNDLE=ON \ -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} configure.pre_args -S ${worksrcpath} -B ${workpath}/build set python_branches {3.10 3.11 3.12 3.13 3.14} set none_selected 1 foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] if {[variant_isset python${python_version}]} { set none_selected 0 break } } if {$none_selected} { default_variants +python314 } set lapack_none_selected 1 foreach lapack_variant {accelerate openblas atlas} { if {[variant_isset ${lapack_variant}]} { set lapack_none_selected 0 break } } if {$lapack_none_selected} { default_variants +accelerate } foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] set variant_line {variant python${python_version} description "Enable Python ${python_branch} shell"} foreach over ${python_branches} { if {${python_branch} == ${over}} { continue } set over_no_dot [join [lrange [split ${over} .] 0 1] ""] append variant_line " conflicts python${over_no_dot}" } append variant_line { {}} eval $variant_line } foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] if {[variant_isset python${python_version}]} { depends_build-append \ port:swig-python \ port:py${python_version}-setuptools depends_lib-replace \ port:${wxWidgets.port} \ port:py${python_version}-wxpython-4.0 depends_lib-append \ port:python${python_version} \ port:py${python_version}-numpy \ port:py${python_version}-matplotlib configure.args-replace \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_ENABLE_PYTHON=ON configure.args-replace \ -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} \ -DwxWidgets_CONFIG_EXECUTABLE=${frameworks_dir}/Python.framework/Versions/${python_branch}/bin/wx-config configure.args-append \ -DPython3_EXECUTABLE=${prefix}/bin/python${python_branch} } } variant accelerate description {Use Apple Accelerate framework for BLAS/LAPACK} conflicts openblas atlas { configure.args-append \ -DSTF_LAPACK_PROVIDER=ACCELERATE } variant openblas description {Use MacPorts OpenBLAS libraries} conflicts accelerate atlas { depends_lib-append \ port:openblas configure.args-append \ -DSTF_LAPACK_PROVIDER=OPENBLAS } variant atlas description {Use MacPorts ATLAS libraries (legacy provider)} conflicts accelerate openblas { depends_lib-append \ port:atlas configure.args-append \ -DSTF_LAPACK_PROVIDER=LEGACY \ -DBLA_VENDOR=ATLAS } configure.ldflags-append \ -headerpad_max_install_names post-destroot { set docdir ${destroot}${prefix}/share/doc/${name} xinstall -d ${docdir} xinstall -m 644 ${worksrcpath}/dist/macosx/copyright \ ${worksrcpath}/COPYING ${docdir} } stimfit-0.17.1/dist/macosx/macports/science/stimfit/Portfile.in000066400000000000000000000110501517235503400245520ustar00rootroot00000000000000# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 PortGroup wxWidgets 1.0 PortGroup cmake 1.1 name stimfit version STFVERSION checksums rmd160 RMD160 \ sha256 SHA256 \ size SIZE categories science license GPL-2 maintainers {gmx.de:christsc @neurodroid} description Electrophysiology analysis suite long_description A program for viewing and analyzing electrophysiological data homepage http://www.stimfit.org master_sites ${homepage} worksrcdir Stimfit-${version}-Source wxWidgets.use wxWidgets-3.2 depends_build-append \ port:gawk depends_lib port:fftw-3 \ port:hdf5 \ port:${wxWidgets.port} compiler.cxx_standard \ 2017 configure.args -DCMAKE_INSTALL_PREFIX=${applications_dir} \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SUBMODULE \ -DSTF_LAPACK_PROVIDER=AUTO \ -DSTF_BUILD_MODULE=OFF \ -DSTF_BUILD_TESTS=OFF \ -DSTF_MACOS_APP_BUNDLE=ON \ -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} configure.pre_args -S ${worksrcpath} -B ${workpath}/build set python_branches {3.10 3.11 3.12 3.13 3.14} set none_selected 1 foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] if {[variant_isset python${python_version}]} { set none_selected 0 break } } if {$none_selected} { default_variants +python314 } set lapack_none_selected 1 foreach lapack_variant {accelerate openblas atlas} { if {[variant_isset ${lapack_variant}]} { set lapack_none_selected 0 break } } if {$lapack_none_selected} { default_variants +accelerate } foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] set variant_line {variant python${python_version} description "Enable Python ${python_branch} shell"} foreach over ${python_branches} { if {${python_branch} == ${over}} { continue } set over_no_dot [join [lrange [split ${over} .] 0 1] ""] append variant_line " conflicts python${over_no_dot}" } append variant_line { {}} eval $variant_line } foreach python_branch ${python_branches} { set python_version [join [lrange [split ${python_branch} .] 0 1] ""] if {[variant_isset python${python_version}]} { depends_build-append \ port:swig-python \ port:py${python_version}-setuptools \ port:py${python_version}-ipython depends_lib-replace \ port:${wxWidgets.port} \ port:py${python_version}-wxpython-4.0 depends_lib-append \ port:python${python_version} \ port:py${python_version}-numpy \ port:py${python_version}-matplotlib \ port:py${python_version}-ipython configure.args-replace \ -DSTF_ENABLE_PYTHON=OFF \ -DSTF_ENABLE_PYTHON=ON configure.args-replace \ -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} \ -DwxWidgets_CONFIG_EXECUTABLE=${frameworks_dir}/Python.framework/Versions/${python_branch}/bin/wx-config configure.args-append \ -DPython3_EXECUTABLE=${prefix}/bin/python${python_branch} } } variant accelerate description {Use Apple Accelerate framework for BLAS/LAPACK} conflicts openblas atlas { configure.args-append \ -DSTF_LAPACK_PROVIDER=ACCELERATE } variant openblas description {Use MacPorts OpenBLAS libraries} conflicts accelerate atlas { depends_lib-append \ port:openblas configure.args-append \ -DSTF_LAPACK_PROVIDER=OPENBLAS } variant atlas description {Use MacPorts ATLAS libraries (legacy provider)} conflicts accelerate openblas { depends_lib-append \ port:atlas configure.args-append \ -DSTF_LAPACK_PROVIDER=LEGACY \ -DBLA_VENDOR=ATLAS } configure.ldflags-append \ -headerpad_max_install_names post-destroot { set docdir ${destroot}${prefix}/share/doc/${name} xinstall -d ${docdir} xinstall -m 644 ${worksrcpath}/dist/macosx/copyright \ ${worksrcpath}/COPYING ${docdir} } stimfit-0.17.1/dist/macosx/macports/upload_stimfit.in000066400000000000000000000000521517235503400227210ustar00rootroot00000000000000cd StimfitJ put stimfit-STFVERSION.tar.gz stimfit-0.17.1/dist/macosx/scripts/000077500000000000000000000000001517235503400172105ustar00rootroot00000000000000stimfit-0.17.1/dist/macosx/scripts/build-wxpy.sh000077500000000000000000000002401517235503400216470ustar00rootroot00000000000000/usr/bin/python2.6 build-wxpython.py --build_dir=../bld --prefix=/Users/cs/wxbin --osx_cocoa --mac_universal_binary --install --wxpy_installdir=/Users/cs/wxbin stimfit-0.17.1/dist/macosx/scripts/change_deps_macports_release.sh000077500000000000000000000035571517235503400254310ustar00rootroot00000000000000#! /bin/bash WX_CONFIG=/opt/local/bin/wx-config WXPY_DIR=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages mkdir -p stimfit.app mkdir -p stimfit.app/Contents mkdir -p stimfit.app/Contents/Frameworks mkdir -p stimfit.app/Contents/MacOS mkdir -p stimfit.app/Contents/libs cp -v -r ${WXPY_DIR}/wx* ./stimfit.app/Contents/Frameworks chown -R ${USER}:staff stimfit.app make stimfit.app cp -v .libs/stimfit ./stimfit.app/Contents/MacOS/stimfit chmod +x ./stimfit.app/Contents/MacOS/stimfit mkdir -p ./stimfit.app/Contents/Frameworks/stimfit mkdir -p ./stimfit.app/Contents/lib/stimfit cp -v ./src/stimfit/py/.libs/libpystf.dylib ./stimfit.app/Contents/lib/stimfit/libpystf.dylib cp -v ./src/stimfit/.libs/libstimfit.dylib ./stimfit.app/Contents/lib/stimfit/libstimfit.dylib cp -v ./src/libstfio/.libs/libstfio.dylib ./stimfit.app/Contents/lib/stimfit/libstfio.dylib rm -fv ./stimfit.app/Contents/Frameworks/stimfit/_stf.so rm -fv ./stimfit.app/Contents/libs/libpystf.dylib rm -fv ./stimfit.app/Contents/libs/libstimfit.dylib # cp -v ./src/app/.libs/libstimfit.dylib ./stimfit.app/Contents/libs/libstimfit.dylib dylibbundler -of -b -x ./stimfit.app/Contents/MacOS/stimfit -d ./stimfit.app/Contents/libs/ CURDIR=`pwd` cd stimfit.app/Contents/Frameworks/stimfit ln -sf ../../libs/libpystf.dylib _stf.so cd ${CURDIR} if test -n "$1"; then if [ $1 = '1' ]; then find ./stimfit.app -name "*.dylib" -exec dylibbundler -of -b -x '{}' -d ./stimfit.app/Contents/libs/ \; find ./stimfit.app -name "*.so" -exec dylibbundler -of -b -x '{}' -d ./stimfit.app/Contents/libs/ \; fi fi rm -rfv ./stimfit.app/Contents/lib cp -v ../../src/stimfit/py/*.py ./stimfit.app/Contents/Frameworks/stimfit/ cp -v ../../src/pystfio/*.py ./stimfit.app/Contents/Frameworks/stimfit/ if test -n "$1"; then if [ $1 = '1' ]; then rsync -av ./stimfit.app /Applications/ fi fi stimfit-0.17.1/dist/macosx/scripts/change_deps_release.sh000077500000000000000000000065101517235503400235110ustar00rootroot00000000000000#! /bin/bash WX_CONFIG=/Users/cs/wxbin/bin/wx-config # WXPY_DIR=/Users/cs/wxPython-src-2.9.1.1/wxPython # WXPY_VER=wx-2.9.1-osx_cocoa # WXPY_INSTALL_DIR=/Users/cs/wxPython-2.9/dummy-install/lib/python2.5/site-packages mkdir -p stimfit.app mkdir -p stimfit.app/Contents mkdir -p stimfit.app/Contents/Frameworks mkdir -p stimfit.app/Contents/MacOS mkdir -p stimfit.app/Contents/libs cp -v -r /Users/cs/matplotlib-1.0.1/build/lib.macosx-10.7-intel-2.6/* ./stimfit.app/Contents/Frameworks cp -v -r /Users/cs/wxbin/lib/python2.6/site-packages/wx* ./stimfit.app/Contents/Frameworks chown -R cs:staff stimfit.app make stimfit.app cp -v .libs/stimfit ./stimfit.app/Contents/MacOS/stimfit chmod +x ./stimfit.app/Contents/MacOS/stimfit mkdir -p ./stimfit.app/Contents/Frameworks/stimfit # if test -n "$1"; then # if [ $1 = '1' ]; then # rm -rf ./stimfit.app/Contents/Frameworks/numpy* # cp -R /System/Library/Frameworks/Python.framework//Versions/2.6/Extras/lib/python/numpy* ./stimfit.app/Contents/Frameworks/ # rm -rf ./stimfit.app/Contents/Frameworks/wx* # cp -R ${WXPY_INSTALL_DIR}/wx* ./stimfit.app/Contents/Frameworks/ # mkdir -p ./stimfit.app/Contents/Frameworks/${WXPY_VER} # mkdir -p ./stimfit.app/Contents/Frameworks/${WXPY_VER}/wx # rsync -l ${WXPY_INSTALL_DIR}/${WXPY_VER}/wx/*.so ./stimfit.app/Contents/Frameworks/${WXPY_VER}/wx # find ./stimfit.app -name "*.so" -exec dylibbundler -of -b -x '{}' -d ./stimfit.app/Contents/libs/ \; # find ./stimfit.app -name "*.pyc" -exec rm '{}' \; # fi # fi ## # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx*.dylib ./stimfit.app/Contents/libs/ mkdir -p ./stimfit.app/Contents/lib/stimfit cp -v ./src/stimfit/py/.libs/libpystf.dylib ./stimfit.app/Contents/lib/stimfit/libpystf.dylib cp -v ./src/stimfit/.libs/libstimfit.dylib ./stimfit.app/Contents/lib/stimfit/libstimfit.dylib cp -v ./src/libstfio/.libs/libstfio.dylib ./stimfit.app/Contents/lib/stimfit/libstfio.dylib rm -fv ./stimfit.app/Contents/Frameworks/stimfit/_stf.so rm -fv ./stimfit.app/Contents/libs/libpystf.dylib rm -fv ./stimfit.app/Contents/libs/libstimfit.dylib # cp -v ./src/app/.libs/libstimfit.dylib ./stimfit.app/Contents/libs/libstimfit.dylib dylibbundler -of -b -x ./stimfit.app/Contents/MacOS/stimfit -d ./stimfit.app/Contents/libs/ CURDIR=`pwd` cd stimfit.app/Contents/Frameworks/stimfit ln -sf ../../libs/libpystf.dylib _stf.so cd ${CURDIR} if test -n "$1"; then if [ $1 = '1' ]; then find ./stimfit.app -name "*.dylib" -exec dylibbundler -of -b -x '{}' -d ./stimfit.app/Contents/libs/ \; find ./stimfit.app -name "*.so" -exec dylibbundler -of -b -x '{}' -d ./stimfit.app/Contents/libs/ \; fi fi rm -rfv ./stimfit.app/Contents/lib cp -v ../../src/stimfit/py/*.py ./stimfit.app/Contents/Frameworks/stimfit/ cp -v ../../src/pystfio/*.py ./stimfit.app/Contents/Frameworks/stimfit/ # # rm ./stimfit.app/Contents/libs/libwx* # # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx_baseu_net-* ./stimfit.app/Contents/libs/ # # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx_baseu-* ./stimfit.app/Contents/libs/ # # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx_osx_cocoau_adv* ./stimfit.app/Contents/libs/ # # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx_osx_cocoau_aui* ./stimfit.app/Contents/libs/ # # rsync -rtuvl `${WX_CONFIG} --exec-prefix`/lib/libwx_osx_cocoau_core* ./stimfit.app/Contents/libs/ stimfit-0.17.1/dist/macosx/scripts/clean_receipts.sh000077500000000000000000000001701517235503400225250ustar00rootroot00000000000000#! /bin/sh ls /Library/Receipts/astimfit* > /dev/null if [ $? -eq 0 ]; then sudo rm /Library/Receipts/stimfit* fi stimfit-0.17.1/dist/macosx/scripts/conf-wx.sh000077500000000000000000000006521517235503400211330ustar00rootroot00000000000000#! /bin/bash /Users/cs/wxPython-src-2.9.2.4/configure --enable-unicode --with-osx_cocoa --prefix=/Users/cs/wxbin --with-opengl --enable-sound --enable-graphics_ctx --enable-mediactrl --enable-display --enable-geometry --enable-debug_flag --enable-optimise --disable-debugreport --enable-uiactionsim --enable-monolithic --with-macosx-sdk=/Developer/SDKs/MacOSX10.6.sdk --enable-universal_binary --with-macosx-version-min=10.6 stimfit-0.17.1/dist/macosx/scripts/conf_mac_module.sh000077500000000000000000000006341517235503400226640ustar00rootroot00000000000000#! /bin/bash arch_flags="" py_dir="/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/" ../../configure --enable-module --disable-dependency-tracking --prefix=${py_dir}/stfio CPPFLAGS="-DH5_USE_16_API" CFLAGS="" CXXFLAGS="-I/opt/local/include" LDFLAGS="-headerpad_max_install_names -L/opt/local/lib -L/usr/lib" CC=/usr/bin/clang CXX=/usr/bin/clang PYTHON_SITE_PKG=${py_dir} stimfit-0.17.1/dist/macosx/scripts/conf_mac_release.10.4.sh000077500000000000000000000004501517235503400233740ustar00rootroot00000000000000#! /bin/bash ../configure --enable-python --with-wx-config=/Users/Stoffel/wxbin/bin/wx-config CXXFLAGS='-I/Users/Stoffel/wxPython-svn/include -I/opt/local/include' LDFLAGS='-headerpad_max_install_names -L/Users/Stoffel/wxbin/lib -L/opt/local/lib -L/usr/lib -lsz -lz' PYTHON=/opt/local/bin/python stimfit-0.17.1/dist/macosx/scripts/conf_mac_release.sh000077500000000000000000000017111517235503400230140ustar00rootroot00000000000000#! /bin/bash # arch_flags="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" arch_flags="" # -arch i386 -arch x86_64" # ../../configure --enable-python --with-wx-config=/Users/cs/wxbin/bin/wx-config CXX="/usr/bin/g++-4.0" CC="/usr/bin/gcc-4.0" LD="/usr/bin/g++-4.0" CPPFLAGS="-DH5_USE_16_API" CFLAGS="$arch_flags" CXXFLAGS="$arch_flags -I/Users/cs/wxPython-2.9/include -I/opt/local/include" LDFLAGS="$arch_flags -headerpad_max_install_names -L/Users/cs/wxbin/lib -L/opt/local/lib -L/usr/lib" PYTHON=/usr/bin/python2.5 ../../configure --with-wx-config=/Users/cs/wxbin/bin/wx-config --disable-dependency-tracking --prefix=/Users/cs/stimfit/build/release/stimfit.app/Contents CPPFLAGS="-DH5_USE_16_API" CFLAGS="" CXXFLAGS="-I/Users/cs/wxbin/include/wx-2.9 -I/opt/local/include" LDFLAGS="-headerpad_max_install_names -L/Users/cs/wxbin/lib -L/opt/local/lib -L/usr/lib" PYTHON=/usr/bin/python CC=/usr/bin/llvm-gcc-4.2 CXX=/usr/bin/llvm-g++-4.2 stimfit-0.17.1/dist/macosx/scripts/conf_macports_module.sh000077500000000000000000000012211517235503400237450ustar00rootroot00000000000000#! /bin/bash prefix="/opt/local" PYVER=2.7 MYCC=/usr/bin/clang MYCXX=/usr/bin/clang++ MYLD=ld cmake_args="-S ../.. \ -B build-macports-module \ -DSTF_BUILD_MODULE=ON \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SUBMODULE \ -DCMAKE_C_COMPILER=${MYCC} \ -DCMAKE_CXX_COMPILER=${MYCXX} \ -DCMAKE_LINKER=${MYLD} \ -DCMAKE_C_FLAGS=-I${prefix}/include \ -DCMAKE_CXX_FLAGS=-I${prefix}/include \ -DCMAKE_EXE_LINKER_FLAGS=-headerpad_max_install_names\ -L${prefix}/lib" cmake ${cmake_args} -DPython3_EXECUTABLE="${prefix}/bin/python${PYVER}" stimfit-0.17.1/dist/macosx/scripts/conf_macports_release.sh000077500000000000000000000035001517235503400241020ustar00rootroot00000000000000#! /bin/bash prefix="/opt/local" # WX_CONF="${prefix}/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.1/bin/wx-config" # WX_CONF="/Users/cs/wxPython-4.0.7.post2/build/wxbld/wx-config" PYVER="3.13" WX_CONF="${prefix}/Library/Frameworks/Python.framework/Versions/${PYVER}/bin/wx-config" MYCC=`${WX_CONF} --cc` MYCFLAGS=`${WX_CONF} --cflags` MYCFLAGS="${MYCFLAGS} -I${prefix}/include" MYCXX=`${WX_CONF} --cxx` MYCXXFLAGS=`${WX_CONF} --cxxflags` MYCXXFLAGS="${MYCXXFLAGS} -I${prefix}/include" # MYCXXFLAGS="${MYCXXFLAGS} -I${prefix}/include -I${prefix}/Library/Frameworks/Python.framework/Versions/${PYVER}/lib/python${PYVER}/site-packages/wx/include/wxPython/" # MYCXXFLAGS="${MYCXXFLAGS} -I${prefix}/include -I/Users/cs/wxPython-4.0.7.post2//wx/include/wxPython" MYLD=`${WX_CONF} --ld` # MYLDFLAGS=`${WX_CONF} --libs core base aui` MYLDFLAGS=`${WX_CONF} --libs all` # MYLDFLAGS="${MYLDFLAGS} -framework Accelerate" # MYLDFLAGS="-L${prefix}/Library/Frameworks/Python.framework/Versions/${PYVER}/lib/python${PYVER}/site-packages/wx/ -framework IOKit -framework Carbon -framework Cocoa -framework AudioToolbox -framework System -framework OpenGL -lwx_baseu-3.1 -lwx_osx_cocoau_core-3.1 -lwx_osx_cocoau_aui-3.1" MYLDFLAGS="${MYLDFLAGS} -headerpad_max_install_names -L${prefix}/lib" config_args="-S ../.. \ -B build-macports-release \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SUBMODULE \ -DwxWidgets_CONFIG_EXECUTABLE=${WX_CONF}" # --enable-debug" # --with-lapack-lib=" # --enable-debug \ cmake ${config_args} -DCMAKE_C_COMPILER="${MYCC}" -DCMAKE_C_FLAGS="${MYCFLAGS}" -DCMAKE_CXX_COMPILER="${MYCXX}" -DCMAKE_CXX_FLAGS="${MYCXXFLAGS}" -DCMAKE_LINKER="${MYLD}" -DCMAKE_EXE_LINKER_FLAGS="${MYLDFLAGS}" -DPython3_EXECUTABLE="${prefix}/bin/python${PYVER}" stimfit-0.17.1/dist/macosx/scripts/configure-wx.in000066400000000000000000011334221517235503400221630ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. AC_REVISION($Id: configure.in 68970 2011-09-01 19:41:16Z RD $)dnl AC_PREREQ(2.58) dnl --------------------------------------------------------------------------- dnl dnl Top-level configure.in for wxWidgets by Robert Roebling, Phil Blecker, dnl Vadim Zeitlin and Ron Lee dnl dnl This script is under the wxWindows licence. dnl dnl Version: $Id: configure.in 68970 2011-09-01 19:41:16Z RD $ dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl initialization dnl --------------------------------------------------------------------------- AC_INIT([wxWidgets], [2.9.2], [wx-dev@lists.wxwidgets.org]) dnl the file passed to AC_CONFIG_SRCDIR should be specific to our package AC_CONFIG_SRCDIR([wx-config.in]) dnl sets build, host variables and the same with _alias AC_CANONICAL_BUILD AC_CANONICAL_HOST dnl notice that if --host was given but --build was not, cross_compiling is dnl only set to "maybe" and not "yes" and will be either set to "yes" later or dnl configure will exit with error in AC_PROG_CC so don't test for = "yes" here if test "$cross_compiling" != "no"; then HOST_PREFIX="${host_alias}-" HOST_SUFFIX="-$host_alias" else HOST_PREFIX= HOST_SUFFIX= fi dnl When making releases do: dnl dnl wx_release_number += 1 wx_major_version_number=2 wx_minor_version_number=9 wx_release_number=2 wx_subrelease_number=4 WX_RELEASE=$wx_major_version_number.$wx_minor_version_number WX_VERSION=$WX_RELEASE.$wx_release_number WX_SUBVERSION=$WX_VERSION.$wx_subrelease_number WX_MSW_VERSION=$wx_major_version_number$wx_minor_version_number$wx_release_number dnl Autoconf-2.60 changed the meaning of top_builddir variable, so we have dnl to use our own replacement that will work with both 2.5x and 2.60+: wx_top_builddir="`pwd`" AC_SUBST(wx_top_builddir) dnl ------------------------------------------------------------------------ dnl Check platform (host system) dnl ------------------------------------------------------------------------ dnl OS (assume Unix) USE_UNIX=1 USE_OS2=0 USE_WIN32=0 USE_DOS=0 USE_BEOS=0 USE_MAC=0 dnl Unix kind USE_AIX= USE_BSD= dnl any BSD USE_DARWIN= dnl a.k.a. Mac OS X USE_FREEBSD= USE_GNU= dnl GNU/Hurd USE_HPUX= USE_LINUX= USE_NETBSD= USE_OPENBSD= USE_OSF= dnl OSF/1 (obsolete?) USE_SGI= USE_SOLARIS= dnl Solaris ("SunOS" >= 5) USE_SUN= dnl SunOS or Solaris USE_SUNOS= dnl old/real SunOS (obsolete) USE_SVR4= dnl SysV R4 USE_SYSV= dnl any System V USE_VMS= USE_ULTRIX= USE_UNIXWARE= dnl hardware platform USE_ALPHA= dnl on some platforms xxx_r() functions are declared inside "#ifdef dnl _REENTRANT" and it's easier to just define this symbol for these platforms dnl than checking it during run-time NEEDS_D_REENTRANT_FOR_R_FUNCS=0 dnl the list of all available toolkits dnl dnl update NUM_TOOLKITS calculation below when adding a new toolkit here! ALL_TOOLKITS="COCOA GTK OSX_CARBON OSX_COCOA OSX_IPHONE MGL MICROWIN MOTIF MSW PM X11 DFB" dnl NB: these wxUSE_XXX constants have value of 0 or 1 unlike all the other ones dnl which are either yes or no DEFAULT_wxUSE_OLD_COCOA=0 DEFAULT_wxUSE_GTK=0 DEFAULT_wxUSE_OSX_CARBON=0 DEFAULT_wxUSE_OSX_COCOA=0 DEFAULT_wxUSE_OSX_IPHONE=0 DEFAULT_wxUSE_MGL=0 DEFAULT_wxUSE_MICROWIN=0 DEFAULT_wxUSE_MOTIF=0 DEFAULT_wxUSE_MSW=0 DEFAULT_wxUSE_PM=0 DEFAULT_wxUSE_X11=0 DEFAULT_wxUSE_DFB=0 dnl these are the values which are really default for the given platform: dnl they're used if no --with- options were given to detect the dnl toolkit to use by default for the target platform DEFAULT_DEFAULT_wxUSE_OLD_COCOA=0 DEFAULT_DEFAULT_wxUSE_GTK=0 DEFAULT_DEFAULT_wxUSE_OSX_CARBON=0 DEFAULT_DEFAULT_wxUSE_OSX_COCOA=0 DEFAULT_DEFAULT_wxUSE_OSX_IPHONE=0 DEFAULT_DEFAULT_wxUSE_MGL=0 DEFAULT_DEFAULT_wxUSE_MICROWIN=0 DEFAULT_DEFAULT_wxUSE_MOTIF=0 DEFAULT_DEFAULT_wxUSE_MSW=0 DEFAULT_DEFAULT_wxUSE_PM=0 DEFAULT_DEFAULT_wxUSE_X11=0 DEFAULT_DEFAULT_wxUSE_DFB=0 PROGRAM_EXT= SAMPLES_RPATH_FLAG= DYLIB_RPATH_INSTALL= DYLIB_RPATH_POSTLINK= DEFAULT_STD_FLAG=yes dnl to support a new system, you need to add its canonical name (as determined dnl by config.sub or specified by the configure command line) to this "case" dnl and also define the shared library flags below - search for dnl SHARED_LIB_SETUP to find the exact place case "${host}" in *-hp-hpux* ) USE_HPUX=1 DEFAULT_DEFAULT_wxUSE_MOTIF=1 NEEDS_D_REENTRANT_FOR_R_FUNCS=1 AC_DEFINE(__HPUX__) dnl many standard declarations in HP-UX headers are only included if either dnl _HPUX_SOURCE is defined, see stdsyms(5) CPPFLAGS="-D_HPUX_SOURCE $CPPFLAGS" ;; *-*-linux* ) USE_LINUX=1 AC_DEFINE(__LINUX__) TMP=`uname -m` if test "x$TMP" = "xalpha"; then USE_ALPHA=1 AC_DEFINE(__ALPHA__) fi DEFAULT_DEFAULT_wxUSE_GTK=1 ;; *-*-gnu* | *-*-k*bsd*-gnu ) USE_GNU=1 TMP=`uname -m` if test "x$TMP" = "xalpha"; then USE_ALPHA=1 AC_DEFINE(__ALPHA__) fi DEFAULT_DEFAULT_wxUSE_GTK=1 ;; *-*-irix5* | *-*-irix6* ) USE_SGI=1 USE_SVR4=1 AC_DEFINE(__SGI__) AC_DEFINE(__SVR4__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 ;; *-*-qnx*) USE_QNX=1 AC_DEFINE(__QNX__) DEFAULT_DEFAULT_wxUSE_X11=1 ;; *-*-solaris2* ) USE_SUN=1 USE_SOLARIS=1 USE_SVR4=1 AC_DEFINE(__SUN__) AC_DEFINE(__SOLARIS__) AC_DEFINE(__SVR4__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 NEEDS_D_REENTRANT_FOR_R_FUNCS=1 ;; *-*-sunos4* ) USE_SUN=1 USE_SUNOS=1 USE_BSD=1 AC_DEFINE(__SUN__) AC_DEFINE(__SUNOS__) AC_DEFINE(__BSD__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 ;; *-*-freebsd*) USE_BSD=1 USE_FREEBSD=1 AC_DEFINE(__FREEBSD__) AC_DEFINE(__BSD__) DEFAULT_DEFAULT_wxUSE_GTK=1 ;; *-*-openbsd*|*-*-mirbsd*) USE_BSD=1 USE_OPENBSD=1 AC_DEFINE(__OPENBSD__) AC_DEFINE(__BSD__) DEFAULT_DEFAULT_wxUSE_GTK=1 ;; *-*-netbsd*) USE_BSD=1 USE_NETBSD=1 AC_DEFINE(__NETBSD__) AC_DEFINE(__BSD__) DEFAULT_DEFAULT_wxUSE_GTK=1 NEEDS_D_REENTRANT_FOR_R_FUNCS=1 dnl some standard declarations in NetBSD headers are only included if dnl _NETBSD_SOURCE and _LIBC are defined, e.g. getservbyname_r in netdb.h CPPFLAGS="-D_NETBSD_SOURCE -D_LIBC $CPPFLAGS" ;; *-*-osf* ) USE_ALPHA=1 USE_OSF=1 AC_DEFINE(__ALPHA__) AC_DEFINE(__OSF__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 NEEDS_D_REENTRANT_FOR_R_FUNCS=1 ;; *-*-dgux5* ) USE_ALPHA=1 USE_SVR4=1 AC_DEFINE(__ALPHA__) AC_DEFINE(__SVR4__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 ;; *-*-sysv5* ) USE_SYSV=1 USE_SVR4=1 AC_DEFINE(__SYSV__) AC_DEFINE(__SVR4__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 ;; *-*-aix* ) USE_AIX=1 USE_SYSV=1 USE_SVR4=1 AC_DEFINE(__AIX__) AC_DEFINE(__SYSV__) AC_DEFINE(__SVR4__) DEFAULT_DEFAULT_wxUSE_MOTIF=1 ;; *-*-*UnixWare*) USE_SYSV=1 USE_SVR4=1 USE_UNIXWARE=1 AC_DEFINE(__UNIXWARE__) ;; *-*-cygwin* | *-*-mingw32* ) dnl MBN: some of the defines have been moved after toolkit detection dnl because for wxMotif/wxGTK/wxX11 to build on Cygwin dnl USE_UNIX must be set and not USE_WIN32 PROGRAM_EXT=".exe" DEFAULT_DEFAULT_wxUSE_MSW=1 ;; *-pc-msdosdjgpp ) USE_UNIX=0 USE_DOS=1 AC_DEFINE(__DOS__) PROGRAM_EXT=".exe" DEFAULT_DEFAULT_wxUSE_MGL=1 ;; *-pc-os2_emx | *-pc-os2-emx ) AC_DEFINE(__EMX__) USE_OS2=1 AC_DEFINE(__OS2__) PROGRAM_EXT=".exe" DEFAULT_DEFAULT_wxUSE_PM=1 dnl "c++" wrapper is not always available, so always use plain gcc. CXX=gcc LDFLAGS="$LDFLAGS -Zcrtdll" dnl dnl Some special code that's automatically added by autoconf-2.57 for OS/2 dnl and hopefully also by autoconf-2.58 and newer on all other platforms. dnl For now however, we still need it to make sure the configure script dnl works on OS/2 no matter what platform it is generated on. ac_executable_extensions=".exe" export ac_executable_extensions dnl This strange code is necessary to deal with handling of dnl backslashes by ksh and pdksh's sh variant. ac_save_IFS="$IFS" IFS='\\' ac_TEMP_PATH= for ac_dir in $PATH; do IFS=$ac_save_IFS if test -z "$ac_TEMP_PATH"; then ac_TEMP_PATH="$ac_dir" else ac_TEMP_PATH="$ac_TEMP_PATH/$ac_dir" fi done export PATH="$ac_TEMP_PATH" unset ac_TEMP_PATH DEFAULT_STD_FLAG=no ;; arm-apple-darwin*) dnl iPhone USE_BSD=1 USE_DARWIN=1 AC_DEFINE(__BSD__) AC_DEFINE(__DARWIN__) DEFAULT_DEFAULT_wxUSE_OSX_IPHONE=1 ;; *-*-darwin* ) dnl Darwin based distributions (including Mac OS X) USE_BSD=1 USE_DARWIN=1 AC_DEFINE(__BSD__) AC_DEFINE(__DARWIN__) AC_DEFINE(TARGET_CARBON) DEFAULT_DEFAULT_wxUSE_OSX_CARBON=1 ;; *-*-beos* ) dnl leave USE_UNIX on - BeOS is sufficiently Unix-like for this USE_BEOS=1 AC_DEFINE(__BEOS__) ;; *) AC_MSG_WARN([*** System type ${host} is unknown, assuming generic Unix and continuing nevertheless.]) AC_MSG_WARN([*** Please report the build results to wx-dev@lists.wxwidgets.org.]) DEFAULT_DEFAULT_wxUSE_X11=1 DEFAULT_wxUSE_SHARED=no esac dnl --------------------------------------------------------------------------- dnl command line options for configure dnl --------------------------------------------------------------------------- dnl the default values for all options - we collect them all here to simplify dnl modification of the default values (for example, if the defaults for some dnl platform should be changed, it can be done here too) dnl dnl NB: see also DEFAULT_wxUSE variables defined above dnl it's only necessary to list the options which should be disabled by dnl default, all the rest have default value of "yes" (or, rather, of dnl wxUSE_ALL_FEATURES which is the only which has to be set to "yes" by dnl default) DEFAULT_wxUSE_ALL_FEATURES=yes DEFAULT_wxUSE_STD_CONTAINERS=no DEFAULT_wxUSE_STD_IOSTREAM=$DEFAULT_STD_FLAG DEFAULT_wxUSE_STD_STRING=$DEFAULT_STD_FLAG dnl libraries disabled by default DEFAULT_wxUSE_DMALLOC=no DEFAULT_wxUSE_LIBGNOMEVFS=no DEFAULT_wxUSE_LIBHILDON=no DEFAULT_wxUSE_LIBHILDON2=no DEFAULT_wxUSE_LIBMSPACK=no DEFAULT_wxUSE_LIBSDL=no dnl features disabled by default DEFAULT_wxUSE_ACCESSIBILITY=no DEFAULT_wxUSE_IPV6=no DEFAULT_wxUSE_GSTREAMER8=no dnl automatic features DEFAULT_wxUSE_ARTPROVIDER_TANGO=auto DEFAULT_wxUSE_UNICODE_UTF8=auto DEFAULT_wxUSE_OPENGL=auto DEFAULT_wxUSE_MEDIACTRL=auto DEFAULT_wxUSE_COMPILER_TLS=auto DEFAULT_wxUSE_HOTKEY=auto DEFAULT_wxUSE_UNICODE_UTF8_LOCALE=no dnl Mac/Cocoa users need to enable building universal binaries explicitly DEFAULT_wxUSE_UNIVERSAL_BINARY=no DEFAULT_wxUSE_MAC_ARCH=no DEFAULT_wxUSE_OFFICIAL_BUILD=no dnl Applicable only when --with-gtk was used: DEFAULT_wxUSE_GTK2=yes dnl Always default to no. Only special cases require this. DEFAULT_wxUSE_OBJC_UNIQUIFYING=no dnl =========================== dnl deal with configure options dnl =========================== dnl we use several macros here: dnl - AC_ARG_WITH/AC_ARG_ENABLE are the standard autoconf macros, see dnl autoconf manual for details about them dnl - WX_ARG_WITH/WX_ARG_ENABLE are their wx counterparts which perform dnl the caching of the command line options and also use DEFAULT_foo dnl variable as the default value for "foo" if neither --enable-foo nor dnl --disable-foo is specified dnl - WX_ARG_SYS_WITH is a special version of WX_ARG_WITH which allows dnl to choose not only whether an external library is used but also if we dnl use the copy of it included with wxWidgets or an already installed dnl system version dnl - WX_ARG_WITHOUT/WX_ARG_DISABLE mirror WX_ARG_WITH/WX_ARG_ENABLE but dnl should be used for the options which are enabled by default dnl - WX_ARG_FEATURE is a version of WX_ARG_ENABLE which should be used for dnl optional features, i.e. options which should be disabled if dnl --disable-all-features is specified (WX_ARG_WITH/WX_ARG_SYS_WITH are dnl also affected by this) dnl --------------------------------------------------------------------------- dnl global build options dnl --------------------------------------------------------------------------- WX_ARG_DISABLE(gui, [ --disable-gui don't build GUI parts of the library], wxUSE_GUI) WX_ARG_ENABLE(monolithic, [ --enable-monolithic build wxWidgets as single library], wxUSE_MONOLITHIC) WX_ARG_ENABLE(plugins, [ --enable-plugins build parts of wxWidgets as loadable components], wxUSE_PLUGINS) WX_ARG_WITHOUT(subdirs, [ --without-subdirs don't generate makefiles for samples/demos/...], wxWITH_SUBDIRS) AC_ARG_WITH(flavour, [ --with-flavour=NAME specify a name to identify this build], [WX_FLAVOUR="$withval"]) WX_ARG_ENABLE(official_build, [ --enable-official_build official build of wxWidgets (win32 DLL only)], wxUSE_OFFICIAL_BUILD) AC_ARG_ENABLE(vendor, [ --enable-vendor=VENDOR vendor name (win32 DLL only)], [VENDOR="$enableval"]) if test "x$VENDOR" = "x"; then VENDOR="custom" fi WX_ARG_DISABLE(all-features,[ --disable-all-features disable all optional features to build minimal library], wxUSE_ALL_FEATURES) if test "$wxUSE_ALL_FEATURES" = "no"; then dnl this is a bit ugly but currently we have no choice but to manually dnl reset all the options with default value of auto if all features are to dnl be disabled because we can't have an option with default value of dnl "auto-or-no-if-wxUSE_ALL_FEATURES-is-disabled" DEFAULT_wxUSE_ARTPROVIDER_TANGO=no DEFAULT_wxUSE_MEDIACTRL=no fi dnl --------------------------------------------------------------------------- dnl port selection dnl --------------------------------------------------------------------------- if test "$wxUSE_GUI" = "yes"; then WX_ARG_ENABLE(universal, [ --enable-universal use wxWidgets GUI controls instead of native ones], wxUSE_UNIVERSAL) if test "$wxUSE_UNIVERSAL" = "yes"; then AC_ARG_WITH(themes, [ --with-themes=all|list use only the specified comma-separated list of wxUniversal themes], [wxUNIV_THEMES="$withval"]) fi dnl we use AC_ARG_WITH and not WX_ARG_WITH for the toolkit options as they dnl shouldn't default to wxUSE_ALL_FEATURES AC_ARG_WITH(gtk, [[ --with-gtk[=VERSION] use GTK+, VERSION can be 2 (default), 1 or "any"]], [wxUSE_GTK="$withval" CACHE_GTK=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(motif, [ --with-motif use Motif/Lesstif], [wxUSE_MOTIF="$withval" CACHE_MOTIF=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(osx_carbon, [ --with-osx_carbon use Mac OS X (Carbon)], [wxUSE_OSX_CARBON="$withval" CACHE_OSX_CARBON=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(osx_cocoa, [ --with-osx_cocoa use Mac OS X (Cocoa)], [wxUSE_OSX_COCOA="$withval" CACHE_OSX_COCOA=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(osx_iphone, [ --with-osx_iphone use iPhone OS X port], [wxUSE_OSX_IPHONE="$withval" CACHE_OSX_IPHONE=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(osx, [ --with-osx use Mac OS X (default port, currently Carbon)], [wxUSE_OSX_CARBON="$withval" CACHE_OSX_CARBON=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(carbon, [ --with-carbon same as --with-osx_carbon], [wxUSE_OSX_CARBON="$withval" CACHE_OSX_CARBON=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(cocoa, [ --with-cocoa same as --with-osx_cocoa], [wxUSE_OSX_COCOA="$withval" CACHE_OSX_COCOA=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(iphone, [ --with-iphone same as --with-osx_iphone], [wxUSE_OSX_IPHONE="$withval" CACHE_OSX_IPHONE=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(mac, [ --with-mac same as --with-osx], [wxUSE_OSX_CARBON="$withval" CACHE_OSX_CARBON=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(old_cocoa, [ --with-old_cocoa use old, deprecated, Cocoa port], [wxUSE_OLD_COCOA="$withval" CACHE_OLD_COCOA=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(wine, [ --with-wine use Wine], [wxUSE_WINE="$withval" CACHE_WINE=1]) AC_ARG_WITH(msw, [ --with-msw use MS-Windows], [wxUSE_MSW="$withval" CACHE_MSW=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(pm, [ --with-pm use OS/2 Presentation Manager], [wxUSE_PM="$withval" CACHE_PM=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(mgl, [ --with-mgl use SciTech MGL], [wxUSE_MGL="$withval" wxUSE_UNIVERSAL="yes" CACHE_MGL=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(directfb, [ --with-directfb use DirectFB], [wxUSE_DFB="$withval" wxUSE_UNIVERSAL="yes" CACHE_DFB=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(microwin, [ --with-microwin use MicroWindows], [wxUSE_MICROWIN="$withval" CACHE_MICROWIN=1 TOOLKIT_GIVEN=1]) AC_ARG_WITH(x11, [ --with-x11 use X11], [wxUSE_X11="$withval" wxUSE_UNIVERSAL="yes" CACHE_X11=1 TOOLKIT_GIVEN=1]) WX_ARG_ENABLE(nanox, [ --enable-nanox use NanoX], wxUSE_NANOX) AC_ARG_ENABLE(gtk2, [ --disable-gtk2 use GTK+ 1.2 instead of 2.0], [wxUSE_GTK2="$enableval"]) WX_ARG_ENABLE(gpe, [ --enable-gpe use GNOME PDA Environment features if possible], wxUSE_GPE) dnl check that no more than one toolkit is given and that if none are given that dnl we have a default one AC_MSG_CHECKING(for toolkit) # In Wine, we need to default to MSW, not GTK or MOTIF if test "$wxUSE_WINE" = "yes"; then DEFAULT_DEFAULT_wxUSE_GTK=0 DEFAULT_DEFAULT_wxUSE_MOTIF=0 DEFAULT_DEFAULT_wxUSE_MSW=1 wxUSE_SHARED=no CC=${CC:-winegcc} CXX=${CXX:-wineg++} fi if test "$wxUSE_GUI" = "yes"; then if test "$USE_BEOS" = 1; then AC_MSG_ERROR([BeOS GUI is not supported yet, use --disable-gui]) fi if test "$TOOLKIT_GIVEN" = 1; then dnl convert "yes", "any" or a number to 1 and "no" to 0 for toolkit in $ALL_TOOLKITS; do var=wxUSE_$toolkit eval "value=\$${var}" if test "x$value" = "xno"; then eval "$var=0" elif test "x$value" != "x"; then eval "$var=1" fi if test "x$value" != "x" -a "x$value" != "xyes" -a "x$value" != "xno"; then eval "wx${toolkit}_VERSION=$value" fi done else dnl try to guess the most appropriate toolkit for this platform for toolkit in $ALL_TOOLKITS; do var=DEFAULT_DEFAULT_wxUSE_$toolkit eval "wxUSE_$toolkit=\$${var}" done fi dnl we suppose that expr is available (maybe there is a better way to do dnl this? what about using ALL_TOOLKITS? TODO) NUM_TOOLKITS=`expr ${wxUSE_OLD_COCOA:-0} + ${wxUSE_GTK:-0} + ${wxUSE_OSX_CARBON:-0} \ + ${wxUSE_OSX_COCOA:-0} + ${wxUSE_OSX_IPHONE:-0} + ${wxUSE_MGL:-0} + ${wxUSE_DFB:-0} \ + ${wxUSE_MICROWIN:-0} + ${wxUSE_MOTIF:-0} + ${wxUSE_MSW:-0} + ${wxUSE_X11:-0}` dnl Allow wxUSE_PM only for OS/2 with EMX. case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) NUM_TOOLKITS=`expr ${NUM_TOOLKITS} + ${wxUSE_PM:-0}` esac case "$NUM_TOOLKITS" in 1) ;; 0) AC_MSG_ERROR(Please specify a toolkit -- cannot determine the default for ${host}) ;; *) AC_MSG_ERROR(Please specify at most one toolkit) esac # to be removed when --disable-gtk2 isn't needed if test "x$wxUSE_GTK2" = "xyes"; then wxGTK_VERSION=2 wxUSE_GTK1=0 elif test "x$wxUSE_GTK2" = "xno"; then wxGTK_VERSION=1 wxUSE_GTK1=1 fi for toolkit in $ALL_TOOLKITS; do var=wxUSE_$toolkit eval "value=\$${var}" if test "$value" = 1; then toolkit_echo=`echo $toolkit | tr '[[A-Z]]' '[[a-z]]'` AC_MSG_RESULT($toolkit_echo) fi done else if test "x$host_alias" != "x"; then AC_MSG_RESULT(base ($host_alias hosted) only) else AC_MSG_RESULT(base only) fi fi wxUSE_MAC=0 if test "$wxUSE_OSX_CARBON" = 1 \ -o "$wxUSE_OSX_COCOA" = 1 \ -o "$wxUSE_OSX_IPHONE" = 1; then wxUSE_MAC=1 fi dnl --------------------------------------------------------------------------- dnl external libraries dnl --------------------------------------------------------------------------- WX_ARG_SYS_WITH(libpng, [ --with-libpng use libpng (PNG image format)], wxUSE_LIBPNG) WX_ARG_SYS_WITH(libjpeg, [ --with-libjpeg use libjpeg (JPEG file format)], wxUSE_LIBJPEG) WX_ARG_SYS_WITH(libtiff, [ --with-libtiff use libtiff (TIFF file format)], wxUSE_LIBTIFF) WX_ARG_SYS_WITH(libxpm, [ --with-libxpm use libxpm (XPM file format)], wxUSE_LIBXPM) WX_ARG_WITH(libiconv, [ --with-libiconv use libiconv (character conversion)], wxUSE_LIBICONV) WX_ARG_WITH(libmspack, [ --with-libmspack use libmspack (CHM help files loading)], wxUSE_LIBMSPACK) WX_ARG_WITHOUT(gtkprint, [ --without-gtkprint don't use GTK printing support], wxUSE_GTKPRINT) WX_ARG_WITHOUT(gnomeprint, [ --without-gnomeprint don't use GNOME printing libraries], wxUSE_LIBGNOMEPRINT) WX_ARG_WITH(gnomevfs, [ --with-gnomevfs use GNOME VFS for associating MIME types], wxUSE_LIBGNOMEVFS) WX_ARG_WITH(hildon, [ --with-hildon use Hildon framework for Nokia 770/800/810], wxUSE_LIBHILDON) WX_ARG_WITH(opengl, [ --with-opengl use OpenGL (or Mesa)], wxUSE_OPENGL) fi dnl for GUI only WX_ARG_WITH(dmalloc, [ --with-dmalloc use dmalloc library (http://dmalloc.com/)], wxUSE_DMALLOC) WX_ARG_WITH(sdl, [ --with-sdl use SDL for audio on Unix], wxUSE_LIBSDL) WX_ARG_SYS_WITH(regex, [ --with-regex enable support for wxRegEx class], wxUSE_REGEX) WX_ARG_SYS_WITH(zlib, [ --with-zlib use zlib for LZW compression], wxUSE_ZLIB) WX_ARG_SYS_WITH(expat, [ --with-expat enable XML support using expat parser], wxUSE_EXPAT) AC_MSG_CHECKING([for --with-macosx-sdk]) AC_ARG_WITH(macosx-sdk, [ --with-macosx-sdk=PATH use an OS X SDK at PATH], [ wxUSE_MACOSX_SDK=$withval wx_cv_use_macosx_sdk="wxUSE_MACOSX_SDK=$withval" ]) AC_MSG_RESULT([$wxUSE_MACOSX_SDK]) AC_MSG_CHECKING([for --with-macosx-version-min]) AC_ARG_WITH(macosx-version-min, [ --with-macosx-version-min=VER build binaries which require at least this OS X version], [ wxUSE_MACOSX_VERSION_MIN=$withval wx_cv_use_macosx_version_min="wxUSE_MACOSX_VERSION_MIN=$withval" ]) AC_MSG_RESULT([$wxUSE_MACOSX_VERSION_MIN]) dnl --------------------------------------------------------------------------- dnl debugging options dnl --------------------------------------------------------------------------- dnl don't use WX_ARG_ENABLE as it just gets in the way instead of helping with dnl this rather unusual option AC_MSG_CHECKING([for --enable-debug]) AC_ARG_ENABLE(debug, [ --enable-debug build library for debugging], [ if test "$enableval" = yes; then wxUSE_DEBUG=yes elif test "$enableval" = no; then wxUSE_DEBUG=no elif test "$enableval" = max; then wxUSE_DEBUG=yes WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS -DwxDEBUG_LEVEL=2" else AC_MSG_ERROR([Invalid --enable-debug value, must be yes, no or max]) fi ], wxUSE_DEBUG=default ) case "$wxUSE_DEBUG" in yes) dnl build the library for debugging: enable debugging code and generate dnl the debug information for the library itself DEFAULT_wxUSE_DEBUG_FLAG=yes DEFAULT_wxUSE_DEBUG_INFO=yes dnl also disable optimizations by default if --enable-debug was used dnl (this can still be overridden by an explicit --enable-optimise) DEFAULT_wxUSE_OPTIMISE=no ;; no) dnl --disable-debug is equivalent to both --disable-debug_flag and dnl --disable-debug_info DEFAULT_wxUSE_DEBUG_FLAG=no DEFAULT_wxUSE_DEBUG_INFO=no ;; default) dnl the library is built with debugging support by default but without dnl debug information as this requires much, much more disk space DEFAULT_wxUSE_DEBUG_FLAG=yes DEFAULT_wxUSE_DEBUG_INFO=no ;; esac WX_ARG_DISABLE(debug_flag, [ --disable-debug_flag disable all debugging support], wxUSE_DEBUG_FLAG) WX_ARG_ENABLE(debug_info, [ --enable-debug_info generate debug information], wxUSE_DEBUG_INFO) dnl enabled if just --enable-debug_{flag,info} was dnl dnl in any case, only set the default value and allow overriding it with an WX_ARG_ENABLE(debug_gdb, [ --enable-debug_gdb create code with extra GDB debugging information], wxUSE_DEBUG_GDB) WX_ARG_ENABLE(debug_cntxt, [ --enable-debug_cntxt obsolete, don't use: use wxDebugContext], wxUSE_DEBUG_CONTEXT) WX_ARG_ENABLE(mem_tracing, [ --enable-mem_tracing obsolete, don't use: create code with memory tracing], wxUSE_MEM_TRACING) dnl --------------------------------------------------------------------------- dnl global compile options dnl --------------------------------------------------------------------------- WX_ARG_DISABLE(shared, [ --disable-shared create static library instead of shared], wxUSE_SHARED) WX_ARG_ENABLE(stl, [ --enable-stl use standard C++ classes for everything], wxUSE_STL) if test "$wxUSE_STL" = "yes"; then DEFAULT_wxUSE_STD_CONTAINERS=yes DEFAULT_wxUSE_STD_IOSTREAM=yes DEFAULT_wxUSE_STD_STRING=yes fi WX_ARG_ENABLE(std_containers,[ --enable-std_containers use standard C++ container classes], wxUSE_STD_CONTAINERS) WX_ARG_ENABLE(std_iostreams, [ --enable-std_iostreams use standard C++ stream classes], wxUSE_STD_IOSTREAM) WX_ARG_ENABLE(std_string, [ --enable-std_string use standard C++ string classes], wxUSE_STD_STRING) WX_ARG_ENABLE(std_string_conv_in_wxstring, [ --enable-std_string_conv_in_wxstring provide implicit conversion to std::string in wxString], wxUSE_STD_STRING_CONV_IN_WXSTRING) WX_ARG_DISABLE(unicode, [ --disable-unicode compile without Unicode support], wxUSE_UNICODE) WX_ARG_ENABLE(mslu, [ --enable-mslu use MS Layer for Unicode on Windows 9x (Win32 only)], wxUSE_UNICODE_MSLU) WX_ARG_ENABLE_PARAM(utf8, [ --enable-utf8 use UTF-8 representation for strings (Unix only)], wxUSE_UNICODE_UTF8) WX_ARG_ENABLE(utf8only, [ --enable-utf8only only support UTF-8 locales in UTF-8 build (Unix only)], wxUSE_UNICODE_UTF8_LOCALE) WX_ARG_ENABLE(extended_rtti, [ --enable-extended_rtti use extended RTTI (XTI)], wxUSE_EXTENDED_RTTI) if test "$USE_OS2" = 1; then DEFAULT_wxUSE_OMF=no WX_ARG_ENABLE(omf, [ --enable-omf use OMF object format], wxUSE_OMF) fi WX_ARG_DISABLE(optimise, [ --disable-optimise compile without optimisations], wxUSE_OPTIMISE) WX_ARG_ENABLE(profile, [ --enable-profile create code with profiling information], wxUSE_PROFILE) WX_ARG_ENABLE(no_rtti, [ --enable-no_rtti create code without RTTI information], wxUSE_NO_RTTI) WX_ARG_ENABLE(no_exceptions, [ --enable-no_exceptions create code without C++ exceptions handling], wxUSE_NO_EXCEPTIONS) WX_ARG_ENABLE(permissive, [ --enable-permissive compile code disregarding strict ANSI], wxUSE_PERMISSIVE) WX_ARG_ENABLE(no_deps, [ --enable-no_deps create code without dependency information], wxUSE_NO_DEPS) WX_ARG_DISABLE(vararg_macros,[ --disable-vararg_macros don't use vararg macros, even if they are supported], wxUSE_VARARG_MACROS) WX_ARG_ENABLE_PARAM(universal_binary, [[ --enable-universal_binary create universal binary with Mac PPC and i386 (and x86_64 if using Cocoa) architectures ]], wxUSE_UNIVERSAL_BINARY) WX_ARG_ENABLE_PARAM(macosx_arch, [[ --enable-macosx_arch=ARCH build for just the specified architecture]], wxUSE_MAC_ARCH) WX_ARG_ENABLE(compat26, [ --enable-compat26 enable wxWidgets 2.6 compatibility], WXWIN_COMPATIBILITY_2_6) WX_ARG_DISABLE(compat28, [ --disable-compat28 disable wxWidgets 2.8 compatibility], WXWIN_COMPATIBILITY_2_8) WX_ARG_DISABLE(rpath, [ --disable-rpath disable use of rpath for uninstalled builds], wxUSE_RPATH) WX_ARG_ENABLE(objc_uniquifying,[ --enable-objc_uniquifying enable Objective-C class name uniquifying], wxUSE_OBJC_UNIQUIFYING) WX_ARG_DISABLE(visibility, [ --disable-visibility disable use of ELF symbols visibility even if supported], wxUSE_VISIBILITY) WX_ARG_DISABLE(tls, [ --disable-tls disable use of compiler TLS support], wxUSE_COMPILER_TLS) dnl --------------------------------------------------------------------------- dnl optional non GUI features dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(intl, [ --enable-intl use internationalization system], wxUSE_INTL) WX_ARG_FEATURE(xlocale, [ --enable-xlocale use x-locale support (requires wxLocale)], wxUSE_XLOCALE) WX_ARG_FEATURE(config, [ --enable-config use wxConfig (and derived) classes], wxUSE_CONFIG) WX_ARG_FEATURE(protocols, [ --enable-protocols use wxProtocol and derived classes], wxUSE_PROTOCOL) WX_ARG_FEATURE(ftp, [ --enable-ftp use wxFTP (requires wxProtocol], wxUSE_PROTOCOL_FTP) WX_ARG_FEATURE(http, [ --enable-http use wxHTTP (requires wxProtocol], wxUSE_PROTOCOL_HTTP) WX_ARG_FEATURE(fileproto, [ --enable-fileproto use wxFileProto class (requires wxProtocol], wxUSE_PROTOCOL_FILE) WX_ARG_FEATURE(sockets, [ --enable-sockets use socket/network classes], wxUSE_SOCKETS) WX_ARG_FEATURE(ipv6, [ --enable-ipv6 enable IPv6 support in wxSocket], wxUSE_IPV6) WX_ARG_FEATURE(ole, [ --enable-ole use OLE classes (Win32 only)], wxUSE_OLE) WX_ARG_FEATURE(dataobj, [ --enable-dataobj use data object classes], wxUSE_DATAOBJ) WX_ARG_FEATURE(ipc, [ --enable-ipc use interprocess communication (wxSocket etc.)], wxUSE_IPC) WX_ARG_FEATURE(baseevtloop, [ --enable-baseevtloop use event loop in console programs too], wxUSE_CONSOLE_EVENTLOOP) WX_ARG_FEATURE(epollloop, [ --enable-epollloop use wxEpollDispatcher class (Linux only)], wxUSE_EPOLL_DISPATCHER) WX_ARG_FEATURE(selectloop, [ --enable-selectloop use wxSelectDispatcher class], wxUSE_SELECT_DISPATCHER) dnl please keep the settings below in alphabetical order WX_ARG_FEATURE(any, [ --enable-any use wxAny class], wxUSE_ANY) WX_ARG_FEATURE(apple_ieee, [ --enable-apple_ieee use the Apple IEEE codec], wxUSE_APPLE_IEEE) WX_ARG_FEATURE(arcstream, [ --enable-arcstream use wxArchive streams], wxUSE_ARCHIVE_STREAMS) WX_ARG_FEATURE(base64, [ --enable-base64 use base64 encoding/decoding functions], wxUSE_BASE64) WX_ARG_FEATURE(backtrace, [ --enable-backtrace use wxStackWalker class for getting backtraces], wxUSE_STACKWALKER) WX_ARG_FEATURE(catch_segvs, [ --enable-catch_segvs catch signals in wxApp::OnFatalException (Unix only)], wxUSE_ON_FATAL_EXCEPTION) WX_ARG_FEATURE(cmdline, [ --enable-cmdline use wxCmdLineParser class], wxUSE_CMDLINE_PARSER) WX_ARG_FEATURE(datetime, [ --enable-datetime use wxDateTime class], wxUSE_DATETIME) WX_ARG_FEATURE(debugreport, [ --enable-debugreport use wxDebugReport class], wxUSE_DEBUGREPORT) WX_ARG_FEATURE(dialupman, [ --enable-dialupman use dialup network classes], wxUSE_DIALUP_MANAGER) WX_ARG_FEATURE(dynlib, [ --enable-dynlib use wxLibrary class for DLL loading], wxUSE_DYNLIB_CLASS) WX_ARG_FEATURE(dynamicloader, [ --enable-dynamicloader use (new) wxDynamicLibrary class], wxUSE_DYNAMIC_LOADER) WX_ARG_FEATURE(exceptions, [ --enable-exceptions build exception-safe library], wxUSE_EXCEPTIONS) WX_ARG_FEATURE(ffile, [ --enable-ffile use wxFFile class], wxUSE_FFILE) WX_ARG_FEATURE(file, [ --enable-file use wxFile class], wxUSE_FILE) WX_ARG_FEATURE(filehistory, [ --enable-filehistory use wxFileHistory class], wxUSE_FILE_HISTORY) WX_ARG_FEATURE(filesystem, [ --enable-filesystem use virtual file systems classes], wxUSE_FILESYSTEM) WX_ARG_FEATURE(fontenum, [ --enable-fontenum use wxFontEnumerator class], wxUSE_FONTENUM) WX_ARG_FEATURE(fontmap, [ --enable-fontmap use font encodings conversion classes], wxUSE_FONTMAP) WX_ARG_FEATURE(fs_archive, [ --enable-fs_archive use virtual archive filesystems], wxUSE_FS_ARCHIVE) WX_ARG_FEATURE(fs_inet, [ --enable-fs_inet use virtual HTTP/FTP filesystems], wxUSE_FS_INET) WX_ARG_FEATURE(fs_zip, [ --enable-fs_zip now replaced by fs_archive], wxUSE_FS_ZIP) WX_ARG_FEATURE(fswatcher, [ --enable-fswatcher use wxFileSystemWatcher class], wxUSE_FSWATCHER) WX_ARG_FEATURE(geometry, [ --enable-geometry use geometry class], wxUSE_GEOMETRY) WX_ARG_FEATURE(log, [ --enable-log use logging system], wxUSE_LOG) WX_ARG_FEATURE(longlong, [ --enable-longlong use wxLongLong class], wxUSE_LONGLONG) WX_ARG_FEATURE(mimetype, [ --enable-mimetype use wxMimeTypesManager], wxUSE_MIMETYPE) WX_ARG_FEATURE(printfposparam,[ --enable-printfposparam use wxVsnprintf() which supports positional parameters], wxUSE_PRINTF_POS_PARAMS) WX_ARG_FEATURE(snglinst, [ --enable-snglinst use wxSingleInstanceChecker class], wxUSE_SNGLINST_CHECKER) WX_ARG_FEATURE(sound, [ --enable-sound use wxSound class], wxUSE_SOUND) WX_ARG_FEATURE(stdpaths, [ --enable-stdpaths use wxStandardPaths class], wxUSE_STDPATHS) WX_ARG_FEATURE(stopwatch, [ --enable-stopwatch use wxStopWatch class], wxUSE_STOPWATCH) WX_ARG_FEATURE(streams, [ --enable-streams use wxStream etc classes], wxUSE_STREAMS) WX_ARG_FEATURE(sysoptions, [ --enable-sysoptions use wxSystemOptions], wxUSE_SYSTEM_OPTIONS) WX_ARG_FEATURE(tarstream, [ --enable-tarstream use wxTar streams], wxUSE_TARSTREAM) WX_ARG_FEATURE(textbuf, [ --enable-textbuf use wxTextBuffer class], wxUSE_TEXTBUFFER) WX_ARG_FEATURE(textfile, [ --enable-textfile use wxTextFile class], wxUSE_TEXTFILE) WX_ARG_FEATURE(timer, [ --enable-timer use wxTimer class], wxUSE_TIMER) WX_ARG_FEATURE(variant, [ --enable-variant use wxVariant class], wxUSE_VARIANT) WX_ARG_FEATURE(zipstream, [ --enable-zipstream use wxZip streams], wxUSE_ZIPSTREAM) dnl URL-related classes WX_ARG_FEATURE(url, [ --enable-url use wxURL class], wxUSE_URL) WX_ARG_FEATURE(protocol, [ --enable-protocol use wxProtocol class], wxUSE_PROTOCOL) WX_ARG_FEATURE(protocol_http, [ --enable-protocol-http HTTP support in wxProtocol], wxUSE_PROTOCOL_HTTP) WX_ARG_FEATURE(protocol_ftp, [ --enable-protocol-ftp FTP support in wxProtocol], wxUSE_PROTOCOL_FTP) WX_ARG_FEATURE(protocol_file, [ --enable-protocol-file FILE support in wxProtocol], wxUSE_PROTOCOL_FILE) WX_ARG_FEATURE(threads, [ --enable-threads use threads], wxUSE_THREADS) WX_ARG_ENABLE(iniconf, [ --enable-iniconf use wxIniConfig (Win32 only)], wxUSE_INICONF) WX_ARG_FEATURE(regkey, [ --enable-regkey use wxRegKey class (Win32 only)], wxUSE_REGKEY) if test "$wxUSE_GUI" = "yes"; then dnl --------------------------------------------------------------------------- dnl optional "big" GUI features dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(docview, [ --enable-docview use document view architecture], wxUSE_DOC_VIEW_ARCHITECTURE) WX_ARG_FEATURE(help, [ --enable-help use help subsystem], wxUSE_HELP) WX_ARG_FEATURE(mshtmlhelp, [ --enable-mshtmlhelp use MS HTML Help (win32)], wxUSE_MS_HTML_HELP) WX_ARG_FEATURE(html, [ --enable-html use wxHTML sub-library], wxUSE_HTML) WX_ARG_FEATURE(htmlhelp, [ --enable-htmlhelp use wxHTML-based help], wxUSE_WXHTML_HELP) WX_ARG_FEATURE(xrc, [ --enable-xrc use XRC resources sub-library], wxUSE_XRC) WX_ARG_FEATURE(aui, [ --enable-aui use AUI docking library], wxUSE_AUI) WX_ARG_FEATURE(propgrid, [ --enable-propgrid use wxPropertyGrid library], wxUSE_PROPGRID) WX_ARG_FEATURE(ribbon, [ --enable-ribbon use wxRibbon library], wxUSE_RIBBON) WX_ARG_FEATURE(stc, [ --enable-stc use wxStyledTextCtrl library], wxUSE_STC) WX_ARG_FEATURE(constraints, [ --enable-constraints use layout-constraints system], wxUSE_CONSTRAINTS) WX_ARG_FEATURE(loggui, [ --enable-loggui use standard GUI logger], wxUSE_LOGGUI) WX_ARG_FEATURE(logwin, [ --enable-logwin use wxLogWindow], wxUSE_LOGWINDOW) WX_ARG_FEATURE(logdialog, [ --enable-logdialog use wxLogDialog], wxUSE_LOGDIALOG) WX_ARG_FEATURE(mdi, [ --enable-mdi use multiple document interface architecture], wxUSE_MDI) WX_ARG_FEATURE(mdidoc, [ --enable-mdidoc use docview architecture with MDI], wxUSE_MDI_ARCHITECTURE) WX_ARG_FEATURE(mediactrl, [ --enable-mediactrl use wxMediaCtrl class], wxUSE_MEDIACTRL) WX_ARG_FEATURE(gstreamer8, [ --enable-gstreamer8 force GStreamer 0.8 instead of 0.10 with the wxMediaCtrl class on unix], wxUSE_GSTREAMER8) WX_ARG_FEATURE(webkit, [ --enable-webkit use wxWebKitCtrl (Mac)], wxUSE_WEBKIT) WX_ARG_FEATURE(richtext, [ --enable-richtext use wxRichTextCtrl], wxUSE_RICHTEXT) WX_ARG_FEATURE(postscript, [ --enable-postscript use wxPostscriptDC device context (default for gtk+)], wxUSE_POSTSCRIPT) WX_ARG_FEATURE(printarch, [ --enable-printarch use printing architecture], wxUSE_PRINTING_ARCHITECTURE) WX_ARG_FEATURE(svg, [ --enable-svg use wxSVGFileDC device context], wxUSE_SVG) dnl wxDC is implemented in terms of wxGraphicsContext in wxOSX so the latter dnl can't be disabled, don't even provide an option to do it if test "$wxUSE_MAC" != 1; then WX_ARG_FEATURE(graphics_ctx,[ --enable-graphics_ctx use graphics context 2D drawing API], wxUSE_GRAPHICS_CONTEXT) fi dnl --------------------------------------------------------------------------- dnl IPC &c dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(clipboard, [ --enable-clipboard use wxClipboard class], wxUSE_CLIPBOARD) WX_ARG_FEATURE(dnd, [ --enable-dnd use Drag'n'Drop classes], wxUSE_DRAG_AND_DROP) WX_ARG_FEATURE(metafile, [ --enable-metafile use win32 metafiles], wxUSE_METAFILE) dnl --------------------------------------------------------------------------- dnl optional GUI controls (in alphabetical order except the first one) dnl --------------------------------------------------------------------------- dnl don't set DEFAULT_wxUSE_XXX below if the option is not specified DEFAULT_wxUSE_CONTROLS=none WX_ARG_DISABLE(controls, [ --disable-controls disable compilation of all standard controls], wxUSE_CONTROLS) dnl even with --disable-controls, some may be enabled by an explicit dnl --enable- later on the command line -- but by default all will be dnl disabled if test "$wxUSE_CONTROLS" = "no"; then DEFAULT_wxUSE_ACCEL=no DEFAULT_wxUSE_ANIMATIONCTRL=no DEFAULT_wxUSE_BMPBUTTON=no DEFAULT_wxUSE_BUTTON=no DEFAULT_wxUSE_CALCTRL=no DEFAULT_wxUSE_CARET=no DEFAULT_wxUSE_CHECKBOX=no DEFAULT_wxUSE_CHECKLISTBOX=no DEFAULT_wxUSE_CHOICE=no DEFAULT_wxUSE_CHOICEBOOK=no DEFAULT_wxUSE_COLLPANE=no DEFAULT_wxUSE_COLOURPICKERCTRL=no DEFAULT_wxUSE_COMBOBOX=no DEFAULT_wxUSE_COMBOBOX=no DEFAULT_wxUSE_COMMANDLINKBUTTON=no DEFAULT_wxUSE_DATAVIEWCTRL=no DEFAULT_wxUSE_DATEPICKCTRL=no DEFAULT_wxUSE_DETECT_SM=no DEFAULT_wxUSE_DIRPICKERCTRL=no DEFAULT_wxUSE_DISPLAY=no DEFAULT_wxUSE_FILECTRL=no DEFAULT_wxUSE_FILEPICKERCTRL=no DEFAULT_wxUSE_FONTPICKERCTRL=no DEFAULT_wxUSE_GAUGE=no DEFAULT_wxUSE_GRID=no DEFAULT_wxUSE_HEADERCTRL=no DEFAULT_wxUSE_HYPERLINKCTRL=no DEFAULT_wxUSE_IMAGLIST=no DEFAULT_wxUSE_LISTBOOK=no DEFAULT_wxUSE_LISTBOX=no DEFAULT_wxUSE_LISTCTRL=no DEFAULT_wxUSE_MARKUP=no DEFAULT_wxUSE_NOTEBOOK=no DEFAULT_wxUSE_POPUPWIN=no DEFAULT_wxUSE_RADIOBOX=no DEFAULT_wxUSE_RADIOBTN=no DEFAULT_wxUSE_RICHMSGDLG=no DEFAULT_wxUSE_REARRANGECTRL=no DEFAULT_wxUSE_SASH=no DEFAULT_wxUSE_SCROLLBAR=no DEFAULT_wxUSE_SEARCHCTRL=no DEFAULT_wxUSE_SLIDER=no DEFAULT_wxUSE_SPINBTN=no DEFAULT_wxUSE_SPINCTRL=no DEFAULT_wxUSE_SPLITTER=no DEFAULT_wxUSE_STATBMP=no DEFAULT_wxUSE_STATBOX=no DEFAULT_wxUSE_STATLINE=no DEFAULT_wxUSE_STATUSBAR=no DEFAULT_wxUSE_TIPWINDOW=no DEFAULT_wxUSE_TOGGLEBTN=no DEFAULT_wxUSE_TOOLBAR=no DEFAULT_wxUSE_TOOLBAR_NATIVE=no DEFAULT_wxUSE_TOOLBOOK=no DEFAULT_wxUSE_TOOLTIPS=no DEFAULT_wxUSE_TREEBOOK=no DEFAULT_wxUSE_TREECTRL=no fi dnl features affecting multiple controls WX_ARG_FEATURE(markup, [ --enable-markup support wxControl::SetLabelMarkup], wxUSE_MARKUP) dnl please keep the settings below in alphabetical order WX_ARG_FEATURE(accel, [ --enable-accel use accelerators], wxUSE_ACCEL) WX_ARG_FEATURE(animatectrl, [ --enable-animatectrl use wxAnimationCtrl class], wxUSE_ANIMATIONCTRL) WX_ARG_FEATURE(artstd, [ --enable-artstd use standard XPM icons in wxArtProvider], wxUSE_ARTPROVIDER_STD) WX_ARG_FEATURE(arttango, [ --enable-arttango use Tango icons in wxArtProvider], wxUSE_ARTPROVIDER_TANGO) WX_ARG_FEATURE(bmpbutton, [ --enable-bmpbutton use wxBitmapButton class], wxUSE_BMPBUTTON) WX_ARG_FEATURE(bmpcombobox, [ --enable-bmpcombobox use wxBitmapComboBox class], wxUSE_BITMAPCOMBOBOX) WX_ARG_FEATURE(button, [ --enable-button use wxButton class], wxUSE_BUTTON) WX_ARG_FEATURE(calendar, [ --enable-calendar use wxCalendarCtrl class], wxUSE_CALCTRL) WX_ARG_FEATURE(caret, [ --enable-caret use wxCaret class], wxUSE_CARET) WX_ARG_FEATURE(checkbox, [ --enable-checkbox use wxCheckBox class], wxUSE_CHECKBOX) WX_ARG_FEATURE(checklst, [ --enable-checklst use wxCheckListBox (listbox with checkboxes) class], wxUSE_CHECKLST) WX_ARG_FEATURE(choice, [ --enable-choice use wxChoice class], wxUSE_CHOICE) WX_ARG_FEATURE(choicebook, [ --enable-choicebook use wxChoicebook class], wxUSE_CHOICEBOOK) WX_ARG_FEATURE(collpane, [ --enable-collpane use wxCollapsiblePane class], wxUSE_COLLPANE) WX_ARG_FEATURE(colourpicker,[ --enable-colourpicker use wxColourPickerCtrl class], wxUSE_COLOURPICKERCTRL) WX_ARG_FEATURE(combobox, [ --enable-combobox use wxComboBox class], wxUSE_COMBOBOX) WX_ARG_FEATURE(comboctrl, [ --enable-comboctrl use wxComboCtrl class], wxUSE_COMBOCTRL) WX_ARG_FEATURE(commandlinkbutton, [ --enable-commandlinkbutton use wxCommmandLinkButton class], wxUSE_COMMANDLINKBUTTON) WX_ARG_FEATURE(dataviewctrl,[ --enable-dataviewctrl use wxDataViewCtrl class], wxUSE_DATAVIEWCTRL) WX_ARG_FEATURE(datepick, [ --enable-datepick use wxDatePickerCtrl class], wxUSE_DATEPICKCTRL) WX_ARG_FEATURE(detect_sm, [ --enable-detect_sm use code to detect X11 session manager], wxUSE_DETECT_SM) WX_ARG_FEATURE(dirpicker, [ --enable-dirpicker use wxDirPickerCtrl class], wxUSE_DIRPICKERCTRL) WX_ARG_FEATURE(display, [ --enable-display use wxDisplay class], wxUSE_DISPLAY) WX_ARG_FEATURE(editablebox, [ --enable-editablebox use wxEditableListBox class], wxUSE_EDITABLELISTBOX) WX_ARG_FEATURE(filectrl, [ --enable-filectrl use wxFileCtrl class], wxUSE_FILECTRL) WX_ARG_FEATURE(filepicker, [ --enable-filepicker use wxFilePickerCtrl class], wxUSE_FILEPICKERCTRL) WX_ARG_FEATURE(fontpicker, [ --enable-fontpicker use wxFontPickerCtrl class], wxUSE_FONTPICKERCTRL) WX_ARG_FEATURE(gauge, [ --enable-gauge use wxGauge class], wxUSE_GAUGE) WX_ARG_FEATURE(grid, [ --enable-grid use wxGrid class], wxUSE_GRID) WX_ARG_FEATURE(headerctrl, [ --enable-headerctrl use wxHeaderCtrl class], wxUSE_HEADERCTRL) WX_ARG_FEATURE(hyperlink, [ --enable-hyperlink use wxHyperlinkCtrl class], wxUSE_HYPERLINKCTRL) WX_ARG_FEATURE(imaglist, [ --enable-imaglist use wxImageList class], wxUSE_IMAGLIST) WX_ARG_FEATURE(infobar, [ --enable-infobar use wxInfoBar class], wxUSE_INFOBAR) WX_ARG_FEATURE(listbook, [ --enable-listbook use wxListbook class], wxUSE_LISTBOOK) WX_ARG_FEATURE(listbox, [ --enable-listbox use wxListBox class], wxUSE_LISTBOX) WX_ARG_FEATURE(listctrl, [ --enable-listctrl use wxListCtrl class], wxUSE_LISTCTRL) WX_ARG_FEATURE(notebook, [ --enable-notebook use wxNotebook class], wxUSE_NOTEBOOK) WX_ARG_FEATURE(notifmsg, [ --enable-notifmsg use wxNotificationMessage class], wxUSE_NOTIFICATION_MESSAGE) WX_ARG_FEATURE(odcombobox, [ --enable-odcombobox use wxOwnerDrawnComboBox class], wxUSE_ODCOMBOBOX) WX_ARG_FEATURE(popupwin, [ --enable-popupwin use wxPopUpWindow class], wxUSE_POPUPWIN) WX_ARG_FEATURE(radiobox, [ --enable-radiobox use wxRadioBox class], wxUSE_RADIOBOX) WX_ARG_FEATURE(radiobtn, [ --enable-radiobtn use wxRadioButton class], wxUSE_RADIOBTN) WX_ARG_FEATURE(richmsgdlg, [ --enable-richmsgdlg use wxRichMessageDialog class], wxUSE_RICHMSGDLG) WX_ARG_FEATURE(rearrangectrl,[ --enable-rearrangectrl use wxRearrangeList/Ctrl/Dialog], wxUSE_REARRANGECTRL) WX_ARG_FEATURE(sash, [ --enable-sash use wxSashWindow class], wxUSE_SASH) WX_ARG_FEATURE(scrollbar, [ --enable-scrollbar use wxScrollBar class and scrollable windows], wxUSE_SCROLLBAR) WX_ARG_FEATURE(searchctrl, [ --enable-searchctrl use wxSearchCtrl class], wxUSE_SEARCHCTRL) WX_ARG_FEATURE(slider, [ --enable-slider use wxSlider class], wxUSE_SLIDER) WX_ARG_FEATURE(spinbtn, [ --enable-spinbtn use wxSpinButton class], wxUSE_SPINBTN) WX_ARG_FEATURE(spinctrl, [ --enable-spinctrl use wxSpinCtrl class], wxUSE_SPINCTRL) WX_ARG_FEATURE(splitter, [ --enable-splitter use wxSplitterWindow class], wxUSE_SPLITTER) WX_ARG_FEATURE(statbmp, [ --enable-statbmp use wxStaticBitmap class], wxUSE_STATBMP) WX_ARG_FEATURE(statbox, [ --enable-statbox use wxStaticBox class], wxUSE_STATBOX) WX_ARG_FEATURE(statline, [ --enable-statline use wxStaticLine class], wxUSE_STATLINE) WX_ARG_FEATURE(stattext, [ --enable-stattext use wxStaticText class], wxUSE_STATTEXT) WX_ARG_FEATURE(statusbar, [ --enable-statusbar use wxStatusBar class], wxUSE_STATUSBAR) WX_ARG_FEATURE(taskbaricon, [ --enable-taskbaricon use wxTaskBarIcon class], wxUSE_TASKBARICON) WX_ARG_FEATURE(tbarnative, [ --enable-tbarnative use native wxToolBar class], wxUSE_TOOLBAR_NATIVE) WX_ARG_FEATURE(textctrl, [ --enable-textctrl use wxTextCtrl class], wxUSE_TEXTCTRL) WX_ARG_FEATURE(tipwindow, [ --enable-tipwindow use wxTipWindow class], wxUSE_TIPWINDOW) WX_ARG_FEATURE(togglebtn, [ --enable-togglebtn use wxToggleButton class], wxUSE_TOGGLEBTN) WX_ARG_FEATURE(toolbar, [ --enable-toolbar use wxToolBar class], wxUSE_TOOLBAR) WX_ARG_FEATURE(toolbook, [ --enable-toolbook use wxToolbook class], wxUSE_TOOLBOOK) WX_ARG_FEATURE(treebook, [ --enable-treebook use wxTreebook class], wxUSE_TREEBOOK) WX_ARG_FEATURE(treectrl, [ --enable-treectrl use wxTreeCtrl class], wxUSE_TREECTRL) dnl --------------------------------------------------------------------------- dnl common dialogs dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(commondlg, [ --enable-commondlg use all common dialogs], wxUSE_COMMONDLGS) WX_ARG_FEATURE(aboutdlg, [ --enable-aboutdlg use wxAboutBox], wxUSE_ABOUTDLG) WX_ARG_FEATURE(choicedlg, [ --enable-choicedlg use wxChoiceDialog], wxUSE_CHOICEDLG) WX_ARG_FEATURE(coldlg, [ --enable-coldlg use wxColourDialog], wxUSE_COLOURDLG) WX_ARG_FEATURE(filedlg, [ --enable-filedlg use wxFileDialog], wxUSE_FILEDLG) WX_ARG_FEATURE(finddlg, [ --enable-finddlg use wxFindReplaceDialog], wxUSE_FINDREPLDLG) WX_ARG_FEATURE(fontdlg, [ --enable-fontdlg use wxFontDialog], wxUSE_FONTDLG) WX_ARG_FEATURE(dirdlg, [ --enable-dirdlg use wxDirDialog], wxUSE_DIRDLG) WX_ARG_FEATURE(msgdlg, [ --enable-msgdlg use wxMessageDialog], wxUSE_MSGDLG) WX_ARG_FEATURE(numberdlg, [ --enable-numberdlg use wxNumberEntryDialog], wxUSE_NUMBERDLG) WX_ARG_FEATURE(splash, [ --enable-splash use wxSplashScreen], wxUSE_SPLASH) WX_ARG_FEATURE(textdlg, [ --enable-textdlg use wxTextDialog], wxUSE_TEXTDLG) WX_ARG_FEATURE(tipdlg, [ --enable-tipdlg use startup tips], wxUSE_STARTUP_TIPS) WX_ARG_FEATURE(progressdlg, [ --enable-progressdlg use wxProgressDialog], wxUSE_PROGRESSDLG) WX_ARG_FEATURE(wizarddlg, [ --enable-wizarddlg use wxWizard], wxUSE_WIZARDDLG) dnl --------------------------------------------------------------------------- dnl misc GUI options dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(menus, [ --enable-menus use wxMenu/wxMenuBar/wxMenuItem classes], wxUSE_MENUS) WX_ARG_FEATURE(miniframe, [ --enable-miniframe use wxMiniFrame class], wxUSE_MINIFRAME) WX_ARG_FEATURE(tooltips, [ --enable-tooltips use wxToolTip class], wxUSE_TOOLTIPS) WX_ARG_FEATURE(splines, [ --enable-splines use spline drawing code], wxUSE_SPLINES) WX_ARG_FEATURE(mousewheel, [ --enable-mousewheel use mousewheel], wxUSE_MOUSEWHEEL) WX_ARG_FEATURE(validators, [ --enable-validators use wxValidator and derived classes], wxUSE_VALIDATORS) WX_ARG_FEATURE(busyinfo, [ --enable-busyinfo use wxBusyInfo], wxUSE_BUSYINFO) WX_ARG_FEATURE(hotkey, [ --enable-hotkey use wxWindow::RegisterHotKey()], wxUSE_HOTKEY) WX_ARG_FEATURE(joystick, [ --enable-joystick use wxJoystick], wxUSE_JOYSTICK) WX_ARG_FEATURE(metafile, [ --enable-metafiles use wxMetaFile (Win32 only)], wxUSE_METAFILE) WX_ARG_FEATURE(dragimage, [ --enable-dragimage use wxDragImage], wxUSE_DRAGIMAGE) WX_ARG_FEATURE(accessibility,[ --enable-accessibility enable accessibility support], wxUSE_ACCESSIBILITY) WX_ARG_FEATURE(uiactionsim, [ --enable-uiactionsim use wxUIActionSimulator (experimental)], wxUSE_UIACTIONSIMULATOR) WX_ARG_FEATURE(dctransform, [ --enable-dctransform use wxDC::SetTransformMatrix and related], wxUSE_DC_TRANSFORM_MATRIX) dnl --------------------------------------------------------------------------- dnl support for image formats that do not rely on external library dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(palette, [ --enable-palette use wxPalette class], wxUSE_PALETTE) WX_ARG_FEATURE(image, [ --enable-image use wxImage class], wxUSE_IMAGE) WX_ARG_FEATURE(gif, [ --enable-gif use gif images (GIF file format)], wxUSE_GIF) WX_ARG_FEATURE(pcx, [ --enable-pcx use pcx images (PCX file format)], wxUSE_PCX) WX_ARG_FEATURE(tga, [ --enable-tga use tga images (TGA file format)], wxUSE_TGA) WX_ARG_FEATURE(iff, [ --enable-iff use iff images (IFF file format)], wxUSE_IFF) WX_ARG_FEATURE(pnm, [ --enable-pnm use pnm images (PNM file format)], wxUSE_PNM) WX_ARG_FEATURE(xpm, [ --enable-xpm use xpm images (XPM file format)], wxUSE_XPM) WX_ARG_FEATURE(ico_cur, [ --enable-ico_cur use Windows ICO and CUR formats], wxUSE_ICO_CUR) dnl --------------------------------------------------------------------------- dnl wxMSW-only options dnl --------------------------------------------------------------------------- WX_ARG_FEATURE(dccache, [ --enable-dccache cache temporary wxDC objects (Win32 only)], wxUSE_DC_CACHEING) WX_ARG_FEATURE(ps-in-msw, [ --enable-ps-in-msw use PS printing in wxMSW (Win32 only)], wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW) WX_ARG_FEATURE(ownerdrawn, [ --enable-ownerdrawn use owner drawn controls (Win32 and OS/2 only)], wxUSE_OWNER_DRAWN) WX_ARG_FEATURE(uxtheme, [ --enable-uxtheme enable support for Windows XP themed look (Win32 only)], wxUSE_UXTHEME) WX_ARG_FEATURE(wxdib, [ --enable-wxdib use wxDIB class (Win32 only)], wxUSE_DIB) dnl this one is not really MSW-specific but it exists mainly to be turned off dnl under MSW, it should be off by default on the other platforms if test "$wxUSE_MSW" != 1; then DEFAULT_wxUSE_AUTOID_MANAGEMENT=no fi WX_ARG_FEATURE(autoidman, [ --enable-autoidman use automatic ids management], wxUSE_AUTOID_MANAGEMENT) fi dnl for GUI only dnl --------------------------------------------------------------------------- dnl Checks for programs dnl --------------------------------------------------------------------------- dnl flush the cache because checking for programs might abort AC_CACHE_SAVE dnl C-compiler checks dnl defines CC with the compiler to use dnl defines GCC with yes if using gcc dnl defines GCC empty if not using gcc dnl defines CFLAGS dnl dnl this magic incantation is needed to prevent AC_PROG_CC from setting the dnl default CFLAGS (something like "-g -O2") -- we don't need this as we add dnl (if not already present in C*FLAGS) the -g and -O flags ourselves below CFLAGS=${CFLAGS:=} AC_BAKEFILE_PROG_CC dnl is -traditional needed for correct compilations dnl adds -traditional for gcc if needed AC_PROG_GCC_TRADITIONAL dnl C++-compiler checks dnl defines CXX with the compiler to use dnl defines GXX with yes if using gxx dnl defines GXX empty if not using gxx dnl defines CXXFLAGS dnl dnl see CFLAGS line above CXXFLAGS=${CXXFLAGS:=} AC_BAKEFILE_PROG_CXX dnl configure always sets CXX to something as it falls back to g++ even if no dnl C++ compiler was found, but we prefer to abort now with a clear error dnl message rather than give errors about all tests failures below if test "$CXX" = "g++" -a "$GXX" != "yes"; then AC_MSG_ERROR([C++ compiler is needed to build wxWidgets]) fi dnl ar command dnl defines AR with the appropriate command dnl dnl For Sun CC AC_BAKEFILE below sets AR to the compiler itself. if test "x$SUNCXX" != xyes; then AC_CHECK_TOOL(AR, ar) if test "x$AR" = "x" ; then AC_MSG_ERROR([ar is needed to build wxWidgets]) fi fi dnl --------------------------------------------------------------------------- dnl Mac-specific SDK/architectures checks dnl --------------------------------------------------------------------------- if test "$wxUSE_MAC" = 1; then retest_macosx_linking=no OSX_ARCH_OPTS="" if test "x$wxUSE_MAC_ARCH" != xno; then OSX_ARCH_OPTS="-arch $wxUSE_MAC_ARCH" fi dnl Support the old --enable-universal_binary in case anyone was using it. if test "x$wxUSE_UNIVERSAL_BINARY" != xno ; then dnl --enable-universal_binary uses a default SDK (currently 10.4u) dnl --enable-universal_binary=SDK names a path to an SDK if test "x$wxUSE_UNIVERSAL_BINARY" == xyes; then # Implicitly turn on the new --with-macosx-sdk using the default # SDK which provides the behaviour this option has always had. if test "x$wxUSE_MACOSX_SDK" = "x"; then AC_MSG_WARN([Enabling default SDK due to --enable-universal_binary.]) AC_MSG_WARN([If you don't want this, specify --without-macosx-sdk]) wxUSE_MACOSX_SDK=yes fi else # Complain to user if he specified an argument to --enable-universal_binary # and also 1) specified --with-macosx-sdk using the default (yes) or # 2) specified --with-macosx-sdk using a path or 3) specified # --without-macosx-sdk (no). if test "x$wxUSE_MACOSX_SDK" != "x" ; then AC_MSG_FAILURE([Please specify the new --with-macosx-sdk=PATH and do not specify an arg to --enable-universal_binary]) else # Put the SDK path into the wxUSE_MACOSX_SDK. We don't have to # special-case the empty string because the below test simply # converts "no" to the empty string anyway. wxUSE_MACOSX_SDK="$wxUSE_UNIVERSAL_BINARY" dnl Warn about deprecated usage. AC_MSG_WARN([Please use --with-macosx-sdk=PATH and --enable-universal_binary without an argument]) fi fi dnl FIXME: I think it would be better to put this into CC, CXX, and LD rather than the flags. OSX_ARCH_OPTS="-arch ppc -arch i386" if test "$wxUSE_OSX_COCOA" = 1; then OSX_ARCH_OPTS="-arch i386 -arch x86_64" fi AC_MSG_CHECKING([for universal binary architectures]) AC_MSG_RESULT([$OSX_ARCH_OPTS]) dnl NOTE: Only the compiler driver needs arch flags. The link editor dnl is incapable of using them but the compiler driver (which we use dnl as LD when building dynamic libraries) uses them to invoke the dnl real ld multiple times. If we moved to libtool -dynamic we would dnl need no arch flags because libtool automatically invokes ld for dnl every architecture found in the fat input files. dnl dnl For static library builds, AR/RANLIB automatically create proper dnl fat archives although AR is unable to update them once RANLIB has dnl made them into proper fat archives. Fortunately, our link process dnl simply removes the .a file before using ar to create a new one. dnl If we did move to libtool -static we still wouldn't need arch flags dnl because libtool automatically figures it out based on input. retest_macosx_linking=yes dnl HACK: PCH could be made to work by precompiling for each architecture into separate directories dnl and including all architecture directories with each compiler invocation. dnl That would require a major rework of Bakefile and at the same time it would be nice to have dnl Objective-C++ precompiled headers. AC_MSG_WARN([Disabling precompiled headers due to universal binary build.]) bk_use_pch=no fi CXXFLAGS="$OSX_ARCH_OPTS $CXXFLAGS" CFLAGS="$OSX_ARCH_OPTS $CFLAGS" OBJCXXFLAGS="$OSX_ARCH_OPTS $OBJCXXFLAGS" OBJCFLAGS="$OSX_ARCH_OPTS $OBJCFLAGS" LDFLAGS="$OSX_ARCH_OPTS $LDFLAGS" dnl Set up the Mac OS X SDK. We do this early so configure tests will occur dnl with the SDK in place. dnl NOTE: We clobber wxUSE_MACOSX_SDK with the SDK path if test "x$wxUSE_MACOSX_SDK" = "xno"; then wxUSE_MACOSX_SDK= elif test "x$wxUSE_MACOSX_SDK" = "xyes"; then # TODO: Search for most recent SDK and use it. wxUSE_MACOSX_SDK="/Developer/SDKs/MacOSX10.4u.sdk" fi if test "x$wxUSE_MACOSX_SDK" != "x"; then AC_MSG_CHECKING([for SDK directory $wxUSE_MACOSX_SDK]) if ! test -d "$wxUSE_MACOSX_SDK"; then AC_MSG_FAILURE([not found]) else AC_MSG_RESULT([exists]) fi dnl CC and CXX will have these flags added below, after the compiler has been chosen MACOSX_SDK_OPTS="-isysroot $wxUSE_MACOSX_SDK" retest_macosx_linking=yes dnl NOTE: When libtool is used in lieu of AR/RANLIB (i.e. in static mode) dnl the syslibroot makes no difference. We aren't using libtool now but dnl if we ever did, be aware that you don't need to worry about it. fi dnl Set up the deployment target dnl No : Don't specify a min version even if using an SDK dnl Yes : Use the version from the SDK if used, otherwise same as no dnl Param: Use the specified version if test "x$wxUSE_MACOSX_VERSION_MIN" = "xno"; then wxUSE_MACOSX_VERSION_MIN= elif test "x$wxUSE_MACOSX_VERSION_MIN" = "xyes"; then if test "x$wxUSE_MACOSX_SDK" != "x"; then AC_MSG_CHECKING([SDK deployment version]) dnl We need to quote the next line where we don't need macros and do need [] in the regex [ MACOSX_SDK_PLIST_VERSION_MIN=`defaults read "$wxUSE_MACOSX_SDK/SDKSettings" buildSettings | grep '^ *"\{0,1\}MACOSX_DEPLOYMENT_TARGET"\{0,1\} *= *"\{0,1\}[^"]*"\{0,1\}; *$' | sed 's/^ *"\{0,1\}MACOSX_DEPLOYMENT_TARGET"\{0,1\} *= *"\{0,1\}\([^"]*\)"\{0,1\} *; *$/\1/'` ] # If that failed, try again with the new key if test "x$MACOSX_SDK_PLIST_VERSION_MIN" == "x"; then [ MACOSX_SDK_PLIST_VERSION_MIN=`defaults read "$wxUSE_MACOSX_SDK/SDKSettings" DefaultProperties | grep '^ *"\{0,1\}MACOSX_DEPLOYMENT_TARGET"\{0,1\} *= *"\{0,1\}[^"]*"\{0,1\}; *$' | sed 's/^ *"\{0,1\}MACOSX_DEPLOYMENT_TARGET"\{0,1\} *= *"\{0,1\}\([^"]*\)"\{0,1\} *; *$/\1/'` ] fi if test "x$MACOSX_SDK_PLIST_VERSION_MIN" != "x"; then wxUSE_MACOSX_VERSION_MIN=$MACOSX_SDK_PLIST_VERSION_MIN AC_MSG_RESULT([$wxUSE_MACOSX_VERSION_MIN]) else AC_MSG_WARN([Could not determine deployment target from SDKSettings.plist]) wxUSE_MACOSX_VERSION_MIN= fi else wxUSE_MACOSX_VERSION_MIN= fi elif test "x$wxUSE_MACOSX_VERSION_MIN" = "x"; then AC_CHECK_PROGS(OSX_SW_VERS, sw_vers) if test "$OSX_SW_VERS" != ""; then OSX_VERSION=`sw_vers -productVersion | grep 10.[[0-9]]` else dnl can't determine it (happens e.g. when cross-compiling) so use a dnl conservative default AC_MSG_WARN([Assuming OS X 10.4, use --with-macosx-version-min to override.]) OSX_VERSION="10.4" fi case "$OSX_VERSION" in 10.4* ) wxUSE_MACOSX_VERSION_MIN=10.4 ;; * ) if test "$wxUSE_OSX_CARBON" = 1; then # otherwise configure stops on leopard for universal_binary wxUSE_MACOSX_VERSION_MIN=10.4 else # for Cocoa, use 10.5 to be able to compile it in 64 bits too wxUSE_MACOSX_VERSION_MIN=10.5 fi ;; esac fi NEEDS_GCC40="no" if test "x$wxUSE_MACOSX_VERSION_MIN" == "x10.4"; then NEEDS_GCC40="yes" fi if test "$wxUSE_OSX_CARBON" = 1; then NEEDS_GCC40="yes" fi if test "x$NEEDS_GCC40" == "xyes"; then # gcc 4.2 cannot compile 10.4 compatible code, so if the user is using it # and wants 10.4 compatible code, then 'downgrade' to 4.0 # This is also the simplest way to get 32-bit binaries on Snow Leopard. if test "x$CC" = "xgcc"; then CCVERSION=`$CC --version | grep 4.[[2-9]].` if test "x$CCVERSION" != "x"; then echo "$as_me:$LINENO: WARNING: gcc >= 4.2 cannot compile 10.4 compatible code. Using gcc 4.0 instead." CC="gcc-4.0" fi fi if test "x$CXX" = "xg++"; then CCVERSION=`$CXX --version | grep 4.[[2-9]].` if test "x$CCVERSION" != "x"; then CXX="g++-4.0" fi fi fi if test "x$MACOSX_SDK_OPTS" != "x"; then eval "CC=\"$CC $MACOSX_SDK_OPTS\"" eval "CXX=\"$CXX $MACOSX_SDK_OPTS\"" eval "LD=\"$LD $MACOSX_SDK_OPTS\"" fi if test "x$wxUSE_MACOSX_VERSION_MIN" != "x"; then if test "$wxUSE_OSX_IPHONE" = 1; then MACOSX_VERSION_MIN_OPTS="-miphoneos-version-min=$wxUSE_MACOSX_VERSION_MIN" else MACOSX_VERSION_MIN_OPTS="-mmacosx-version-min=$wxUSE_MACOSX_VERSION_MIN" fi eval "CC=\"$CC $MACOSX_VERSION_MIN_OPTS\"" eval "CXX=\"$CXX $MACOSX_VERSION_MIN_OPTS\"" eval "LD=\"$LD $MACOSX_VERSION_MIN_OPTS\"" retest_macosx_linking=yes fi dnl If either an SDK or a version option was added, make sure that we can dnl still compile and link both C and C++. If we didn't do this, then most dnl of the remaining tests would fail. if test "x$retest_macosx_linking" = "xyes"; then AC_LANG_PUSH(C) AC_MSG_CHECKING([if C compiler works with SDK/version options]) AC_TRY_LINK([],[],[AC_MSG_RESULT([yes])],[AC_MSG_FAILURE([no. Try a different SDK]); exit 1]) AC_LANG_POP() AC_LANG_PUSH(C++) AC_MSG_CHECKING([if C++ compiler works with SDK/version options]) AC_TRY_LINK([],[],[AC_MSG_RESULT([yes])],[AC_MSG_FAILURE([no. Try a different SDK]); exit 1]) AC_LANG_POP() fi fi dnl wxUSE_MAC case "${host}" in dnl The other BSD's should probably go in here too, since this is dnl to workaround a strange static lib BSDism. dnl Mac OS X install seems to ignore -p option... *-*-darwin* ) INSTALL_PROGRAM="cp -fp" INSTALL_DATA="cp -fp" ;; *) ;; esac dnl ------------------------------------------------------------------------ dnl Platform specific tests dnl ------------------------------------------------------------------------ dnl xlC needs -qunique under AIX so that one source file can be dnl compiled to multiple object files and safely linked together. if test "x$XLCXX" = "xyes" -a "x$USE_AIX" = "x1"; then CXXFLAGS="-qunique $CXXFLAGS" fi dnl This case is for PowerPC OS X vs. everything else case "${host}" in powerpc-*-darwin* ) AC_MSG_CHECKING([if __POWERPC__ is already defined]) AC_TRY_COMPILE([],[#ifndef __POWERPC__ choke me for lack of PowerPC #endif ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_DEFINE(__POWERPC__) ]) ;; esac dnl This case is for OS X vs. everything else case "${host}" in *-*-darwin* ) AC_MSG_CHECKING([if CoreFoundation/CFBase.h is usable]) AC_TRY_COMPILE([#include ],[], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_CHECKING([if __CF_USE_FRAMEWORK_INCLUDES__ is required]) AC_TRY_COMPILE([#define __CF_USE_FRAMEWORK_INCLUDES__ #include ],[], [AC_MSG_RESULT([yes]) dnl We must use -D so source files that don't include wx/setup.h dnl but do include CFBase will work. CPPFLAGS="-D__CF_USE_FRAMEWORK_INCLUDES__ $CPPFLAGS"], [AC_MSG_FAILURE([no. CoreFoundation not available.])] ) ] ) ;; esac dnl Determine whether we want to use Cygwin as Windows or POSIX platform: the dnl latter makes more sense for wxGTK/Motif/X11 ports wants_win32=0 doesnt_want_win32=0 case "${host}" in *-*-cygwin*) if test "$wxUSE_MSW" = 1 ; then wants_win32=1 else dnl when we use cygwin compiler with -mno-cygwin option it uses mingw32 dnl headers and libraries, so it's Windows-like in this case AC_CACHE_CHECK([if -mno-cygwin is in effect], wx_cv_nocygwin, [ AC_TRY_COMPILE( [], [ #ifdef __MINGW32__ choke me #endif ], wx_cv_nocygwin=no, wx_cv_nocygwin=yes ) ] ) if test "$wx_cv_nocygwin" = "yes"; then wants_win32=1 else doesnt_want_win32=1 fi fi if test "$wants_win32" = 1 ; then BAKEFILE_FORCE_PLATFORM=win32 fi ;; *-*-mingw*) wants_win32=1 ;; esac if test "$wxUSE_WINE" = "yes"; then wants_win32=1 LDFLAGS_GUI="-mwindows" fi dnl NB: The two tests below are *NOT* mutually exclusive! They should only dnl take effect on Cygwin/Mingw and not other platforms. if test "$wants_win32" = 1 ; then USE_UNIX=0 USE_WIN32=1 AC_DEFINE(__WIN32__) AC_DEFINE(__WIN95__) AC_DEFINE(__WINDOWS__) AC_DEFINE(__GNUWIN32__) AC_DEFINE(STRICT) fi if test "$doesnt_want_win32" = 1 ; then USE_UNIX=1 USE_WIN32=0 fi dnl (end of Windows-only piece) if test "$USE_UNIX" = 1 ; then wxUSE_UNIX=yes AC_DEFINE(__UNIX__) fi dnl This case is for OS/2 vs. everything else case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) dnl --------------------------------------------------------------------- dnl When we are using gcc on OS/2, we want to be either using resources dnl (PM) or a more complete POSIX emulation for Motif/GTK+/X11. dnl Moreover we need to link explicitly against either stdcpp.a or dnl stdcxx.a (depending on compiler version), since we are using "gcc", dnl not "g++/c++". dnl --------------------------------------------------------------------- dnl (OS/2-only piece) if test "$wxUSE_MOTIF" = 1 -o "$wxUSE_GTK" = 1 -o "$wxUSE_X11" = 1; then dnl More complete Unix emulation for unix-like ports dnl by linking in POSIX/2's cExt (if available). AC_CHECK_LIB(cExt, drand48, LIBS="$LIBS -lcExt") else dnl Include resources for the "native" port (wxPM). RESPROGRAMOBJ="\${top_srcdir}/include/wx/os2/wx.res" fi dnl Check for the gcc version (and thereby for the C runtime library). dnl wx_cv_gccversion = EMX2 -> Standard EMX environment dnl wx_cv_gccversion = EMX3 -> EMX with gcc-3.0.3 or gcc-3.2.1 dnl wx_cv_gccversion = Innotek5 -> gcc-3.2.2 with Innotek libc5 dnl wx_cv_gccversion = Innotek6 -> gcc-3.3.5 with Innotek libc6. AC_CACHE_CHECK([for gcc/libc version], wx_cv_gccversion,[ AC_TRY_RUN( dnl Check the gcc version macro. [ #include int main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, #if (__GNUC__ < 3) "EMX2" #elif (__GNUC__==3) && ((__GNUC_MINOR__ < 2) || ((__GNUC_MINOR__==2) && (__GNUC_PATCHLEVEL__<2))) "EMX3" #elif (__GNUC__==3) && (__GNUC_MINOR__==2) && (__GNUC_PATCHLEVEL__==2) "Innotek5" #else "Innotek6" #endif ); exit(0); } ], wx_cv_gccversion=`cat conftestval`, wx_cv_gccversion="EMX2", dnl Compilation error: Assuming standard EMX environment wx_cv_gccversion="EMX2" ) ]) if test "$wx_cv_gccversion" = "EMX2"; then LIBS="$LIBS -lstdcpp" LDFLAGS="$LDFLAGS -Zsysv-signals" else if test "$wx_cv_gccversion" = "EMX3"; then LIBS="$LIBS -lstdcxx -lgcc" LDFLAGS="$LDFLAGS -Zsysv-signals" else LIBS="$LIBS -lstdc++" fi fi if test "$wxUSE_SHARED" = "yes" -a "$wxUSE_OMF" = "no"; then AC_MSG_WARN([Building DLLs requires OMF mode, enabled]) wxUSE_OMF=yes enable_omf=yes fi dnl (end of OS/2-only piece) ;; *) dnl --------------------------------------------------------------------- dnl look for strcasecmp() in string.h and then strings.h if it's not dnl there. Don't do this on OS/2, where "stricmp" is the function to be dnl used. dnl --------------------------------------------------------------------- dnl (non-OS/2-only piece) AC_CACHE_CHECK([for strcasecmp() in string.h], ac_cv_string_strcasecmp, [ AC_TRY_LINK([ #include ], [ strcasecmp("foo", "bar"); ], ac_cv_string_strcasecmp=yes, ac_cv_string_strcasecmp=no ) ]) if test x"$ac_cv_string_strcasecmp" = "xyes"; then AC_DEFINE(HAVE_STRCASECMP_IN_STRING_H) else AC_CACHE_CHECK([for strcasecmp() in strings.h], ac_cv_strings_strcasecmp, [ AC_TRY_LINK([ #include ], [ strcasecmp("foo", "bar"); ], ac_cv_strings_strcasecmp=yes, ac_cv_strings_strcasecmp=no ) ]) if test x"$ac_cv_strings_strcasecmp" = "xyes"; then AC_DEFINE(HAVE_STRCASECMP_IN_STRINGS_H) else AC_MSG_ERROR([No case-insensitive string comparison function found.]) fi fi dnl (end of non-OS/2-only piece) ;; esac dnl ------------------------------------------------------------------------ dnl Check for headers dnl ------------------------------------------------------------------------ dnl Note: non-empty last parameter makes check compile-only, dnl skipping worthless preprocessing check AC_CHECK_HEADERS(langinfo.h wchar.h,,, [AC_INCLUDES_DEFAULT]) dnl maybe wchar_t is in wcstr.h if we don't have wchar.h? if test "$ac_cv_header_wchar_h" != "yes"; then AC_CHECK_HEADERS([wcstr.h],,, [AC_INCLUDES_DEFAULT()]) fi case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) dnl Explicitly link -lintl if langinfo.h is available dnl and intl not yet included in libc if test $ac_cv_header_langinfo_h = "yes" \ -a \( "$wx_cv_gccversion" = "EMX2" \ -o "$wx_cv_gccversion" = "EMX3" \ -o "$wx_cv_gccversion" = "Innotek5" \); then LIBS="$LIBS -lintl" fi ;; esac dnl POSIX needs this for select(), but old systems don't have it if test "$USE_UNIX" = 1 ; then AC_CHECK_HEADERS([sys/select.h],,, [AC_INCLUDES_DEFAULT()]) fi dnl --------------------------------------------------------------------------- dnl Checks for compiler characteristics dnl --------------------------------------------------------------------------- dnl defines const to be empty if c-compiler does not support const fully AC_C_CONST dnl defines inline to a sensible value for the c-compiler AC_C_INLINE dnl check the sizes of integral types (give some reasonable default values for dnl cross-compiling) dnl defines the size of certain types of variables in SIZEOF_ AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(void *, 4) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) AC_CHECK_SIZEOF(size_t, 4) case "${host}" in arm-*-linux* ) AC_CHECK_SIZEOF(long long, 8) ;; *-hp-hpux* ) AC_CHECK_SIZEOF(long long, 0) if test "$ac_cv_sizeof_long_long" != 0; then dnl HPUX 10.20 headers need this define in order to use long long definitions CPPFLAGS="-D_INCLUDE_LONGLONG $CPPFLAGS" fi ;; * ) AC_CHECK_SIZEOF(long long, 0) esac dnl SGI/Irix's stdio.h does not include wchar_t. Mac OS X does not provide dnl wchar.h and wchar_t is defined by stdlib.h (GD) AC_CHECK_SIZEOF(wchar_t, 0, [ /* DJGPP's wchar_t is now a keyword in C++ (still not C though) */ #if defined(__DJGPP__) && !( (__GNUC_MINOR__ >= 8 && __GNUC__ == 2 ) || __GNUC__ >= 3 ) # error "fake wchar_t" #endif #ifdef HAVE_WCHAR_H # ifdef __CYGWIN__ # include # endif # include #endif #ifdef HAVE_STDLIB_H # include #endif #include ] ) if test "$ac_cv_sizeof_wchar_t" = 0; then AC_MSG_ERROR([wxWidgets requires wchar_t support.]) fi AC_DEFINE(wxUSE_WCHAR_T) dnl checks needed to define wxVaCopy AC_CACHE_CHECK([for va_copy], wx_cv_func_va_copy, [ AC_LANG_PUSH(C++) AC_LINK_IFELSE([ #include void foo(char *f, ...) { va_list ap1, ap2; va_start(ap1, f); va_copy(ap2, ap1); va_end(ap2); va_end(ap1); } int main() { foo("hi", 17); return 0; }], wx_cv_func_va_copy=yes, wx_cv_func_va_copy=no ) AC_LANG_POP() ] ) if test $wx_cv_func_va_copy = "yes"; then AC_DEFINE(HAVE_VA_COPY) else dnl try to understand how can we copy va_lists AC_CACHE_CHECK([if va_list can be copied by value], wx_cv_type_va_list_lvalue, [ AC_RUN_IFELSE([ #include int foo(char *f, ...) { va_list ap1, ap2; va_start(ap1, f); ap2 = ap1; if ( va_arg(ap1, int) != 17 || va_arg(ap2, int) != 17 ) return 1; va_end(ap2); va_end(ap1); return 0; } int main() { return foo("hi", 17); }], wx_cv_type_va_list_lvalue=yes, wx_cv_type_va_list_lvalue=no, dnl assume most common case for cross-compiling... wx_cv_type_va_list_lvalue=yes ) ] ) if test $wx_cv_type_va_list_lvalue != "yes"; then dnl we suppose that the only thing which can't be copied like this dnl are arrays... only experience will show whether this is really true AC_DEFINE(VA_LIST_IS_ARRAY) fi fi dnl don't check for vararg macros if they're explicitly disabled: this is dnl useful if the user code using the library wants to limit itself to standard dnl C++ only (e.g. is compiled with g++ -std=c++98) if test "$wxUSE_VARARG_MACROS" = "yes"; then dnl Check if variadic macros (C99 feature) are supported: AC_CACHE_CHECK( [whether the compiler supports variadic macros], [wx_cv_have_variadic_macros], [ dnl C compiler might support variadic macros when C++ one doesn't dnl (happens with gcc/g++ 2.95.4), so must use C++ one explicitly AC_LANG_PUSH(C++) AC_COMPILE_IFELSE( AC_LANG_PROGRAM( [ #include #define test(fmt, ...) printf(fmt, __VA_ARGS__) ], [ test("%s %d %p", "test", 1, 0); ] ), [wx_cv_have_variadic_macros=yes], [wx_cv_have_variadic_macros=no] ) AC_LANG_POP() ] ) if test $wx_cv_have_variadic_macros = "yes"; then AC_DEFINE(HAVE_VARIADIC_MACROS) fi fi dnl wxUSE_VARARG_MACROS == yes dnl check for large file support LARGEFILE_CPPFLAGS= AC_SYS_LARGEFILE if test "$ac_cv_sys_file_offset_bits" = "64"; then LARGEFILE_CPPFLAGS="-D_FILE_OFFSET_BITS=64" elif test "$ac_cv_sys_large_files" = 1; then LARGEFILE_CPPFLAGS="-D_LARGE_FILES" fi dnl we need to define _FILE_OFFSET_BITS or _LARGE_FILES on the compiler command dnl line because otherwise the system headers risk being included before dnl wx/defs.h which defines these constants leading to inconsistent dnl sizeof(off_t) in different source files of the same program and linking dnl problems if test -n "$LARGEFILE_CPPFLAGS"; then WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS $LARGEFILE_CPPFLAGS" dnl We get "Large Files (ILP32) not supported in strict ANSI mode." dnl #error from HP standard headers unless __STDC_EXT__ is defined. dnl The compiler should define it automatically, but some old g++ dnl versions don't define it, so test and add it if necessary. AFAIK dnl the problem only affects the C++ compiler so it is added to dnl CXXFLAGS only. if test "$USE_HPUX" = 1 -a "$GXX" = "yes"; then AC_CACHE_CHECK( [if -D__STDC_EXT__ is required], wx_cv_STDC_EXT_required, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE( [], [ #ifndef __STDC_EXT__ choke me #endif ], wx_cv_STDC_EXT_required=no, wx_cv_STDC_EXT_required=yes ) AC_LANG_POP() ] ) if test "x$wx_cv_STDC_EXT_required" = "xyes"; then WXCONFIG_CXXFLAGS="$WXCONFIG_CXXFLAGS -D__STDC_EXT__" fi fi fi dnl AC_FUNC_FSEEKO sets HAVE_FSEEKO and $ac_cv_sys_largefile_source dnl dnl it may be affected by large file flags (this happens under HP-UX 11 for dnl example) so set them before using it and also use C++ to ensure that we get dnl errors, not warnings, about the missing functions AC_LANG_PUSH(C++) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $LARGEFILE_CPPFLAGS" AC_FUNC_FSEEKO CPPFLAGS="$old_CPPFLAGS" AC_LANG_POP() if test "$ac_cv_sys_largefile_source" != no; then WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS -D_LARGEFILE_SOURCE=$ac_cv_sys_largefile_source" fi dnl check for bytesex stuff (don't use AC_C_BIGENDIAN to allow cross-compiling) WX_C_BIGENDIAN dnl check for iostream (as opposed to iostream.h) standard header WX_CPP_NEW_HEADERS(, AC_DEFINE(wxUSE_IOSTREAMH)) dnl check whether C++ compiler supports explicit keyword WX_CPP_EXPLICIT dnl With Sun CC, temporaries have block scope by default. This flag is needed dnl to get the expression scope behaviour that conforms to the standard. if test "x$SUNCXX" = xyes; then CXXFLAGS="-features=tmplife $CXXFLAGS" fi dnl Sun X11 headers are (still, in 2005!) non-ANSI and the best they could do dnl was to hack their C++ compiler to accept them silently -- but C compiler dnl still spits out dozens of warnings for each X include file, so suppress dnl them if test "x$SUNCC" = xyes; then CFLAGS="-erroff=E_NO_EXPLICIT_TYPE_GIVEN $CFLAGS" fi dnl SGI mipsPro compiler version 7.4.4 and later (and maybe some earlier dnl versions too but it's known that 7.4.2 doesn't give this warning but does dnl instead warn about "unknown warning number 3970" which explains that we dnl don't want to do this for it) gives this warning for "conversion from dnl pointer to same-sized integral type" even when there is an explicit cast dnl and as there is no way to turn it off and there are hundreds of these dnl warnings in wx sources, just turn it off for now dnl dnl a better long term solution would be to use #pragma set/reset woff in dnl wxPtrToUInt() and use it instead of casts elsewhere if test "x$SGICC" = "xyes"; then AC_CACHE_CHECK([if cc version is 7.4.4 or greater], wx_cv_prog_sgicc744, [ AC_TRY_COMPILE([], [ #if _SGI_COMPILER_VERSION >= 744 chock me: mipsPro is 7.4.4 or later #endif ], wx_cv_prog_sgicc744=no, wx_cv_prog_sgicc744=yes ) ] ) if test "x$wx_cv_prog_sgicc744" = "xyes"; then CFLAGS="-woff 3970 $CFLAGS" fi fi if test "x$SGICXX" = "xyes"; then AC_CACHE_CHECK([if CC version is 7.4.4 or greater], wx_cv_prog_sgicxx744, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE([], [ #if _SGI_COMPILER_VERSION >= 744 chock me: mipsPro is 7.4.4 or later #endif ], wx_cv_prog_sgicxx744=no, wx_cv_prog_sgicxx744=yes ) AC_LANG_POP() ] ) if test "x$wx_cv_prog_sgicxx744" = "xyes"; then CXXFLAGS="-woff 3970 $CXXFLAGS" fi fi dnl HP-UX c89/aCC compiler warnings if test "x$HPCC" = "xyes"; then dnl 2011: "unrecognized preprocessor directive": nice warning but it's given dnl even for directives inside #if which is not true (i.e. which are dnl used for other compilers/OS) and so we have no way to get rid of it dnl 2450: "long long is non standard" -- yes, we know CFLAGS="+W 2011,2450 $CFLAGS" fi if test "x$HPCXX" = "xyes"; then dnl 2340: "value copied to temporary, reference to temporary used": very dnl painful as triggered by any occurrence of user-defined conversion dnl 4232: "conversion from 'Foo *' to a more strictly aligned type 'Bar *' dnl may cause misaligned access": this might indicate a real problem dnl but any use of GTK+ cast macros results in it so it's unusable dnl for wxGTK code CXXFLAGS="+W 2340,4232 $CXXFLAGS" fi dnl DEC/Compaq/HP cxx warnings if test "x$COMPAQCXX" = "xyes"; then dnl -w0 enables all warnings, then we disable some of them: dnl basclsnondto: base class dtor non virtual (sometimes we do want this) dnl unrimpret: "end of routine block may be unreachable" is given for dnl every "if ( ) return ...; else return ...;" dnl intconlosbit: "conversion to integral type of smaller size could lose dnl data" this is a useful warning but there are too many of dnl them for now CXXFLAGS="-w0 -msg_disable basclsnondto,unrimpret,intconlosbit" fi dnl the next few tests are all for C++ features and so need to be done using dnl C++ compiler AC_LANG_PUSH(C++) dnl check for std::string or std::wstring if test "$wxUSE_STD_STRING" = "yes" -o "$wxUSE_STL" = "yes"; then if test "$wxUSE_UNICODE" = "yes"; then std_string="std::wstring" char_type="wchar_t" else std_string="std::string" char_type="char" fi dnl check if declares std::[w]string AC_CACHE_CHECK([for $std_string in ], wx_cv_class_stdstring, [ AC_TRY_COMPILE([#include ], [$std_string foo;], wx_cv_class_stdstring=yes, wx_cv_class_stdstring=no ) ] ) if test "$wx_cv_class_stdstring" = yes; then if test "$wxUSE_UNICODE" = "yes"; then AC_DEFINE(HAVE_STD_WSTRING) fi dnl we don't need HAVE_STD_STRING, we just suppose it's available if dnl wxUSE_STD_STRING==yes else AC_CACHE_CHECK([if std::basic_string<$char_type> works], wx_cv_class_stdbasicstring, [ AC_TRY_COMPILE([ #ifdef HAVE_WCHAR_H # ifdef __CYGWIN__ # include # endif # include #endif #ifdef HAVE_STDLIB_H # include #endif #include #include ], [std::basic_string<$char_type> foo; const $char_type* dummy = foo.c_str();], wx_cv_class_stdbasicstring=yes, wx_cv_class_stdbasicstring=no ) ] ) if test "$wx_cv_class_stdbasicstring" != yes; then if test "$wxUSE_STL" = "yes"; then AC_MSG_ERROR([Can't use --enable-stl without $std_string or std::basic_string<$char_type>]) elif test "$wxUSE_STD_STRING" = "yes"; then AC_MSG_ERROR([Can't use --enable-std_string without $std_string or std::basic_string<$char_type>]) else AC_MSG_WARN([No $std_string or std::basic_string<$char_type>, switching to --disable-std_string]) wxUSE_STD_STRING=no fi fi fi fi if test "$wxUSE_STD_IOSTREAM" = "yes"; then AC_CHECK_TYPES([std::istream, std::ostream],, [wxUSE_STD_IOSTREAM=no], [#include ]) if test "$wxUSE_STD_IOSTREAM" != "yes"; then if test "$wxUSE_STD_IOSTREAM" = "yes"; then AC_MSG_ERROR([Can't use --enable-std_iostreams without std::istream and std::ostream]) else AC_MSG_WARN([No std::iostreams, switching to --disable-std_iostreams]) fi fi fi if test "$wxUSE_STL" = "yes"; then dnl check for basic STL functionality AC_CACHE_CHECK([for basic STL functionality], wx_cv_lib_stl, [AC_TRY_COMPILE([#include #include #include #include #include ], [std::vector moo; std::list foo; std::vector::iterator it = std::find_if(moo.begin(), moo.end(), std::bind2nd(std::less(), 3));], wx_cv_lib_stl=yes, wx_cv_lib_stl=no )] ) if test "$wx_cv_lib_stl" != yes; then AC_MSG_ERROR([Can't use --enable-stl as basic STL functionality is missing]) fi dnl check for compliant std::string::compare AC_CACHE_CHECK([for compliant std::string::compare], wx_cv_func_stdstring_compare, [AC_TRY_COMPILE([#include ], [std::string foo, bar; foo.compare(bar); foo.compare(1, 1, bar); foo.compare(1, 1, bar, 1, 1); foo.compare(""); foo.compare(1, 1, ""); foo.compare(1, 1, "", 2);], wx_cv_func_stdstring_compare=yes, wx_cv_func_stdstring_compare=no )] ) if test "$wx_cv_func_stdstring_compare" = yes; then AC_DEFINE(HAVE_STD_STRING_COMPARE) fi if test "$wx_cv_class_gnuhashmapset" = yes; then AC_DEFINE(HAVE_EXT_HASH_MAP) AC_DEFINE(HAVE_GNU_CXX_HASH_MAP) fi AC_CHECK_HEADER([unordered_map], [AC_CACHE_CHECK([for unordered_map and unordered_set in std], wx_cv_class_stdunorderedmapset, [AC_TRY_COMPILE([#include #include ], [std::unordered_map test1; std::unordered_set test2;], wx_cv_class_stdunorderedmapset=yes, wx_cv_class_stdunorderedmapset=no) ] )], [], [ ] ) if test "$wx_cv_class_stdunorderedmapset" = yes; then AC_DEFINE(HAVE_STD_UNORDERED_MAP) AC_DEFINE(HAVE_STD_UNORDERED_SET) else AC_CHECK_HEADER([tr1/unordered_map], [AC_CACHE_CHECK([for unordered_map and unordered_set in std::tr1], wx_cv_class_tr1unorderedmapset, [AC_TRY_COMPILE([#include #include ], [std::tr1::unordered_map test1; std::tr1::unordered_set test2; #if defined(__GNUC__) && (__GNUC__==4) && (__GNUC_MINOR__<2) #error can't use unordered_{map,set} with gcc-4.[01]: http://gcc.gnu.org/PR24389 #endif], wx_cv_class_tr1unorderedmapset=yes, wx_cv_class_tr1unorderedmapset=no) ] )], [], [ ] ) if test "$wx_cv_class_tr1unorderedmapset" = yes; then AC_DEFINE(HAVE_TR1_UNORDERED_MAP) AC_DEFINE(HAVE_TR1_UNORDERED_SET) else dnl check for hash_map and hash_set headers AC_CHECK_HEADER([hash_map], [AC_CACHE_CHECK([for std::hash_map and hash_set], wx_cv_class_stdhashmapset, [AC_TRY_COMPILE([#include #include ], [std::hash_map, std::equal_to > test1; std::hash_set, std::equal_to > test2;], wx_cv_class_stdhashmapset=yes, wx_cv_class_stdhashmapset=no) ] )], [], [ ] ) if test "$wx_cv_class_stdhashmapset" = yes; then AC_DEFINE(HAVE_HASH_MAP) AC_DEFINE(HAVE_STD_HASH_MAP) fi AC_CHECK_HEADER([ext/hash_map], [AC_CACHE_CHECK([for GNU hash_map and hash_set], wx_cv_class_gnuhashmapset, [AC_TRY_COMPILE([#include #include ], [__gnu_cxx::hash_map, std::equal_to > test1; __gnu_cxx::hash_set, std::equal_to > test2;], wx_cv_class_gnuhashmapset=yes, wx_cv_class_gnuhashmapset=no) ] )], [], [ ] ) fi fi fi AC_CHECK_HEADERS([type_traits tr1/type_traits]) dnl check for atomic operations builtins for wx/atomic.h: WX_ATOMIC_BUILTINS dnl pop C++ AC_LANG_POP() dnl --------------------------------------------------------------------------- dnl Define search path for includes and libraries: all headers and libs will be dnl looked for in all directories of this path dnl --------------------------------------------------------------------------- dnl Notice that /usr/include should *not* be in this list, otherwise it breaks dnl compilation on Solaris/AIX/... with gcc because standard (non ANSI C) dnl headers are included instead of the "fixed" (ANSI-fied) gcc ones. dnl dnl Also try to put all directories which may contain X11R6 before those which dnl may contain X11R5/4 - we want to use R6 on machines which have both! dnl dnl In the same vein. Motif 2.1 should be tried before Motif 1.2 for the dnl systems which have both (AIX 4.x does) SEARCH_INCLUDE="\ /usr/local/include \ /usr/local/X11/include \ /usr/local/include/X11 \ /usr/local/X11R7/include \ /usr/local/X11R6/include \ /usr/local/include/X11R7 \ /usr/local/include/X11R6 \ \ /usr/Motif-2.1/include \ /usr/Motif-1.2/include \ /usr/include/Motif1.2 \ \ /usr/dt/include \ /usr/openwin/include \ \ /usr/include/Xm \ \ /usr/X11R7/include \ /usr/X11R6/include \ /usr/X11R6.4/include \ \ /usr/include/X11R7 \ /usr/include/X11R6 \ \ /usr/X11/include \ /usr/include/X11 \ \ /usr/XFree86/include/X11 \ /usr/pkg/include \ \ /usr/local/X1R5/include \ /usr/local/include/X11R5 \ /usr/X11R5/include \ /usr/include/X11R5 \ \ /usr/local/X11R4/include \ /usr/local/include/X11R4 \ /usr/X11R4/include \ /usr/include/X11R4 \ \ /usr/openwin/share/include" dnl try to find out the standard lib locations for the systems with multiple dnl ABIs AC_MSG_CHECKING([for libraries directory]) case "${host}" in *-*-irix6* ) AC_CACHE_VAL( wx_cv_std_libpath, [ for d in WX_STD_LIBPATH(); do for e in a so sl dylib dll.a; do libc="$d/libc.$e" if test -f $libc; then save_LIBS="$LIBS" LIBS="$libc" AC_LINK_IFELSE([int main() { return 0; }], wx_cv_std_libpath=`echo $d | sed s@/usr/@@`) LIBS="$save_LIBS" if test "x$wx_cv_std_libpath" != "x"; then break 2 fi fi done done if test "x$wx_cv_std_libpath" = "x"; then wx_cv_std_libpath="lib" fi ] ) ;; *-*-solaris2* ) dnl use ../lib or ../lib/64 depending on the size of void* if test "$ac_cv_sizeof_void_p" = 8 -a -d "/usr/lib/64"; then wx_cv_std_libpath="lib/64" else wx_cv_std_libpath="lib" fi ;; *-*-linux* ) dnl use ../lib or ../lib64 depending on the size of void* if test "$ac_cv_sizeof_void_p" = 8 -a \ -d "/usr/lib64" -a ! -h "/usr/lib64"; then wx_cv_std_libpath="lib64" else wx_cv_std_libpath="lib" fi ;; *) wx_cv_std_libpath="lib"; ;; esac AC_MSG_RESULT($wx_cv_std_libpath) SEARCH_LIB="`echo "$SEARCH_INCLUDE" | sed s@include@$wx_cv_std_libpath@g` /usr/$wx_cv_std_libpath" dnl Cross compiling with gcc? if test "$build" != "$host" -a "$GCC" = yes; then dnl for gcc cross-compilers "$CC -print-prog-name=ld" prints the path to dnl the linker. Stripping off the trailing '/bin/ld' gives us a candiate dnl for a 'root' below which libraries and headers for the target system dnl might be installed. if cross_root=`$CC -print-prog-name=ld 2>/dev/null`; then cross_root=`dirname $cross_root` cross_root=`dirname $cross_root` dnl substitute this candiate root for '^/usr' in the search lists, dnl strip out any that don't start '^/usr'. SEARCH_LIB=`for x in $SEARCH_LIB; do echo $x; done | sed -ne "s|^/usr|$cross_root|p"` SEARCH_INCLUDE=`for x in $SEARCH_INCLUDE; do echo $x; done | sed -ne "s|^/usr|$cross_root|p"` SEARCH_INCLUDE="$SEARCH_INCLUDE $cross_root/include" dnl also have pkg-config search for *.pc files under this 'root' if test -z "$PKG_CONFIG_PATH"; then PKG_CONFIG_PATH="$cross_root/local/lib/pkgconfig:$cross_root/lib/pkgconfig" export PKG_CONFIG_PATH fi dnl AC_PATH_XTRA doesn't work currently unless -x-includes and dnl -x-libraries are given on the command line. So if they are not dnl set then set them here to plausible defaults. if test -z "$x_includes" -o "$x_includes" = NONE; then WX_PATH_FIND_INCLUDES($SEARCH_INCLUDE, X11/Intrinsic.h) x_includes=$ac_find_includes fi if test -z "$x_libraries" -o "$x_libraries" = NONE; then WX_PATH_FIND_LIBRARIES($SEARCH_LIB, Xt) x_libraries=$ac_find_libraries fi fi fi dnl ------------------------------------------------------------------------ dnl Check for libraries dnl ------------------------------------------------------------------------ dnl flush the cache because checking for libraries below might abort AC_CACHE_SAVE dnl check for glibc version dnl dnl VZ: I have no idea why had this check been there originally, but now dnl we could probably do without it by just always adding _GNU_SOURCE if test "$USE_LINUX" = 1 -o "$USE_GNU" = 1; then AC_CACHE_CHECK([for glibc 2.1 or later], wx_cv_lib_glibc21,[ AC_TRY_COMPILE([#include ], [ #if (__GLIBC__ < 2) || (__GLIBC_MINOR__ < 1) not glibc 2.1 #endif ], [ wx_cv_lib_glibc21=yes ], [ wx_cv_lib_glibc21=no ] ) ]) if test "$wx_cv_lib_glibc21" = "yes"; then AC_DEFINE(wxHAVE_GLIBC2) fi fi dnl we may need _GNU_SOURCE for 2 things: dnl dnl 1. to get PTHREAD_MUTEX_RECURSIVE with glibc 2.1+ (strictly speaking we dnl only need _XOPEN_SOURCE=500 but just defining this disables _BSD_SOURCE dnl which breaks libtiff compilation, so it is simpler to just define dnl _GNU_SOURCE to get everything) dnl dnl 2. for Unicode functions if test "x$wx_cv_lib_glibc21" = "xyes"; then if test "$wxUSE_UNICODE" = "yes" -o "$wxUSE_THREADS" = "yes"; then AC_DEFINE(_GNU_SOURCE) fi fi dnl Only add the -lm library if floating point functions cannot be used dnl without it. This check is important on cygwin because of the bizarre dnl way that they have organized functions into libraries. On cygwin, both dnl libc.a and libm.a are symbolic links to a single lib libcygwin.a. This dnl means that dnl 1) linking with -lm is not necessary, and dnl 2) linking with -lm is dangerous if the order of libraries is wrong dnl In particular, if you compile any program with -mno-cygwin and link with dnl -lm, it will crash instantly when it is run. This happens because the dnl linker incorrectly links the Cygwin libm.a (==libcygwin.a), which replaces dnl the ___main function instead of allowing it to be defined by dnl /usr/lib/mingw/libmingw32.a as it should be. dnl dnl On MacOS X, this test will find that -lm is unnecessary and leave it out. dnl dnl Just check a few floating point functions. If they are all found without dnl -lm, then we must not need -lm. have_cos=0 have_floor=0 AC_CHECK_FUNCS(cos, have_cos=1) AC_CHECK_FUNCS(floor, have_floor=1) AC_MSG_CHECKING(if floating point functions link without -lm) if test "$have_cos" = 1 -a "$have_floor" = 1; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) LIBS="$LIBS -lm" # use different functions to avoid configure caching have_sin=0 have_ceil=0 AC_CHECK_FUNCS(sin, have_sin=1) AC_CHECK_FUNCS(ceil, have_ceil=1) AC_MSG_CHECKING(if floating point functions link with -lm) if test "$have_sin" = 1 -a "$have_ceil" = 1; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) # not sure we should warn the user, crash, etc. fi fi dnl check for C99 string to long long conversion functions, assume that if we dnl have the unsigned variants, then we have the signed ones as well dnl dnl at least under SGI these functions are only available in C99 code and not dnl in C++ so do these tests using C++ compiler AC_LANG_PUSH(C++) if test "wxUSE_UNICODE" = "yes"; then WX_CHECK_FUNCS(wcstoull) else WX_CHECK_FUNCS(strtoull) fi AC_LANG_POP() dnl --------------------------------------------------------------------------- dnl Optional libraries dnl dnl --with-=sys dnl looks for system library and fails if not found dnl dnl --with- dnl --with-=yes dnl looks for system library and, if not found, prints a warning, dnl falls back to the builtin wx version, and continues configuration dnl dnl --with-=builtin dnl uses builtin wx version without searching for system library dnl dnl --with-=no dnl --without- dnl do not use library (neither system nor builtin wx version) dnl dnl --------------------------------------------------------------------------- dnl ------------------------------------------------------------------------ dnl Check for regex libraries dnl ------------------------------------------------------------------------ if test "$wxUSE_REGEX" != "no"; then AC_DEFINE(wxUSE_REGEX) if test "$wxUSE_UNICODE" = "yes" -a "$wxUSE_REGEX" = "yes"; then AC_MSG_WARN([Defaulting to the builtin regex library for Unicode build.]) wxUSE_REGEX=builtin fi if test "$wxUSE_REGEX" = "sys" -o "$wxUSE_REGEX" = "yes" ; then dnl according to Unix 98 specs, regcomp() is in libc but I believe that dnl on some old systems it may be in libregex - check for it too? AC_CHECK_HEADER(regex.h, [AC_CHECK_FUNCS(regcomp re_search)],, [ ]) if test "x$ac_cv_func_regcomp" != "xyes"; then if test "$wxUSE_REGEX" = "sys" ; then AC_MSG_ERROR([system regex library not found! Use --with-regex to use built-in version]) else AC_MSG_WARN([system regex library not found, will use built-in instead]) wxUSE_REGEX=builtin fi else dnl we are using the system library wxUSE_REGEX=sys dnl only the built-in supports advanced REs AC_DEFINE(WX_NO_REGEX_ADVANCED) fi fi fi dnl ------------------------------------------------------------------------ dnl Check for zlib compression library dnl ------------------------------------------------------------------------ ZLIB_LINK= if test "$wxUSE_ZLIB" != "no" ; then AC_DEFINE(wxUSE_ZLIB) if test "$wxUSE_ZLIB" = "sys" -o "$wxUSE_ZLIB" = "yes" ; then dnl don't test for zlib under Mac -- its verson there is 1.1.3 but we dnl should still use it because hopefully (can someone confirm this?) dnl Apple did fix the security problem in it and not using the system dnl library results in a whole bunch of warnings when linking with dnl Carbon framework if test "$USE_DARWIN" = 1; then system_zlib_h_ok="yes" else dnl we have troubles with ancient zlib versions (e.g. 1.0.4 is dnl known to not work) and although I don't know which is dnl the minimal required version it's safer to test for 1.1.4 as dnl it fixes a security problem in 1.1.3 -- and hopefully nobody dnl has anything more ancient (1.1.3 was released in July 1998) dnl anyhow AC_CACHE_CHECK([for zlib.h >= 1.1.4], ac_cv_header_zlib_h, [AC_TRY_RUN( dnl zlib.h defines ZLIB_VERSION="x.y.z" [ #include #include int main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%s", ZLIB_VERSION[0] == '1' && (ZLIB_VERSION[2] > '1' || (ZLIB_VERSION[2] == '1' && ZLIB_VERSION[4] >= '4')) ? "yes" : "no"); exit(0); } ], ac_cv_header_zlib_h=`cat conftestval`, ac_cv_header_zlib_h=no, dnl cross-compiling: don't have an answer, try later unset ac_cv_header_zlib_h )] ) dnl If the test above did not come up with a value (e.g. cross dnl compiling) then this should give a definitive answer AC_CHECK_HEADER(zlib.h,,, [ ]) system_zlib_h_ok=$ac_cv_header_zlib_h fi if test "$system_zlib_h_ok" = "yes"; then AC_CHECK_LIB(z, deflate, ZLIB_LINK=" -lz") fi if test "x$ZLIB_LINK" = "x" ; then if test "$wxUSE_ZLIB" = "sys" ; then AC_MSG_ERROR([zlib library not found or too old! Use --with-zlib=builtin to use built-in version]) else AC_MSG_WARN([zlib library not found or too old, will use built-in instead]) wxUSE_ZLIB=builtin fi else dnl we are using the system library wxUSE_ZLIB=sys fi fi fi dnl ------------------------------------------------------------------------ dnl Check for png library dnl ------------------------------------------------------------------------ PNG_LINK= if test "$wxUSE_LIBPNG" != "no" ; then AC_DEFINE(wxUSE_LIBPNG) if test "$wxUSE_MGL" = 1 -a "$wxUSE_LIBPNG" = "builtin" ; then AC_MSG_WARN([wxMGL doesn't work with builtin png library, will use MGL one instead]) wxUSE_LIBPNG=sys fi dnl for the check below to have a chance to succeed, we must already have dnl libz somewhere (don't do this when bulding wxMGL since its libpng dnl doesn't depend on zlib) if test "$wxUSE_MGL" != 1 -a "$wxUSE_LIBPNG" = "sys" -a "$wxUSE_ZLIB" != "sys" ; then AC_MSG_WARN([system png library doesn't work without system zlib, will use built-in instead]) wxUSE_LIBPNG=builtin fi if test "$wxUSE_MGL" != 1 ; then dnl Don't check for libpng when building wxMGL, libmgl contains it if test "$wxUSE_LIBPNG" = "sys" -o "$wxUSE_LIBPNG" = "yes" ; then dnl libpng version 0.9 is known to not work, if an even newer dnl version is required, just bump it up in the test below AC_CACHE_CHECK([for png.h > 0.90], ac_cv_header_png_h, [AC_TRY_RUN( dnl png.h defines PNG_LIBPNG_VER=number [ #include #include int main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%s", PNG_LIBPNG_VER > 90 ? "yes" : "no"); exit(0); } ], ac_cv_header_png_h=`cat conftestval`, ac_cv_header_png_h=no, dnl cross-compiling: test (later) if we have any png.h unset ac_cv_header_png_h )] ) AC_CHECK_HEADER(png.h,,, [ ]) if test "$ac_cv_header_png_h" = "yes"; then AC_CHECK_LIB(png, png_sig_cmp, PNG_LINK=" -lpng -lz", , [-lz -lm]) fi if test "x$PNG_LINK" = "x" ; then if test "$wxUSE_LIBPNG" = "sys" ; then AC_MSG_ERROR([system png library not found or too old! Use --with-libpng=builtin to use built-in version]) else AC_MSG_WARN([system png library not found or too old, will use built-in instead]) wxUSE_LIBPNG=builtin fi else dnl we are using the system library wxUSE_LIBPNG=sys fi fi fi fi dnl ------------------------------------------------------------------------ dnl Check for jpeg library dnl ------------------------------------------------------------------------ dnl this check must be done before the check for libtiff as libtiff uses dnl libjpeg itself JPEG_LINK= if test "$wxUSE_LIBJPEG" != "no" ; then AC_DEFINE(wxUSE_LIBJPEG) if test "$wxUSE_MGL" = 1 -a "$wxUSE_LIBJPEG" = "builtin" ; then AC_MSG_WARN([wxMGL doesn't work with builtin jpeg library, will use MGL one instead]) wxUSE_LIBJPEG=sys fi if test "$wxUSE_MGL" != 1 ; then dnl Don't check for libjpeg when building wxMGL, libmgl contains it if test "$wxUSE_LIBJPEG" = "sys" -o "$wxUSE_LIBJPEG" = "yes" ; then dnl can't use AC_CHECK_HEADER as jconfig.h defines things like dnl HAVE_STDLIB_H which are already defined and this provokes dnl a compiler warning which configure considers as an error... AC_MSG_CHECKING(for jpeglib.h) AC_CACHE_VAL(ac_cv_header_jpeglib_h, AC_TRY_COMPILE( [ #undef HAVE_STDLIB_H #include #include ], [ ], ac_cv_header_jpeglib_h=yes, ac_cv_header_jpeglib_h=no ) ) AC_MSG_RESULT($ac_cv_header_jpeglib_h) if test "$ac_cv_header_jpeglib_h" = "yes"; then AC_CHECK_LIB(jpeg, jpeg_read_header, JPEG_LINK=" -ljpeg") fi if test "x$JPEG_LINK" = "x" ; then if test "$wxUSE_LIBJPEG" = "sys" ; then AC_MSG_ERROR([system jpeg library not found! Use --with-libjpeg=builtin to use built-in version]) else AC_MSG_WARN([system jpeg library not found, will use built-in instead]) wxUSE_LIBJPEG=builtin fi else dnl we are using the system library wxUSE_LIBJPEG=sys if test "$wxUSE_MSW" = 1; then dnl boolean is defined by the jpeg headers and also by the dnl Windows headers of some compilers. This type has been dnl renamed in the builtin, so it is only an issue when dnl using an external jpeg lib on Windows. AC_CHECK_TYPES( [boolean], [ AC_CHECK_SIZEOF( [boolean], [], [ #undef HAVE_BOOLEAN #include #include ]) AC_DEFINE_UNQUOTED( [wxHACK_BOOLEAN], [wxInt`expr 8 \* $ac_cv_sizeof_boolean`]) ], [], [#include ]) fi fi fi fi fi dnl ------------------------------------------------------------------------ dnl Check for tiff library dnl ------------------------------------------------------------------------ TIFF_LINK= TIFF_PREREQ_LINKS=-lm if test "$wxUSE_LIBTIFF" != "no" ; then AC_DEFINE(wxUSE_LIBTIFF) if test "$wxUSE_LIBTIFF" = "sys" -o "$wxUSE_LIBTIFF" = "yes" ; then dnl libtiff may depend on libjpeg and libz so use them in the test dnl below or it would fail if test "$wxUSE_LIBJPEG" = "sys"; then TIFF_PREREQ_LINKS="$TIFF_PREREQ_LINKS $JPEG_LINK" fi if test "$wxUSE_ZLIB" = "sys"; then TIFF_PREREQ_LINKS="$TIFF_PREREQ_LINKS $ZLIB_LINK" fi AC_CHECK_HEADER(tiffio.h, [ AC_CHECK_LIB(tiff, TIFFError, TIFF_LINK=" -ltiff", , $TIFF_PREREQ_LINKS) ], [], [ ] ) if test "x$TIFF_LINK" = "x" ; then if test "$wxUSE_LIBTIFF" = "sys" ; then AC_MSG_ERROR([system tiff library not found! Use --with-libtiff=builtin to use built-in version]) else AC_MSG_WARN([system tiff library not found, will use built-in instead]) wxUSE_LIBTIFF=builtin fi else dnl we are using the system library wxUSE_LIBTIFF=sys fi fi if test "$wxUSE_LIBTIFF" = "builtin" ; then if test "$wxUSE_LIBJPEG" = "no"; then dnl we have to prevent the builtin libtiff configure from building the dnl library with JPEG support as this was explicitly disabled by user, dnl but unfortunately it needs --disable-jpeg and not --without-libjpeg dnl (which will be passed to it anyhow as configure passes arguments to dnl the top-level script to all the other ones called recursively), so dnl we need to hack around this ac_configure_args="$ac_configure_args --disable-jpeg" fi AC_CONFIG_SUBDIRS([src/tiff]) fi fi dnl ------------------------------------------------------------------------ dnl Check for expat libraries dnl ------------------------------------------------------------------------ if test "$wxUSE_EXPAT" != "no"; then wxUSE_XML=yes AC_DEFINE(wxUSE_EXPAT) AC_DEFINE(wxUSE_XML) if test "$wxUSE_EXPAT" = "sys" -o "$wxUSE_EXPAT" = "yes" ; then AC_CHECK_HEADER([expat.h], [found_expat_h=1],, [ ]) if test "x$found_expat_h" = "x1"; then dnl Expat 1.95.6 comes with broken expat.h: AC_CACHE_CHECK([if expat.h is valid C++ header], wx_cv_expat_is_not_broken, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE([#include ],[], wx_cv_expat_is_not_broken=yes, wx_cv_expat_is_not_broken=no ) AC_LANG_POP() ] ) if test "$wx_cv_expat_is_not_broken" = "yes" ; then AC_CHECK_LIB(expat, XML_ParserCreate, EXPAT_LINK=" -lexpat") fi fi if test "x$EXPAT_LINK" = "x" ; then if test "$wxUSE_EXPAT" = "sys" ; then AC_MSG_ERROR([system expat library not found! Use --with-expat=builtin to use built-in version]) else AC_MSG_WARN([system expat library not found, will use built-in instead]) wxUSE_EXPAT=builtin fi else dnl we are using the system library wxUSE_EXPAT=sys fi fi if test "$wxUSE_EXPAT" = "builtin" ; then dnl Expat needs this: AC_CONFIG_SUBDIRS([src/expat]) fi fi dnl ------------------------------------------------------------------------ dnl Check for libmspack dnl ------------------------------------------------------------------------ if test "$wxUSE_LIBMSPACK" != "no"; then AC_CHECK_HEADER([mspack.h], [found_mspack_h=1],, [ ]) if test "x$found_mspack_h" = "x1"; then AC_CHECK_LIB(mspack, mspack_create_chm_decompressor, MSPACK_LINK=" -lmspack") fi if test "x$MSPACK_LINK" = "x" ; then wxUSE_LIBMSPACK=no fi fi if test "$wxUSE_LIBMSPACK" != "no"; then AC_DEFINE(wxUSE_LIBMSPACK) fi dnl ---------------------------------------------------------------- dnl search for toolkit (widget sets) dnl ---------------------------------------------------------------- AFMINSTALL= WIN32INSTALL= TOOLKIT= TOOLKIT_INCLUDE= WIDGET_SET= dnl are we building for a win32 target environment? dnl If so, setup common stuff needed for both GUI and Base libs. if test "$USE_WIN32" = 1 ; then AC_CHECK_HEADERS(w32api.h,,, [ ]) AC_CHECK_HEADER(windows.h,, [ AC_MSG_ERROR(please set CFLAGS to contain the location of windows.h) ], [ ]) LIBS="$LIBS -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -ladvapi32 -lwsock32 -lgdi32" case "${host}" in x86_64-*-mingw32* ) dnl we need to define this to embed the manifest for correct dnl platform from wx/msw/wx.rc (this is not needed for x86 which is dnl the default in wx/msw/rcdefs.h) WINDRES_CPU_DEFINE="--define WX_CPU_AMD64" ;; esac if test "$wxUSE_ACCESSIBILITY" = "yes" ; then LIBS="$LIBS -loleacc" fi case "${host}" in *-*-cygwin* ) dnl Cygwin doesn't include these by default LIBS="$LIBS -lkernel32 -luser32" esac dnl This one is still used by some sample makefiles. RESFLAGS="--include-dir \$(top_srcdir)/include --include-dir \$(top_srcdir)/\$(program_dir) --define __WIN32__ --define __WIN95__ --define __GNUWIN32__ $WINDRES_CPU_DEFINE" RESPROGRAMOBJ="\$(PROGRAM)_resources.o" dnl This lot we export to wx-config. It must add the relevant dnl include directories at the point when they can be known. dnl (but are these (still) required anyway?) WXCONFIG_RESFLAGS="--define __WIN32__ --define __WIN95__ --define __GNUWIN32__ $WINDRES_CPU_DEFINE" dnl install Win32-specific files in "make install" WIN32INSTALL=win32install dnl pbt.h is missing on Wine at least AC_CHECK_HEADER([pbt.h],, [AC_DEFINE(NEED_PBT_H)], [ ]) fi if test "$wxUSE_GUI" = "yes"; then USE_GUI=1 GUI_TK_LIBRARY= WXGTK12= WXGTK127= WXGTK2= WXGPE= if test "$wxUSE_OLD_COCOA" = 1 ; then if test "$wxUSE_PRINTING_ARCHITECTURE" = "yes"; then AC_MSG_WARN([Printing not supported under wxCocoa yet, disabled]) wxUSE_PRINTING_ARCHITECTURE=no fi if test "$wxUSE_DRAG_AND_DROP" = "yes"; then AC_MSG_WARN([Drag and Drop not supported under wxCocoa yet, disabled]) wxUSE_DRAG_AND_DROP=no fi if test "$wxUSE_DRAGIMAGE" = "yes"; then AC_MSG_WARN([wxDragImage not supported under wxCocoa yet, disabled]) wxUSE_DRAGIMAGE=no fi fi if test "$wxUSE_MSW" = 1 ; then TOOLKIT=MSW GUIDIST=MSW_DIST dnl -mwindows causes a heap of other default gui libs to be linked in. case "${host}" in *-*-mingw32* ) WXCONFIG_LDFLAGS_GUI="$LDFLAGS -Wl,--subsystem,windows -mwindows" esac fi if test "$wxUSE_GTK" = 1; then dnl GTK+ test program must be compiled with C compiler AC_MSG_CHECKING([for GTK+ version]) gtk_version_cached=1 AC_CACHE_VAL(wx_cv_lib_gtk, [ dnl stupid GTK+ AM macros produce their own messages, so we dnl have to pass to the next line gtk_version_cached=0 AC_MSG_RESULT() dnl we must link against lgthread unless the user dnl used --disable-threads GTK_MODULES= if test "$wxUSE_THREADS" = "yes"; then GTK_MODULES=gthread fi dnl detect GTK2 wx_cv_lib_gtk= if test "x$wxGTK_VERSION" != "x1" then dnl The gthread.pc that ships with Solaris returns '-mt', dnl it's correct for Sun CC, but gcc requires '-pthreads'. dnl So disable the compile check and remove the -mt below. case "${host}" in *-*-solaris2* ) if test "$wxUSE_THREADS" = "yes" -a "$GCC" = yes; then enable_gtktest=no fi esac AM_PATH_GTK_2_0(2.4.0, wx_cv_lib_gtk=2.0, , $GTK_MODULES) dnl we use symbols from X11 directly so we should link with it GTK_LIBS="$GTK_LIBS -lX11" fi dnl detect GTK1.x if test -z "$wx_cv_lib_gtk"; then if test "x$wxGTK_VERSION" = "x1" -o "x$wxGTK_VERSION" = "xany" ; then AM_PATH_GTK(1.2.7, wx_cv_lib_gtk=1.2.7, , $GTK_MODULES) if test -z "$wx_cv_lib_gtk"; then AM_PATH_GTK(1.2.3, wx_cv_lib_gtk=1.2.3, , $GTK_MODULES) fi fi fi if test -z "$wx_cv_lib_gtk"; then dnl looks better in AC_MSG_RESULT wx_cv_lib_gtk=none else dnl we need to cache GTK_CFLAGS and GTK_LIBS for the dnl subsequent runs wx_cv_cflags_gtk=$GTK_CFLAGS wx_cv_libs_gtk=$GTK_LIBS fi ] ) dnl if it wasn't cached, the messages from AM_PATH_GTK() above are dnl enough if test "$gtk_version_cached" = 1; then AC_MSG_RESULT($wx_cv_lib_gtk) fi case "$wx_cv_lib_gtk" in 2.0) WXGTK2=1 TOOLKIT_VERSION=2 ;; 1.2.7) WXGTK127=1 WXGTK12=1 ;; 1.2.3) WXGTK12=1 ;; *) AC_MSG_ERROR([ The development files for GTK+ were not found. For GTK+ 2, please ensure that pkg-config is in the path and that gtk+-2.0.pc is installed. For GTK+ 1.2 please check that gtk-config is in the path, and that the version is 1.2.3 or above. Also check that the libraries returned by 'pkg-config gtk+-2.0 --libs' or 'gtk-config --libs' are in the LD_LIBRARY_PATH or equivalent. ]) ;; esac if test "$WXGTK2" = 1; then save_CFLAGS="$CFLAGS" save_LIBS="$LIBS" CFLAGS="$wx_cv_cflags_gtk $CFLAGS" LIBS="$LIBS $wx_cv_libs_gtk" dnl test if we have at least GTK+ 2.18: AC_MSG_CHECKING([if GTK+ is version >= 2.18]) AC_TRY_COMPILE([ #include ], [ #if !GTK_CHECK_VERSION(2,18,0) Not GTK+ 2.18 #endif ], [ AC_DEFINE(__WXGTK218__) AC_DEFINE(__WXGTK210__) AC_DEFINE(__WXGTK26__) AC_MSG_RESULT([yes]) ac_wxgtk218=1 ], [ AC_MSG_RESULT([no]) ac_wxgtk218=0 ]) if test "$ac_wxgtk218" = 0; then dnl test if we have at least GTK+ 2.10: AC_MSG_CHECKING([if GTK+ is version >= 2.10]) AC_TRY_COMPILE([ #include ], [ #if !GTK_CHECK_VERSION(2,10,0) Not GTK+ 2.10 #endif ], [ AC_DEFINE(__WXGTK210__) AC_DEFINE(__WXGTK26__) AC_MSG_RESULT([yes]) ac_wxgtk210=1 ], [ AC_MSG_RESULT([no]) ac_wxgtk210=0 ]) if test "$ac_wxgtk210" = 0; then dnl test if we have at least GTK+ 2.6: AC_MSG_CHECKING([if GTK+ is version >= 2.6]) AC_TRY_COMPILE([ #include ], [ #if !GTK_CHECK_VERSION(2,6,0) Not GTK+ 2.6 #endif ], [ AC_DEFINE(__WXGTK26__) AC_MSG_RESULT([yes]) ac_wxgtk26=1 ], [ AC_MSG_RESULT([no]) ac_wxgtk26=0 ]) fi fi CFLAGS="$save_CFLAGS" LIBS="$save_LIBS" else if test "$wxUSE_UNICODE" = "yes"; then AC_MSG_WARN([Unicode configuration not supported with GTK+ 1.x]) wxUSE_UNICODE=no fi dnl test for XIM support in libgdk AC_CHECK_LIB(gdk, gdk_im_open, AC_DEFINE(HAVE_XIM)) dnl we need poll() in src/gtk1/app.cpp (we know that Darwin doesn't dnl have it but we do the check for the others) if test "$USE_DARWIN" != 1; then AC_CHECK_FUNCS(poll) fi fi TOOLKIT_INCLUDE="$wx_cv_cflags_gtk" GUI_TK_LIBRARY="$wx_cv_libs_gtk $GUI_TK_LIBRARY" dnl disable GTK runtime type checks TOOLKIT_INCLUDE="$TOOLKIT_INCLUDE -DG_DISABLE_CAST_CHECKS" AFMINSTALL=afminstall TOOLKIT=GTK GUIDIST=GTK_DIST dnl test for external libxpm if we're configured to use it if test "$wxUSE_GPE" = "yes"; then AC_MSG_CHECKING(for gpewidget library) WX_PATH_FIND_LIBRARIES($SEARCH_LIB,gpewidget) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST($ac_find_libraries,$GUI_TK_LIBRARY) dnl -lgpewidget must be before all GTK libs and dnl we guess its path from the prefix GUI_TK_LIBRARY="-L${prefix}/lib -lgpewidget $GUI_TK_LIBRARY" WXGPE=1 AC_MSG_RESULT([found in $ac_find_libraries]) else AC_MSG_RESULT(not found) fi dnl AC_MSG_CHECKING(for gpe library) dnl WX_PATH_FIND_LIBRARIES($SEARCH_LIB,gpe) dnl if test "$ac_find_libraries" != "" ; then dnl WX_LINK_PATH_EXIST($ac_find_libraries,$GUI_TK_LIBRARY) dnl GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lgpe" dnl AC_MSG_RESULT(found in $ac_find_libraries) dnl else dnl AC_MSG_RESULT(not found) dnl fi fi fi if test "$wxUSE_MGL" = 1; then AC_MSG_CHECKING(for SciTech MGL library) if test "x$MGL_ROOT" = x ; then AC_MSG_RESULT(not found) AC_MSG_ERROR([Cannot find MGL library. Make sure MGL_ROOT is set.]) else AC_MSG_RESULT($MGL_ROOT) fi AC_MSG_CHECKING(for libmgl location) dnl Find MGL library that we want dnl FIXME_MGL - test for MGL variants for freebsd etc.; dnl and for non-x86 versions case "${host}" in *-*-linux* ) dnl glibc.so, glibc are for older versions of MGL, dnl x86/a, x86/so are used by >= 5.0 R11 if test "x$wxUSE_SHARED" = xyes ; then mgl_os_candidates="linux/gcc/x86/so linux/gcc/x86/a linux/gcc/glibc.so linux/gcc/glibc" else mgl_os_candidates="linux/gcc/x86/a linux/gcc/x86/so linux/gcc/glibc linux/gcc/glibc.so" fi ;; *-pc-msdosdjgpp ) mgl_os_candidates="dos32/dj2" ;; *) AC_MSG_ERROR(This system type ${host} is not yet supported by wxMGL.) esac mgl_lib_type="" mgl_os="" for mgl_os_i in $mgl_os_candidates ; do if test "x$mgl_os" = x ; then if test "$wxUSE_DEBUG_FLAG" = yes ; then if test -f $MGL_ROOT/lib/debug/$mgl_os_i/libmgl.a -o \ -f $MGL_ROOT/lib/debug/$mgl_os_i/libmgl.so; then mgl_lib_type=debug mgl_os=$mgl_os_i fi fi if test "x$mgl_lib_type" = x ; then if test -f $MGL_ROOT/lib/release/$mgl_os_i/libmgl.a -o \ -f $MGL_ROOT/lib/release/$mgl_os_i/libmgl.so; then mgl_lib_type=release mgl_os=$mgl_os_i fi fi fi done if test "x$mgl_os" = x ; then AC_MSG_RESULT(not found) AC_MSG_ERROR([Cannot find MGL libraries, make sure they are compiled.]) fi AC_MSG_RESULT("$MGL_ROOT/lib/$mgl_lib_type/$mgl_os") wxUSE_UNIVERSAL="yes" TOOLKIT_INCLUDE="-I$MGL_ROOT/include" GUI_TK_LIBRARY="-L$MGL_ROOT/lib/$mgl_lib_type/$mgl_os -lmgl -lmglcpp -lpm" AFMINSTALL=afminstall TOOLKIT=MGL GUIDIST=MGL_DIST fi if test "$wxUSE_DFB" = 1; then PKG_PROG_PKG_CONFIG() PKG_CHECK_MODULES(DIRECTFB, [directfb >= 0.9.23], [ wxUSE_UNIVERSAL="yes" TOOLKIT_INCLUDE="$DIRECTFB_CFLAGS" GUI_TK_LIBRARY="$DIRECTFB_LIBS" TOOLKIT=DFB GUIDIST=DFB_DIST ], [ AC_MSG_ERROR([DirectFB not found.]) ] ) fi if test "$wxUSE_MICROWIN" = 1; then AC_MSG_CHECKING(for MicroWindows) if test "x$MICROWINDOWS" = x ; then AC_MSG_RESULT(not found) AC_MSG_ERROR([Cannot find MicroWindows library. Make sure MICROWINDOWS is set.]) else AC_MSG_RESULT($MICROWINDOWS) fi if test -f $MICROWINDOWS/lib/libmwin.a; then AC_MSG_RESULT(MicroWindows' libraries found.) else AC_MSG_ERROR([Cannot find MicroWindows libraries, make sure they are compiled.]) fi TOOLKIT_INCLUDE="-I$MICROWINDOWS/include" GUI_TK_LIBRARY="-L$MICROWINDOWS/lib -lmwin -lmwengine -mwfonts -mwdrivers -mwinlib" wxUSE_UNIVERSAL="yes" AFMINSTALL=afminstall TOOLKIT=MICROWIN GUIDIST=MICROWIN_DIST TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__WXMSW__ -D__WIN95__ -D__WIN32__ -DMWIN -DMICROWIN_NOCONTROLS -DMICROWIN_TODO=1" fi dnl common part of X11 and Motif port checks if test "$wxUSE_X11" = 1 -o "$wxUSE_MOTIF" = 1; then dnl use standard macros to check for X headers/libs, this brings dnl support for the standard configure options --x-includes, dnl --x-libraries and --no-x AC_PATH_XTRA if test "$no_x" = "yes"; then AC_MSG_ERROR([X11 not found, please use --x-includes and/or --x-libraries options (see config.log for details)]) fi dnl for some reason AC_PATH_XTRA seems to add -INONE and -LNONE (and dnl also sometimes -RNONE) to X_CFLAGS and X_LIBS respectively, filter dnl this junk out GUI_TK_LIBRARY=`echo $X_LIBS | sed 's/ -LNONE//' | sed 's/ -RNONE//'` TOOLKIT_INCLUDE=`echo $X_CFLAGS | sed 's/ -INONE//'` AFMINSTALL=afminstall COMPILED_X_PROGRAM=0 fi if test "$wxUSE_X11" = 1; then if test "$wxUSE_NANOX" = "yes"; then AC_MSG_CHECKING(for MicroWindows/NanoX distribution) if test "x$MICROWIN" = x ; then AC_MSG_RESULT(not found) AC_MSG_ERROR([Cannot find MicroWindows library. Make sure MICROWIN is set.]) else AC_MSG_RESULT($MICROWIN) AC_DEFINE(wxUSE_NANOX) fi fi if test "$wxUSE_UNICODE" = "yes"; then PKG_PROG_PKG_CONFIG() PKG_CHECK_MODULES(PANGOX, pangox, [ CFLAGS="$PANGOX_CFLAGS $CFLAGS" CXXFLAGS="$PANGOX_CFLAGS $CXXFLAGS" GUI_TK_LIBRARY="$GUI_TK_LIBRARY $PANGOX_LIBS" ], [ AC_MSG_ERROR([pangox library not found, library cannot be compiled in Unicode mode]) ] ) PKG_CHECK_MODULES(PANGOFT2, pangoft2, [ CFLAGS="$PANGOFT2_CFLAGS $CFLAGS" CXXFLAGS="$PANGOFT2_CFLAGS $CXXFLAGS" GUI_TK_LIBRARY="$GUI_TK_LIBRARY $PANGOFT2_LIBS" ], [ AC_MSG_WARN([pangoft2 library not found, library will be compiled without printing support]) wxUSE_PRINTING_ARCHITECTURE="no" ] ) PKG_CHECK_MODULES(PANGOXFT, pangoxft, [ AC_DEFINE(HAVE_PANGO_XFT) CFLAGS="$PANGOXFT_CFLAGS $CFLAGS" CXXFLAGS="$PANGOXFT_CFLAGS $CXXFLAGS" GUI_TK_LIBRARY="$GUI_TK_LIBRARY $PANGOXFT_LIBS" ], [ AC_MSG_WARN([pangoxft library not found, library will be compiled without anti-aliasing support]) ] ) save_LIBS="$LIBS" LIBS="$LIBS $PANGOX_LIBS" AC_CHECK_FUNCS([pango_font_family_is_monospace]) LIBS="$save_LIBS" fi wxUSE_UNIVERSAL="yes" if test "$wxUSE_NANOX" = "yes"; then TOOLKIT_INCLUDE="-I\$(top_srcdir)/include/wx/x11/nanox -I\$(MICROWIN)/src/include $TOOLKIT_INCLUDE" TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__NANOX__ -DMWPIXEL_FORMAT=MWPF_TRUECOLOR0888 -DHAVE_FILEIO -DHAVE_BMP_SUPPORT=1 -DHAVE_GIF_SUPPORT=1 -DHAVE_PNM_SUPPORT=1 -DHAVE_XPM_SUPPORT=1 -DUNIX=1 -DUSE_EXPOSURE -DSCREEN_HEIGHT=480 -DSCREEN_WIDTH=640 -DSCREEN_DEPTH=4 -DX11=1" GUI_TK_LIBRARY="$GUI_TK_LIBRARY \$(MICROWIN)/src/lib/libnano-X.a" else GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lX11" fi TOOLKIT=X11 GUIDIST=X11_DIST fi if test "$wxUSE_MOTIF" = 1; then AC_MSG_CHECKING(for Motif/Lesstif headers) WX_PATH_FIND_INCLUDES($SEARCH_INCLUDE, Xm/Xm.h) if test "$ac_find_includes" != "" ; then AC_MSG_RESULT(found in $ac_find_includes) WX_INCLUDE_PATH_EXIST($ac_find_includes, $TOOLKIT_INCLUDE) TOOLKIT_INCLUDE="$TOOLKIT_INCLUDE$ac_path_to_include" else save_CFLAGS=$CFLAGS CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" AC_TRY_COMPILE( [ #include ], [ int version; version = xmUseVersion; ], [ AC_MSG_RESULT(found in default search path) COMPILED_X_PROGRAM=1 ], [ AC_MSG_RESULT(no) AC_MSG_ERROR(please set CPPFLAGS to contain the location of Xm/Xm.h) ] ) CFLAGS=$save_CFLAGS fi AC_MSG_CHECKING(for Motif/Lesstif library) WX_PATH_FIND_LIBRARIES($SEARCH_LIB, Xm) if test "x$ac_find_libraries" != "x" ; then AC_MSG_RESULT(found in $ac_find_libraries) WX_LINK_PATH_EXIST($ac_find_libraries, $GUI_TK_LIBRARY) GUI_TK_LIBRARY="$GUI_TK_LIBRARY$ac_path_to_link" else dnl it might happen that we found headers in one of the standard dnl paths but the libs are elsewhere but still in default (linker) dnl path -- try to compile a test program to check for this save_CFLAGS=$CFLAGS CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" save_LIBS="$LIBS" LIBS="$GUI_TK_LIBRARY -lXm -lXmu -lXext -lX11" AC_TRY_LINK( [ #include ], [ int version; version = xmUseVersion; ], [ AC_MSG_RESULT(found in default search path) COMPILED_X_PROGRAM=1 ], [ AC_MSG_RESULT(no) AC_MSG_ERROR(please set LDFLAGS to contain the location of libXm) ] ) CFLAGS=$save_CFLAGS LIBS="$save_LIBS" fi AC_MSG_CHECKING([if we need -lXp and/or -lSM -lICE]) libp_link="" libsm_ice_link="" libs_found=0 for libp in "" " -lXp"; do if test "$libs_found" = 0; then for libsm_ice in "" " -lSM -lICE"; do if test "$libs_found" = 0; then save_LIBS="$LIBS" LIBS="$GUI_TK_LIBRARY -lXm ${libp} -lXmu -lXext -lXt${libsm_ice} -lX11" save_CFLAGS=$CFLAGS CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" AC_TRY_LINK( [ #include #include ], [ XmString string = NULL; Widget w = NULL; int position = 0; XmListAddItem(w, string, position); ], [ libp_link="$libp" libsm_ice_link="$libsm_ice" AC_MSG_RESULT( [need${libp_link}${libsm_ice_link}]) libs_found=1 ], [] ) LIBS="$save_LIBS" CFLAGS=$save_CFLAGS fi done fi done if test "$libs_found" = 0; then AC_MSG_RESULT([can't find the right libraries]) AC_MSG_ERROR([can't link a simple motif program]) fi dnl this seems to be needed under IRIX and shouldn't do any harm dnl elsewhere AC_CHECK_LIB(Sgm, [SgCreateList], [libsgm_link=" -lSgm"]) save_CFLAGS=$CFLAGS CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" AC_CACHE_CHECK([for Motif 2], wx_cv_lib_motif2, AC_TRY_COMPILE([ #include ], [ #if XmVersion < 2000 Not Motif 2 #endif ], wx_cv_lib_motif2="yes", wx_cv_lib_motif2="no")) if test "$wx_cv_lib_motif2" = "yes"; then AC_DEFINE(__WXMOTIF20__,1) else AC_DEFINE(__WXMOTIF20__,0) fi AC_CACHE_CHECK([whether Motif is Lesstif], wx_cv_lib_lesstif, AC_TRY_COMPILE([ #include ], [ #if !defined(LesstifVersion) || LesstifVersion <= 0 Not Lesstif #endif ], wx_cv_lib_lesstif="yes", wx_cv_lib_lesstif="no") ) if test "$wx_cv_lib_lesstif" = "yes"; then AC_DEFINE(__WXLESSTIF__,1) else AC_DEFINE(__WXLESSTIF__,0) fi CFLAGS=$save_CFLAGS GUI_TK_LIBRARY="$GUI_TK_LIBRARY${libsgm_link} -lXm${libp_link} -lXmu -lXext -lXt${libsm_ice_link} -lX11" TOOLKIT=MOTIF GUIDIST=MOTIF_DIST fi dnl more tests common to X11 and Motif: if test "$wxUSE_X11" = 1 -o "$wxUSE_MOTIF" = 1; then dnl test for external libxpm if we're configured to use it if test "$wxUSE_LIBXPM" = "sys"; then AC_MSG_CHECKING(for Xpm library) WX_PATH_FIND_LIBRARIES($SEARCH_LIB,Xpm) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST($ac_find_libraries,$GUI_TK_LIBRARY) GUI_TK_LIBRARY="$GUI_TK_LIBRARY$ac_path_to_link" AC_MSG_RESULT(found in $ac_find_libraries) AC_CACHE_CHECK([for X11/xpm.h], wx_cv_x11_xpm_h, [ save_CFLAGS=$CFLAGS CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" AC_TRY_COMPILE( [ #include ], [ int version; version = XpmLibraryVersion(); ], wx_cv_x11_xpm_h=yes, wx_cv_x11_xpm_h=no ) CFLAGS=$save_CFLAGS ] ) if test $wx_cv_x11_xpm_h = "yes"; then GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lXpm" AC_DEFINE(wxHAVE_LIB_XPM) else AC_MSG_WARN([built-in less efficient XPM decoder will be used]) fi fi fi dnl XShapeQueryExtension checks: first the library, then prototype AC_CHECK_LIB([Xext], [XShapeQueryExtension], [ GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lXext" wxHAVE_XEXT_LIB=1 ], [], [$GUI_TK_LIBRARY -lX11]) if test "$wxHAVE_XEXT_LIB" = 1; then save_CFLAGS="$CFLAGS" CFLAGS="$TOOLKIT_INCLUDE $CFLAGS" AC_MSG_CHECKING([for X11/extensions/shape.h]) AC_TRY_COMPILE([ #include #include ], [ int dummy1, dummy2; XShapeQueryExtension((Display*)NULL, (int*)NULL, (int*)NULL); ], [ AC_DEFINE(HAVE_XSHAPE) AC_MSG_RESULT([found]) ], [ AC_MSG_RESULT([not found]) ]) CFLAGS="$save_CFLAGS" fi fi if test "$wxUSE_OSX_CARBON" = 1; then AC_MSG_CHECKING([for compiler syntax to enable Pascal strings]) if test "$GCC" = yes; then AC_MSG_RESULT([gcc]) CPPFLAGS_PASCAL="-fpascal-strings" elif test "`echo $CXX | sed -e 's@.*/@@'`" = "xlC"; then AC_MSG_RESULT([xlc]) CPPFLAGS_PASCAL="-qmacpstr" else AC_MSG_RESULT([none]) fi if test "x$wxUSE_UNIX" = "xyes"; then CPPFLAGS="$CPPFLAGS_PASCAL -I/Developer/Headers/FlatCarbon $CPPFLAGS" else dnl platform.h needs TARGET_CARBON before setup.h CPPFLAGS="$CPPFLAGS_PASCAL -DTARGET_CARBON $CPPFLAGS" fi TOOLKIT=OSX_CARBON dnl we can't call this MAC_DIST or autoconf thinks its a macro GUIDIST=OSX_CARBON_DIST dnl wxMac version of wxBase and wxCocoa or wxBase-only built on Darwin dnl are different, so they need different names: WXBASEPORT="_carbon" dnl in addition to defining __WXOSX_CARBON__ for this toolkit we want dnl to also define these extra symbols to make it possible to test for dnl any Mac port (__WXMAC__ is for backwards compatibility, __WXOSX__ dnl is a new name) TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__WXMAC__ -D__WXOSX__" fi if test "$wxUSE_OSX_COCOA" = 1; then TOOLKIT=OSX_COCOA GUIDIST=OSX_COCOA_DIST dnl see the comment above in wxUSE_OSX_CARBON branch TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__WXMAC__ -D__WXOSX__" fi if test "$wxUSE_OSX_IPHONE" = 1; then TOOLKIT=OSX_IPHONE fi if test "$wxUSE_OLD_COCOA" = 1; then TOOLKIT=COCOA GUIDIST=COCOA_DIST fi if test "$wxUSE_PM" = 1; then TOOLKIT=PM GUIDIST=PM_DIST AC_CACHE_CHECK([for type SPBCDATA], wx_cv_spbcdata, [ AC_TRY_COMPILE( [ #define INCL_PM #include ], [ SPBCDATA test; ], wx_cv_spbcdata=yes, wx_cv_spbcdata=no ) ] ) if test $wx_cv_spbcdata = "yes"; then AC_DEFINE(HAVE_SPBCDATA) fi fi dnl the name of the directory where the files for this toolkit live if test "$TOOLKIT" = "PM" ; then TOOLKIT_DIR="os2" else TOOLKIT_DIR=`echo ${TOOLKIT} | tr '[[A-Z]]' '[[a-z]]'` fi if test "$wxUSE_UNIVERSAL" = "yes"; then TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__WXUNIVERSAL__" WIDGET_SET=univ fi dnl distribute samples/demos/utils with GUI versions GUIDIST="${GUIDIST} SAMPLES_DIST DEMOS_DIST UTILS_DIST MISC_DIST" DISTDIR="wx\$(TOOLKIT)" else USE_GUI=0 dnl this doesn't quite work right for wxBase, but the places dnl where it is wrong aren't fatal (yet) though. TOOLKIT_DIR="base" dnl the sources, their dependenices and the headers if test "$USE_WIN32" = 1 ; then dnl yes, the toolkit for wxBase on win32 is actually MSW dnl wxBase on unix does not need a 'TOOLKIT' defined. TOOLKIT="MSW" fi dnl distribute only wxBase sources/headers GUIDIST="BASE_DIST" DISTDIR="wxBase" fi dnl --------------------------------------------------------------------------- dnl UTF-8 support dnl --------------------------------------------------------------------------- dnl If UTF-8 support wasn't explicitly enabled or disabled, enable it only dnl for ports where it makes sense by default (GTK+, DirectFB): if test "$wxUSE_UNICODE" = "yes" -a "$wxUSE_UNICODE_UTF8" = "auto" ; then if test "$USE_UNIX" = 1 -a "$wxUSE_DARWIN" != 1 ; then wxUSE_UNICODE_UTF8=yes elif test "$USE_OS2" = 1 ; then dnl wide char support is quite incomplete in libc; dnl UTF-8 might actually work when evaluating/setting dnl code pages correctly, even for ports other than GTK20. wxUSE_UNICODE_UTF8=yes else wxUSE_UNICODE_UTF8=no fi fi dnl --------------------------------------------------------------------------- dnl Optional libraries included when system library is not used dnl --------------------------------------------------------------------------- dnl do this after test for X11 above so that we have a chance of finding Xlib.h if test "$wxUSE_GUI" = "yes"; then if test "$wxUSE_UNIX" = "yes" -a "$wxUSE_PM" != 1; then dnl defines HAVE_X11_XKBLIB_H AC_CHECK_HEADERS([X11/Xlib.h],,, [ ]) AC_CHECK_HEADERS([X11/XKBlib.h],,, [ #if HAVE_X11_XLIB_H #include #endif ]) fi fi dnl --------------------------------------------------------------------------- dnl wxDisplay checks dnl --------------------------------------------------------------------------- USE_XINERAMA=0 if test "$wxUSE_DISPLAY" = "yes"; then dnl Xinerama is used for wxGTK1/wxX11/wxMotif only if test "$wxUSE_MOTIF" = 1 -o "$wxUSE_X11" = 1 -o "$wxUSE_GTK1" = 1; then AC_MSG_CHECKING([for Xinerama]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB],Xinerama) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST([$ac_find_libraries],[$LDFLAGS]) if test "$ac_path_to_link" != " -L/usr/lib" ; then LDFLAGS="$LDFLAGS $ac_path_to_link" fi USE_XINERAMA=1 GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lXinerama" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_WARN([Xinerama not found; disabling wxDisplay]) wxUSE_DISPLAY="no" fi elif test "$wxUSE_MSW" = 1; then dnl DirectDraw for MSW - optionally used by WxDisplay. AC_CHECK_HEADER([ddraw.h], [], [], [#include ]) fi fi if test "$wxUSE_DISPLAY" = "yes"; then dnl wxGTK2 needs Xxf86vm as well as Xinerama-using ports from above if test "$USE_XINERAMA" = 1 -o "$wxUSE_GTK" = 1; then AC_MSG_CHECKING([for Xxf86vm extension]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB],Xxf86vm) if test "$ac_find_libraries" != "" ; then AC_MSG_RESULT([yes]) AC_CHECK_HEADERS([X11/extensions/xf86vmode.h], [ GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lXxf86vm" ], [], [ #if HAVE_X11_XLIB_H #include #endif ]) else AC_MSG_RESULT([no]) fi fi fi dnl --------------------------------------------------------------------------- dnl X11 session management dnl --------------------------------------------------------------------------- if test "$wxUSE_DETECT_SM" = "yes"; then if test "$wxUSE_UNIX" = "yes" -a "$wxUSE_MAC" != 1 -a "$wxUSE_OLD_COCOA" != 1; then AC_MSG_CHECKING([for -lSM - X11 session management]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB],SM) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST([$ac_find_libraries],[$LDFLAGS]) if test "$ac_path_to_link" != " -L/usr/lib" ; then LDFLAGS="$LDFLAGS $ac_path_to_link" fi GUI_TK_LIBRARY="$GUI_TK_LIBRARY -lSM" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_WARN([libSM not found; disabling session management detection]) wxUSE_DETECT_SM="no" fi else wxUSE_DETECT_SM="no" fi fi dnl --------------------------------------------------------------------------- dnl OpenGL libraries dnl --------------------------------------------------------------------------- USE_OPENGL=0 if test "$wxUSE_OPENGL" = "yes" -o "$wxUSE_OPENGL" = "auto"; then dnl look in glcanvas.h for the list of platforms supported by wxGlCanvas: if test "$wxUSE_OSX_CARBON" = 1 -o "$wxUSE_OSX_COCOA" = 1 -o "$wxUSE_OLD_COCOA" = 1; then OPENGL_LIBS="-framework OpenGL -framework AGL" elif test "$wxUSE_MSW" = 1; then OPENGL_LIBS="-lopengl32 -lglu32" elif test "$wxUSE_MOTIF" = 1 -o "$wxUSE_X11" = 1 -o "$wxUSE_GTK2" = 1 -o "$wxUSE_GTK" = 1; then dnl adjust CPPFLAGS to include GL/gl.h location if necessary dnl (/opt/graphics/OpenGL is for HP-UX systems, bug 925307) AC_MSG_CHECKING([for OpenGL headers]) WX_PATH_FIND_INCLUDES([$SEARCH_INCLUDE /opt/graphics/OpenGL/include], GL/gl.h) if test "$ac_find_includes" != "" ; then AC_MSG_RESULT(found in $ac_find_includes) WX_INCLUDE_PATH_EXIST($ac_find_includes, $CPPFLAGS) CPPFLAGS="$ac_path_to_include $CPPFLAGS" else AC_MSG_RESULT([not found]) fi AC_CHECK_HEADER(GL/gl.h, [ AC_CHECK_HEADER(GL/glu.h, [ found_gl=0 AC_MSG_CHECKING([for -lGL]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB /opt/graphics/OpenGL/lib],GL) if test "$ac_find_libraries" != "" ; then AC_MSG_RESULT([found in $ac_find_libraries]) WX_LINK_PATH_EXIST([$ac_find_libraries],[$LDFLAGS]) if test "$ac_path_to_link" != " -L/usr/lib" ; then LDFLAGS_GL="$ac_path_to_link" fi dnl don't suppose that libGL and libGLU are always in the dnl same directory -- this is not true for some common dnl distributions AC_MSG_CHECKING([for -lGLU]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB],GLU) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST([$ac_find_libraries],[$LDFLAGS]) if test "$ac_path_to_link" != " -L/usr/lib" -a \ "$ac_path_to_link" != "$LDFLAGS_GL"; then LDFLAGS_GL="$LDFLAGS_GL$ac_path_to_link" fi found_gl=1 OPENGL_LIBS="-lGL -lGLU" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi else AC_MSG_RESULT([no]) fi if test "$found_gl" != 1; then AC_MSG_CHECKING([for -lMesaGL]) WX_PATH_FIND_LIBRARIES([$SEARCH_LIB],MesaGL) if test "$ac_find_libraries" != "" ; then WX_LINK_PATH_EXIST([$ac_find_libraries],[$LDFLAGS]) LDFLAGS_GL="$LDFLAGS$ac_path_to_link" OPENGL_LIBS="-lMesaGL -lMesaGLU" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ],, [ ]) ], [], [ ]) if test "x$OPENGL_LIBS" = "x"; then if test "$wxUSE_OPENGL" = "yes"; then AC_MSG_ERROR([OpenGL libraries not available]) else dnl case wxUSE_OPENGL=auto AC_MSG_WARN([OpenGL libraries not available, disabling support for OpenGL]) wxUSE_OPENGL=no USE_OPENGL=0 fi fi else AC_MSG_WARN([wxGLCanvas not implemented for this port, library will be compiled without it.]) wxUSE_OPENGL="no" fi if test "$wxUSE_OPENGL" = "auto"; then dnl if the OpenGL libraries were unavailable, this would have been dnl changed to "no" above, if it wasn't, change it to "yes" as we've dnl verified that we can indeed use OpenGL wxUSE_OPENGL=yes fi if test "$wxUSE_OPENGL" = "yes"; then USE_OPENGL=1 AC_DEFINE(wxUSE_OPENGL) AC_DEFINE(wxUSE_GLCANVAS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS opengl opengl/cube opengl/penguin opengl/isosurf" fi fi dnl the symbol which allows conditional compilation for the given toolkit if test -n "$TOOLKIT" ; then TOOLCHAIN_DEFS="${TOOLCHAIN_DEFS} -D__WX${TOOLKIT}__" fi dnl --- the marker for quick search, leave it here: SHARED_LIB_SETUP --- if test "$wxUSE_SHARED" = "yes"; then case "${host}" in *-pc-msdosdjgpp ) dnl only static for now wxUSE_SHARED=no AC_MSG_WARN([Host system doesn't support shared libraries, disabling]) ;; esac fi if test "$wxUSE_SHARED" = "yes"; then dnl use versioned symbols if available on the platform WX_VERSIONED_SYMBOLS([\$(wx_top_builddir)/version-script]) dnl test for GCC's visibility support (sets CFLAGS_VISIBILITY, which is dnl assigned to CFLAGS and CXXFLAGS below) if test "$wxUSE_VISIBILITY" != "no"; then WX_VISIBILITY fi dnl test for Sun CC which can be used under both Solaris and Linux if test "x$SUNCXX" = xyes; then SAMPLES_RPATH_FLAG="-R\$(wx_top_builddir)/lib" WXCONFIG_RPATH="-R\$libdir" else case "${host}" in *-*-linux* | *-*-gnu* ) SAMPLES_RPATH_FLAG="-Wl,-rpath,\$(wx_top_builddir)/lib" WXCONFIG_RPATH="-Wl,-rpath,\$libdir" ;; *-*-solaris2* ) dnl here we know that Sun CC is not used as we tested for it above, dnl hence we must be using gcc dnl newer versions of gcc need -isystem to compile X headers on dnl Solaris (which use old style C syntax) CPPFLAGS="-isystem /usr/openwin/include $CPPFLAGS" dnl gcc may use Sun's ld, in which case -rpath gives a confusing dnl error message. We have to try both -Wl,-rpath and -Wl,-R: saveLdflags="$LDFLAGS" LDFLAGS="$saveLdflags -Wl,-rpath,/" AC_MSG_CHECKING([if the linker accepts -rpath]) AC_TRY_LINK( [],[], [ AC_MSG_RESULT([yes]) SAMPLES_RPATH_FLAG="-Wl,-rpath,\$(wx_top_builddir)/lib" WXCONFIG_RPATH="-Wl,-rpath,\$libdir" ],[ AC_MSG_RESULT([no]) AC_MSG_CHECKING([if the linker accepts -R]) LDFLAGS="$saveLdflags -Wl,-R,/" AC_TRY_LINK( [],[], [ AC_MSG_RESULT([yes]) SAMPLES_RPATH_FLAG="-Wl,-R,\$(wx_top_builddir)/lib" WXCONFIG_RPATH="-Wl,-R,\$libdir" ],[ AC_MSG_RESULT([no]) ]) ]) LDFLAGS="$saveLdflags" ;; *-*-darwin* ) install_name_tool=`which ${HOST_PREFIX}install_name_tool` if test "$install_name_tool" -a -x "$install_name_tool"; then DYLIB_RPATH_POSTLINK="${HOST_PREFIX}install_name_tool -id \$@ \$@" cat <change-install-names #!/bin/sh libnames=\`cd \${2} ; ls -1 | grep '\.[[0-9]][[0-9]]*\.dylib\$'\` for i in \${libnames} ; do ${HOST_PREFIX}install_name_tool -id \${3}/\${i} \${1}/\${i} for dep in \${libnames} ; do ${HOST_PREFIX}install_name_tool -change \${2}/\${dep} \${3}/\${dep} \${1}/\${i} done done EOF chmod +x change-install-names DYLIB_RPATH_INSTALL="\$(wx_top_builddir)/change-install-names \${DESTDIR}\${libdir} \$(wx_top_builddir)/lib \${libdir}" fi dnl the HEADER_PAD_OPTION is required by some wx samples to avoid the error: dnl "install_name_tool: changing install names can't be redone for: the_exe_name dnl (for architecture ppc) because larger updated load commands do not fit dnl (the program must be relinked)" HEADER_PAD_OPTION="-headerpad_max_install_names" ;; *-*-cygwin* | *-*-mingw32* ) ;; *-*-hpux* ) SAMPLES_RPATH_FLAG="-Wl,+b,\$(wx_top_builddir)/lib" WXCONFIG_RPATH="-Wl,+b,\$libdir" ;; esac fi dnl this one shouldn't be used for the library build so put it in a dnl separate variable from WXCONFIG_CPPFLAGS WXCONFIG_ONLY_CPPFLAGS="$WXCONFIG_ONLY_CPPFLAGS -DWXUSINGDLL" if test $wxUSE_RPATH = "no"; then SAMPLES_RPATH_FLAG='' DYLIB_PATH_POSTLINK='' WXCONFIG_RPATH='' fi SHARED=1 else config_linkage_component="-static" SHARED=0 fi UNICODE=0 lib_unicode_suffix= WX_CHARTYPE="ansi" if test "$wxUSE_UNICODE" = "yes"; then lib_unicode_suffix=u WX_CHARTYPE="unicode" UNICODE=1 fi WX_FLAVOUR=${WX_FLAVOUR:+-$WX_FLAVOUR} WX_LIB_FLAVOUR=`echo $WX_FLAVOUR | tr '-' '_'` DEBUG_INFO=0 if test "$wxUSE_DEBUG_INFO" = "yes"; then DEBUG_INFO=1 fi WX_VERSION_TAG=`echo WX${lib_unicode_suffix}${WX_LIB_FLAVOUR}_${WX_RELEASE} | tr '[[a-z]]' '[[A-Z]]'` TOOLCHAIN_NAME="${TOOLKIT_DIR}${TOOLKIT_VERSION}${WIDGET_SET}${lib_unicode_suffix}${WX_LIB_FLAVOUR}-${WX_RELEASE}${HOST_SUFFIX}" TOOLCHAIN_FULLNAME="${HOST_PREFIX}${TOOLKIT_DIR}${TOOLKIT_VERSION}${WIDGET_SET}-${WX_CHARTYPE}${config_linkage_component}-${WX_RELEASE}${WX_FLAVOUR}" dnl library link name dnl These just save us from exporting lib_{unicode,flavour}_suffix. dnl If we ever need to do that, we won't need to keep these. if test "$wxUSE_OSX_CARBON" = 1 -o "$wxUSE_OSX_COCOA" = 1 -o "$wxUSE_OLD_COCOA" = 1; then WX_LIBRARY_BASENAME_NOGUI="wx_base${lib_unicode_suffix}${WX_LIB_FLAVOUR}" else WX_LIBRARY_BASENAME_NOGUI="wx_base${WXBASEPORT}${lib_unicode_suffix}${WX_LIB_FLAVOUR}" fi if test "${TOOLKIT_DIR}" = "os2"; then WX_LIBRARY_BASENAME_GUI="wx_pm${WIDGET_SET}${lib_unicode_suffix}${WX_LIB_FLAVOUR}" else WX_LIBRARY_BASENAME_GUI="wx_${TOOLKIT_DIR}${TOOLKIT_VERSION}${WIDGET_SET}${lib_unicode_suffix}${WX_LIB_FLAVOUR}" fi if test "$wxUSE_OLD_COCOA" = 1; then AC_LANG_SAVE AC_WX_LANG_OBJECTIVEC dnl Recent AppKit/NSEvent.h include parts of IOKit which eventually dnl gets IOKit/graphics/IOGraphicsTypes.h included which typedefs dnl Point but only if MacTypes.h was not included first. Of course, dnl if MacTypes.h is included later then you're screwed when it dnl tries to typedef Point. Defining __Point__ will cause IOGraphicsTypes.h dnl to not typedef Point and thus fix the problem. AC_MSG_CHECKING([if AppKit/NSEvent.h conflicts with CoreFoundation]) AC_TRY_COMPILE([#include #include ],[], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([yes]) AC_MSG_CHECKING([if defining __Point__ will fix it]) AC_TRY_COMPILE([#define __Point__ 1 #include #include ],[], [AC_MSG_RESULT([yes]) AC_DEFINE(__Point__) ], [AC_MSG_FAILURE([no])] )] ) AC_LANG_RESTORE fi dnl --------------------------------------------------------------------------- dnl Checks for typedefs dnl --------------------------------------------------------------------------- dnl defines mode_t if not already defined AC_TYPE_MODE_T dnl defines off_t if not already defined AC_TYPE_OFF_T dnl defines pid_t if not already defined AC_TYPE_PID_T dnl defines size_t if not already defined AC_TYPE_SIZE_T dnl sets HAVE_SSIZE_T if ssize_t is defined AC_CHECK_TYPES(ssize_t) dnl check what exactly size_t is on this machine - this is necessary to avoid dnl ambiguous overloads in several places, notably wx/string.h and wx/array.h AC_LANG_PUSH(C++) dnl tests below use overloaded functions and so need C++ AC_CACHE_CHECK([if size_t is unsigned int], wx_cv_size_t_is_uint, [ dnl an obvious check like AC_TRY_COMPILE[struct Foo { ... };] doesn't work dnl with egcs (at least) up to 1.1.1 as it allows you to compile duplicate dnl methods in a local class (i.e. class inside a function) declaration dnl without any objections!! dnl dnl hence the hack below: we must have Foo at global scope! AC_TRY_COMPILE([#include ], [ return 0; } struct Foo { void foo(size_t); void foo(unsigned int); }; int bar() { ], wx_cv_size_t_is_uint=no, wx_cv_size_t_is_uint=yes ) ] ) if test "$wx_cv_size_t_is_uint" = "yes"; then AC_DEFINE(wxSIZE_T_IS_UINT) else AC_CACHE_CHECK([if size_t is unsigned long], wx_cv_size_t_is_ulong, AC_TRY_COMPILE([#include ], [ return 0; } struct Foo { void foo(size_t); void foo(unsigned long); }; int bar() { ], wx_cv_size_t_is_ulong=no, wx_cv_size_t_is_ulong=yes ) ) if test "$wx_cv_size_t_is_ulong" = "yes"; then AC_DEFINE(wxSIZE_T_IS_ULONG) fi fi AC_CACHE_CHECK([if wchar_t is separate type], wx_cv_wchar_t_is_separate_type, AC_TRY_COMPILE([#include ], [ return 0; } struct Foo { void foo(wchar_t); void foo(unsigned short); void foo(unsigned int); void foo(unsigned long); }; int bar() { ], wx_cv_wchar_t_is_separate_type=yes, wx_cv_wchar_t_is_separate_type=no ) ) if test "$wx_cv_wchar_t_is_separate_type" = "yes"; then AC_DEFINE(wxWCHAR_T_IS_REAL_TYPE, 1) else AC_DEFINE(wxWCHAR_T_IS_REAL_TYPE, 0) fi AC_LANG_POP() dnl C++ dnl --------------------------------------------------------------------------- dnl Checks for structures dnl --------------------------------------------------------------------------- dnl does passwd struct has the pw_gecos field? AC_CACHE_CHECK([for pw_gecos in struct passwd], wx_cv_struct_pw_gecos, [ AC_TRY_COMPILE([#include ], [ char *p; struct passwd *pw; p = pw->pw_gecos; ], [ wx_cv_struct_pw_gecos=yes ], [ wx_cv_struct_pw_gecos=no ] ) ] ) if test "$wx_cv_struct_pw_gecos" = "yes"; then AC_DEFINE(HAVE_PW_GECOS) fi dnl --------------------------------------------------------------------------- dnl Check for functions dnl --------------------------------------------------------------------------- dnl check for wcslen in all possible places WCSLEN_FOUND=0 WCHAR_LINK= AC_CHECK_FUNCS(wcslen, WCSLEN_FOUND=1) if test "$WCSLEN_FOUND" = 0; then if test "$TOOLKIT" = "MSW"; then AC_CHECK_LIB(msvcrt, wcslen, WCHAR_OK=1) else AC_CHECK_LIB(w, wcslen, [ WCHAR_LINK=" -lw" WCSLEN_FOUND=1 ]) fi fi if test "$WCSLEN_FOUND" = 1; then AC_DEFINE(HAVE_WCSLEN) fi AC_CHECK_FUNCS([wcsdup wcsftime strnlen wcsnlen wcscasecmp wcsncasecmp]) dnl On HP-UX aCC need this define to find mbstrtowcs() &c dnl Can't be used for g++ since the mbstate_t in wchar.h can conflict dnl with g++'s in (unless -D_INCLUDE__STDC_A1_SOURCE is in the dnl flags when g++ is configured, it will declare its own). if test "$USE_HPUX" = 1 -a "$GCC" != "yes"; then CPPFLAGS="-D_INCLUDE__STDC_A1_SOURCE $CPPFLAGS" fi dnl Try to use wcsrtombs instead of wcstombs which is buggy in old GNU dnl libc versions if possible. AC_CHECK_FUNCS only checks it's in the dnl library, not the header, so do a header check for mbstate_t first. AC_CHECK_TYPES([mbstate_t], [AC_CHECK_FUNCS(wcsrtombs)], [], [#include ]) dnl check for vsnprintf() -- a safe version of vsprintf()) dnl dnl the trouble here is that on some systems (e.g. HP-UX 10) this function is dnl present in libc but not in the system headers and so AC_CHECK_FUNCS (which, dnl stupidly, provides a dummy function declaration inside its extension) dnl succeeds, even with C++ compiler, but the compilation of wxWidgets fails dnl dnl so we first check if the function is in the library dnl dnl FIXME: replace this mess with WX_CHECK_FUNCS() AC_CHECK_FUNCS(snprintf vsnprintf vsscanf) AC_LANG_PUSH(C++) if test "$ac_cv_func_vsnprintf" = "yes"; then dnl yes it is -- now check if it is in the headers AC_CACHE_CHECK([for vsnprintf declaration], wx_cv_func_vsnprintf_decl, [ dnl our troubles are not over: HP-UX 11 prototypes vsnprintf() as dnl taking "char *" and not "const char *" while Metrowerks does dnl provide a correct vsnprintf declaration but in C++ mode it's dnl always in std namespace and so we have to bring it in scope AC_TRY_COMPILE( [ #include #include #ifdef __MSL__ #if __MSL__ >= 0x6000 namespace std {} using namespace std; #endif #endif ], [ char *buf; va_list ap; vsnprintf(buf, 10u, "%s", ap); ], wx_cv_func_vsnprintf_decl=yes, wx_cv_func_vsnprintf_decl=no ) ] ) if test "$wx_cv_func_vsnprintf_decl" = "yes"; then AC_DEFINE(HAVE_VSNPRINTF_DECL) dnl we know there is a vsnprintf declaration, but some old headers dnl may have one taking a "char *" format instead of "const char *" AC_CACHE_CHECK([if vsnprintf declaration is broken], wx_cv_func_broken_vsnprintf_decl, [ AC_TRY_COMPILE( [ #include #include #ifdef __MSL__ #if __MSL__ >= 0x6000 namespace std {} using namespace std; #endif #endif ], [ char *buf; va_list ap; const char *fmt = "%s"; vsnprintf(buf, 10u, fmt, ap); ], wx_cv_func_broken_vsnprintf_decl=no, wx_cv_func_broken_vsnprintf_decl=yes ) ] ) if test "$wx_cv_func_broken_vsnprintf_decl" = "yes"; then AC_DEFINE(HAVE_BROKEN_VSNPRINTF_DECL) fi fi fi dnl the same as above but for snprintf() now: it's not present in at least AIX dnl 4.2 headers if test "$ac_cv_func_snprintf" = "yes"; then AC_CACHE_CHECK([for snprintf declaration], wx_cv_func_snprintf_decl, [ AC_TRY_COMPILE( [ #include #include #ifdef __MSL__ #if __MSL__ >= 0x6000 namespace std {} using namespace std; #endif #endif ], [ char *buf; snprintf(buf, 10u, "%s", "wx"); ], wx_cv_func_snprintf_decl=yes, wx_cv_func_snprintf_decl=no ) ] ) if test "$wx_cv_func_snprintf_decl" = "yes"; then AC_DEFINE(HAVE_SNPRINTF_DECL) fi if test "$wxUSE_PRINTF_POS_PARAMS" = "yes"; then dnl check if snprintf() has support for positional arguments dnl NB: if snprintf() has positional support we can safely suppose that also dnl other *printf() functions support them as they all belong to the same dnl family and they all fallback to the same implementation AC_CACHE_CHECK([if snprintf supports positional arguments], wx_cv_func_snprintf_pos_params, [ AC_TRY_RUN( [ #include int main (void) { char buffer[128]; snprintf (buffer, 128, "%2$d %3$d %1$d", 1, 2, 3); if (strcmp ("2 3 1", buffer) == 0) exit (0); exit (1); } ], wx_cv_func_snprintf_pos_params=no, wx_cv_func_snprintf_pos_params=yes, dnl be pessimistic when cross-compiling [ AC_MSG_WARN([Assuming Unix98 printf() is not available, define HAVE_UNIX98_PRINTF as 1 in setup.h if it is available.]) wx_cv_func_snprintf_pos_params=no ] ) ] ) if test "$wx_cv_func_snprintf_pos_params" = "yes"; then AC_DEFINE(HAVE_UNIX98_PRINTF) fi fi fi dnl the same as above but for vsscanf() now: it's not present in at least dnl Solaris 9 headers for gcc-3.4 (due to fixinclude's processing of stdio.h) if test "$ac_cv_func_vsscanf" = "yes"; then AC_CACHE_CHECK([for vsscanf declaration], wx_cv_func_vsscanf_decl, [ AC_TRY_COMPILE( [ #include #include #ifdef __MSL__ #if __MSL__ >= 0x6000 namespace std {} using namespace std; #endif #endif ], [ char *buf; va_list args; vsscanf(buf, "%s", args); ], wx_cv_func_vsscanf_decl=yes, wx_cv_func_vsscanf_decl=no ) ] ) if test "$wx_cv_func_vsscanf_decl" = "yes"; then AC_DEFINE(HAVE_VSSCANF_DECL) fi fi AC_LANG_POP() if test "$wxUSE_UNICODE" = yes; then dnl also look if we have wide char IO functions, notice that [f]putws are dnl declared in special widec.h under Solaris wchar_headers="#include #include " case "${host}" in *-*-solaris2* ) AC_CHECK_HEADERS(widec.h,,, [AC_INCLUDES_DEFAULT()]) if test "$ac_cv_header_widec_h" = "yes"; then wchar_headers="$wchar_headers #include " fi esac WX_CHECK_FUNCS(putws fputws wprintf vswprintf vswscanf,,, [$wchar_headers]) dnl MinGW has a vswprintf with a different prototype, and dnl a _vsnwprintf with the correct prototype, but AC_CHECK_FUNCS dnl finds it even if it is not declared in some versions... AC_MSG_CHECKING([for _vsnwprintf]) AC_TRY_COMPILE([#include ], [&_vsnwprintf;], [AC_MSG_RESULT([yes]) AC_DEFINE(HAVE__VSNWPRINTF)], [AC_MSG_RESULT([no])]); fi if test "$wxUSE_FILE" = "yes"; then WX_CHECK_FUNCS(fsync) fi dnl at least under IRIX with mipsPro the C99 round() function is available when dnl building using the C compiler but not when using C++ one AC_LANG_PUSH(C++) WX_CHECK_FUNCS(round,,,[#include ]) AC_LANG_POP() dnl the following tests are for Unix(like) systems only if test "$TOOLKIT" != "MSW"; then dnl check for available version of iconv() if test "$wxUSE_LIBICONV" != "no" ; then AM_ICONV LIBS="$LIBICONV $LIBS" fi dnl check for POSIX signals if we need them if test "$wxUSE_ON_FATAL_EXCEPTION" = "yes" -a "$wxUSE_UNIX" = "yes"; then AC_CHECK_FUNCS(sigaction) if test "$ac_cv_func_sigaction" = "no"; then AC_MSG_WARN([No POSIX signal functions on this system, wxApp::OnFatalException will not be called]) wxUSE_ON_FATAL_EXCEPTION=no fi if test "$wxUSE_ON_FATAL_EXCEPTION" = "yes"; then AC_CACHE_CHECK([for sa_handler type], wx_cv_type_sa_handler, [ dnl C compiler happily compiles the code even if there is type mismatch AC_LANG_PUSH(C++) AC_TRY_COMPILE([#include ], [ extern void testSigHandler(int); struct sigaction sa; sa.sa_handler = testSigHandler; ], [ wx_cv_type_sa_handler=int ], [ wx_cv_type_sa_handler=void ]) AC_LANG_POP() ]) AC_DEFINE_UNQUOTED(wxTYPE_SA_HANDLER, $wx_cv_type_sa_handler) fi fi dnl backtrace() and backtrace_symbols() for wxStackWalker if test "$wxUSE_STACKWALKER" = "yes" -a "$wxUSE_UNIX" = "yes"; then AC_CACHE_CHECK([for backtrace() in ], wx_cv_func_backtrace, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE([#include ], [ void *trace[1]; char **messages; backtrace(trace, 1); messages = backtrace_symbols(trace, 1); ], wx_cv_func_backtrace=yes, wx_cv_func_backtrace=no ) AC_LANG_POP() ] ) if test "$wx_cv_func_backtrace" = "no"; then AC_MSG_WARN([backtrace() is not available, wxStackWalker will not be available]) wxUSE_STACKWALKER=no else AC_CACHE_CHECK([for __cxa_demangle() in ], wx_cv_func_cxa_demangle, [ AC_LANG_PUSH(C++) AC_TRY_LINK([#include ], [ int rc; __cxxabiv1::__cxa_demangle("foo", 0, 0, &rc); ], wx_cv_func_cxa_demangle=yes, wx_cv_func_cxa_demangle=no ) AC_LANG_POP() ] ) if test "$wx_cv_func_cxa_demangle" = "yes"; then AC_DEFINE(HAVE_CXA_DEMANGLE) fi fi fi if test "$wxUSE_STACKWALKER" = "yes" -a "$USE_WIN32" != 1 -a "$USE_UNIX" != 1; then AC_MSG_WARN([wxStackWalker is only available on Win32 and UNIX... disabled]) wxUSE_STACKWALKER=no fi dnl check for the function for temp files creation AC_CHECK_FUNCS(mkstemp mktemp, break) dnl get the library function to use for wxGetDiskSpace(): it is statfs() under dnl Linux and *BSD and statvfs() under Solaris AC_CACHE_CHECK(for statfs, wx_cv_func_statfs, AC_TRY_COMPILE( [ #if defined(__BSD__) #include #include #else #include #endif ], [ long l; struct statfs fs; statfs("/", &fs); l = fs.f_bsize; l += fs.f_blocks; l += fs.f_bavail; ], wx_cv_func_statfs=yes, wx_cv_func_statfs=no ) ) if test "$wx_cv_func_statfs" = "yes"; then dnl check whether we have its dcelaration too: some systems (AIX 4) lack it AC_CACHE_CHECK(for statfs declaration, wx_cv_func_statfs_decl, AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #if defined(__BSD__) #include #include #else #include #endif ], [ struct statfs fs; statfs("", &fs); ], wx_cv_func_statfs_decl=yes, wx_cv_func_statfs_decl=no ) AC_LANG_POP() ) if test "$wx_cv_func_statfs_decl" = "yes"; then AC_DEFINE(HAVE_STATFS_DECL) fi wx_cv_type_statvfs_t="struct statfs" AC_DEFINE(HAVE_STATFS) else AC_CACHE_CHECK(for statvfs, wx_cv_func_statvfs, AC_TRY_COMPILE( [ #include #include ], [ statvfs("/", NULL); ], wx_cv_func_statvfs=yes, wx_cv_func_statvfs=no ) ) if test "$wx_cv_func_statvfs" = "yes"; then dnl we also have to check whether we should use statvfs_t (works under dnl Solaris 8, doesn't work under Solaris 7) or "struct statvfs" (vice dnl versa) as the argument for statvfs in 64 bit off_t mode (in 32 bit dnl mode both work fine) dnl dnl for this check C++ compiler has to be used as passing incompatible dnl pointers is just a warning and not an error in C AC_CACHE_CHECK(for statvfs argument type, wx_cv_type_statvfs_t, AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #include ], [ long l; statvfs_t fs; statvfs("/", &fs); l = fs.f_bsize; l += fs.f_blocks; l += fs.f_bavail; ], wx_cv_type_statvfs_t=statvfs_t, [ AC_TRY_COMPILE( [ #include ], [ long l; struct statvfs fs; statvfs("/", &fs); l = fs.f_bsize; l += fs.f_blocks; l += fs.f_bavail; ], wx_cv_type_statvfs_t="struct statvfs", wx_cv_type_statvfs_t="unknown" ) ] ) AC_LANG_POP() ) if test "$wx_cv_type_statvfs_t" != "unknown"; then AC_DEFINE(HAVE_STATVFS) fi else dnl set it for the test below wx_cv_type_statvfs_t="unknown" fi fi if test "$wx_cv_type_statvfs_t" != "unknown"; then AC_DEFINE_UNQUOTED(WX_STATFS_T, $wx_cv_type_statvfs_t) else AC_MSG_WARN([wxGetDiskSpace() function won't work without statfs()]) fi dnl check for fcntl() or at least flock() needed by Unix implementation of dnl wxSingleInstanceChecker if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then AC_CHECK_FUNCS(fcntl flock, break) if test "$ac_cv_func_fcntl" != "yes" -a "$ac_cv_func_flock" != "yes"; then AC_MSG_WARN(wxSingleInstanceChecker not available) wxUSE_SNGLINST_CHECKER=no fi fi dnl look for a function to modify the environment AC_CHECK_FUNCS(setenv putenv, break) if test "$ac_cv_func_setenv" = "yes"; then AC_CHECK_FUNCS(unsetenv) fi HAVE_SOME_SLEEP_FUNC=0 if test "$USE_BEOS" = 1; then dnl BeOS has its own (wonder where did they get it from) sleep() function dnl in unistd.h AC_DEFINE(HAVE_SLEEP) HAVE_SOME_SLEEP_FUNC=1 fi if test "$USE_DARWIN" = 1; then dnl Mac OS X/Darwin has both nanosleep and usleep dnl but only usleep is defined in unistd.h AC_DEFINE(HAVE_USLEEP) HAVE_SOME_SLEEP_FUNC=1 fi if test "$HAVE_SOME_SLEEP_FUNC" != 1; then dnl try nanosleep() in libc and libposix4, if this fails - usleep() POSIX4_LINK= AC_CHECK_FUNCS(nanosleep, AC_DEFINE(HAVE_NANOSLEEP), [ AC_CHECK_LIB(posix4, nanosleep, [ AC_DEFINE(HAVE_NANOSLEEP) POSIX4_LINK=" -lposix4" ], [ WX_CHECK_FUNCS(usleep,, AC_MSG_WARN([wxSleep() function will not work]) ) ] ) ] ) fi dnl check for uname (POSIX) and gethostname (BSD) WX_CHECK_FUNCS(uname,,,[#include ]) if test "$wx_cv_func_uname" != yes; then WX_CHECK_FUNCS(gethostname) fi WX_CHECK_FUNCS(strtok_r, [], [], [#define _REENTRANT]) dnl check for inet_addr and inet_aton (these may live either in libc, or in dnl libnsl or libresolv or libsocket) INET_LINK= AC_CHECK_FUNCS(inet_addr, AC_DEFINE(HAVE_INET_ADDR), [ AC_CHECK_LIB(nsl, inet_addr, INET_LINK="nsl", [ AC_CHECK_LIB(resolv, inet_addr, INET_LINK="resolv", [ AC_CHECK_LIB(socket, inet_addr, INET_LINK="socket" ) ] ) ] ) ] ) AC_CHECK_FUNCS(inet_aton, AC_DEFINE(HAVE_INET_ATON), [ dnl only check it in the same lib AC_CHECK_LIB($INET_LINK, inet_aton, AC_DEFINE(HAVE_INET_ATON)) ]) if test "x$INET_LINK" != "x"; then AC_DEFINE(HAVE_INET_ADDR) INET_LINK=" -l$INET_LINK" fi WX_CHECK_FUNCS(fdopen) if test "$wxUSE_TARSTREAM" = "yes"; then WX_CHECK_FUNCS(sysconf) WX_CHECK_FUNCS(getpwuid_r, [], [], [ #define _REENTRANT #include ], [[ struct passwd pw, *ppw; char buf[1024]; getpwuid_r(0, &pw, buf, sizeof(buf), &ppw) ]]) WX_CHECK_FUNCS(getgrgid_r, [], [], [ #define _REENTRANT #include ], [[ struct group grp, *pgrp; char buf[1024]; getgrgid_r(0, &grp, buf, sizeof(buf), &pgrp) ]]) fi fi dnl =========================================================================== dnl Now we have all the info we need - use it! dnl =========================================================================== dnl flush the cache AC_CACHE_SAVE dnl --------------------------------------------------------------------------- dnl thread support for Unix (for Win32 and OS/2 see past dnl the next matching "else") dnl --------------------------------------------------------------------------- dnl under MSW (except mingw32) we always have thread support if test "$TOOLKIT" != "MSW" -a "$USE_OS2" != 1; then dnl the code below: dnl dnl defines THREADS_LINK and THREADS_CFLAGS which are the options dnl necessary to build the MT programs for the linker and compiler dnl respectively dnl dnl sets wxUSE_THREADS=1 if thread support is activated THREADS_LINK= THREADS_CFLAGS= if test "$wxUSE_THREADS" = "yes" ; then if test "$USE_BEOS" = 1; then AC_MSG_WARN([BeOS threads are not yet supported... disabled]) wxUSE_THREADS="no" fi fi if test "$wxUSE_THREADS" = "yes" ; then dnl find if POSIX threads are available dnl dnl the tests here are based on ACX_PTHREAD macro from autoconf macro dnl archive from http://ac-archive.sourceforge.net/ dnl dnl thanks to Steven G. Johnson and Alejandro dnl Forero Cuervo for the original code dnl TODO: cache the result dnl define the list of the thread options to try in the loop below dnl with the convention that anything starting with '-' is a cpp flag dnl while anything else is a library (i.e. there is an implicit "-l") THREAD_OPTS="-pthread" if test "x$SUNCXX" = xyes; then THREAD_OPTS="-mt lthread $THREAD_OPTS" fi case "${host}" in *-*-solaris2* | *-*-sunos4* ) if test "x$GCC" = "xyes"; then dnl Solaris/gcc combination use this one for some reason THREAD_OPTS="-pthreads $THREAD_OPTS" fi ;; *-*-freebsd*) dnl look, in order, for the kernel threads, then Linux threads dnl and finally the userland threads THREAD_OPTS="-kthread lthread $THREAD_OPTS c_r" ;; *-*-darwin* | *-*-cygwin* ) dnl Darwin / Mac OS X just uses -lpthread tested below dnl and so does Cygwin THREAD_OPTS="" ;; *-*-aix*) dnl AIX calls the library libpthreads - thanks IBM! THREAD_OPTS="pthreads" ;; *-hp-hpux* ) if test "x$GCC" = "xyes"; then dnl g++ versions before 3.3.2 don't support -pthread. $CXX -dumpspecs | grep 'pthread:' >/dev/null || THREAD_OPTS="" else dnl HP-UX aCC (tested with version B3910B A.06.05 [Jul 25 dnl 2005]) supports -mt THREAD_OPTS="-mt" fi ;; *-*-irix* ) dnl gcc under IRIX doesn't seem to like -pthread, but it dnl doesn't give an error for it neither, just a warning dnl message -- but this is still very annoying if test "x$GCC" = "xyes"; then THREAD_OPTS="" fi ;; *-*-qnx*) dnl under QNX thread functions are in libc so we don't need any dnl special options to link with them THREAD_OPTS="" ;; *-*-*UnixWare*) dnl flying by man pages here: Caldera online docs use this if test "x$GCC" != "xyes"; then THREAD_OPTS="-Ethread" fi ;; esac case "${host}" in *-*-qnx*) dnl -lpthread works, i.e. AC_TRY_LINK() would pass, but results dnl in warnings and is not needed under QNX so try without it dnl first THREAD_OPTS="none pthread" ;; *) dnl simply linking with libpthread should make the test below dnl work but it's far from certain that the threaded programs dnl compiled without any special switches actually work, so try dnl it after all the others THREAD_OPTS="$THREAD_OPTS pthread none" ;; esac dnl now test for all possibilities THREADS_OK=no for flag in $THREAD_OPTS; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) THREADS_CFLAGS="$flag" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) THREADS_LINK="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$THREADS_LINK $LIBS" CFLAGS="$THREADS_CFLAGS $CFLAGS" AC_TRY_LINK([#include ], [pthread_create(0,0,0,0);], THREADS_OK=yes) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($THREADS_OK) if test "x$THREADS_OK" = "xyes"; then break; fi THREADS_LINK="" THREADS_CFLAGS="" done if test "x$THREADS_OK" != "xyes"; then wxUSE_THREADS=no AC_MSG_WARN([No thread support on this system... disabled]) else dnl yes, these special compiler flags should be used with the dnl linker as well dnl dnl NB: add them to LDFLAGS immediately because we need them to be dnl used for the subsequent tests some of which can fail without dnl MT support, hence the reason for the duplication below: dnl adding them just to WXCONFIG_LDFLAGS and adding the entire dnl contents of the latter to LDFLAGS in the end is not enough. LDFLAGS="$THREADS_CFLAGS $LDFLAGS" WXCONFIG_LDFLAGS="$THREADS_CFLAGS $WXCONFIG_LDFLAGS" LIBS="$THREADS_LINK $LIBS" AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host}" in *-aix*) dnl again quoting from dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html: dnl dnl When compiling and linking with -pthread, the library dnl search path should include -L/usr/lib/threads at the dnl beginning of the path. LDFLAGS="-L/usr/lib/threads $LDFLAGS" WXCONFIG_LDFLAGS="-L/usr/lib/threads $WXCONFIG_LDFLAGS" flag="-D_THREAD_SAFE" ;; *-freebsd*) flag="-D_THREAD_SAFE" ;; *-hp-hpux* ) flag="-D_REENTRANT" if test "x$GCC" != "xyes"; then dnl see http://docs.hp.com/hpux/onlinedocs/2213/threads.htm flag="$flag -D_RWSTD_MULTI_THREAD" fi ;; *solaris* | alpha*-osf*) flag="-D_REENTRANT" ;; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then THREADS_CFLAGS="$THREADS_CFLAGS $flag" fi dnl don't add these options to CPPFLAGS as cpp might not know them WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS $THREADS_CFLAGS" fi fi dnl do other tests only if we are using threads if test "$wxUSE_THREADS" = "yes" ; then AC_CHECK_FUNCS(thr_setconcurrency) dnl can't use AC_CHECK_FUNCS for this one as it's usually a macro and so dnl wouldn't be found by it AC_CACHE_CHECK([for pthread_cleanup_push/pop], wx_cv_func_pthread_cleanup, [ dnl C compiler may treat pthread_cleanup_push() as an undeclared dnl function and not give a warning even if it's unavailable, so use dnl the C++ one for this test AC_LANG_PUSH(C++) AC_TRY_COMPILE([#include void ThreadCleanupFunc(void *p); ], [ void *p; pthread_cleanup_push(ThreadCleanupFunc, p); pthread_cleanup_pop(0); ], [ wx_cv_func_pthread_cleanup=yes ], [ wx_cv_func_pthread_cleanup=no ] ) AC_LANG_POP() ]) if test "x$wx_cv_func_pthread_cleanup" = "xyes"; then AC_DEFINE(wxHAVE_PTHREAD_CLEANUP) fi AC_CHECK_HEADERS(sched.h,,, [AC_INCLUDES_DEFAULT()]) if test "$ac_cv_header_sched_h" = "yes"; then AC_CHECK_FUNC(sched_yield, AC_DEFINE(HAVE_SCHED_YIELD), [ AC_CHECK_LIB(posix4, sched_yield, [AC_DEFINE(HAVE_SCHED_YIELD) POSIX4_LINK=" -lposix4"], AC_MSG_WARN(wxThread::Yield will not work properly) ) ] ) fi dnl to be able to set the thread priority, we need to have all of the dnl following functions: dnl 1. pthread_attr_getschedpolicy dnl 2. sched_get_priority_min and sched_get_priority_max dnl (this one can be in either libpthread or libposix4 (under Solaris)) dnl 3. pthread_attr_getschedparam and pthread_attr_setschedparam HAVE_PRIOR_FUNCS=0 AC_CHECK_FUNC(pthread_attr_getschedpolicy, [AC_CHECK_FUNC(pthread_attr_setschedparam, [AC_CHECK_FUNC(sched_get_priority_max, HAVE_PRIOR_FUNCS=1, [AC_CHECK_LIB([posix4], sched_get_priority_max, [ HAVE_PRIOR_FUNCS=1 POSIX4_LINK=" -lposix4" ], )] )] )] ) if test "$HAVE_PRIOR_FUNCS" = 1; then AC_DEFINE(HAVE_THREAD_PRIORITY_FUNCTIONS) else AC_MSG_WARN(Setting thread priority will not work) fi AC_CHECK_FUNC(pthread_cancel, AC_DEFINE(HAVE_PTHREAD_CANCEL), AC_MSG_WARN([wxThread::Kill() will not work properly])) AC_CHECK_FUNC(pthread_mutex_timedlock, AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK), AC_MSG_WARN([wxMutex::LockTimeout() will not work])) AC_CHECK_FUNC(pthread_attr_setstacksize, AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE)) dnl mutexattr_t initialization is done in quite different ways on different dnl platforms, so check for a few things: dnl dnl HAVE_MUTEX_RECURSIVE means that we can create recursive mutexes dnl HAVE_MUTEXATTR_SETTYPE means that we do it using dnl pthread_mutexattr_settype(PTHREAD_MUTEX_RECURSIVE) and if it is not dnl defined, we do it by directly assigned dnl PTHREAD_MUTEX_RECURSIVE_MUTEX_INITIALIZER_NP to attr AC_CACHE_CHECK([for pthread_mutexattr_t], wx_cv_type_pthread_mutexattr_t, [ AC_TRY_COMPILE([#include ], [ pthread_mutexattr_t attr; pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); ], wx_cv_type_pthread_mutexattr_t=yes, wx_cv_type_pthread_mutexattr_t=no ) ]) if test "$wx_cv_type_pthread_mutexattr_t" = "yes"; then AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_T) dnl check if we already have the declaration we need, it is not dnl present in some systems' headers AC_CACHE_CHECK([for pthread_mutexattr_settype declaration], wx_cv_func_pthread_mutexattr_settype_decl, [ AC_TRY_COMPILE([#include ], [ pthread_mutexattr_t attr; pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); ], wx_cv_func_pthread_mutexattr_settype_decl=yes, wx_cv_func_pthread_mutexattr_settype_decl=no ) ]) if test "$wx_cv_func_pthread_mutexattr_settype_decl" = "yes"; then AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETTYPE_DECL) fi else dnl don't despair, there may be another way to do it AC_CACHE_CHECK([for PTHREAD_RECURSIVE_MUTEX_INITIALIZER], wx_cv_type_pthread_rec_mutex_init, [ AC_TRY_COMPILE([#include ], [ pthread_mutex_t attr = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; ], [ wx_cv_type_pthread_rec_mutex_init=yes ], [ wx_cv_type_pthread_rec_mutex_init=no ] ) ]) if test "$wx_cv_type_pthread_rec_mutex_init" = "yes"; then AC_DEFINE(HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER) else dnl this may break code working elsewhere, so at least warn about it AC_MSG_WARN([wxMutex won't be recursive on this platform]) fi fi if test "$wxUSE_COMPILER_TLS" = "auto"; then if test "$USE_NETBSD" = 1; then AC_MSG_WARN([Disabling TLS under NetBSD, please contact wx-dev if it works now]) wxUSE_COMPILER_TLS=no else wxUSE_COMPILER_TLS=yes fi fi if test "$wxUSE_COMPILER_TLS" = "yes"; then dnl test for compiler thread-specific variables support AC_CACHE_CHECK([for __thread keyword], wx_cv_cc___thread, [ AC_TRY_COMPILE([#include ], [ static __thread int n = 0; static __thread int *p = 0; ], wx_cv_cc___thread=yes, wx_cv_cc___thread=no ) ] ) if test "$wx_cv_cc___thread" = "yes"; then AX_GXX_VERSION if test -n "$ax_cv_gxx_version"; then dnl g++ supports __thread since at least version 3.3 but its support dnl seems to be broken until 4.1, see dnl http://thread.gmane.org/gmane.comp.lib.wxwidgets.devel/108388 dnl dnl NB: we still need to test __thread support with dnl AC_TRY_COMPILE above even for g++ 4 as it doesn't dnl support it for all architectures (e.g. it doesn't dnl work under OS X) AC_MSG_CHECKING([whether __thread support in g++ is usable]) case "$ax_cv_gxx_version" in 1.* | 2.* | 3.* ) AC_MSG_RESULT([no, it's broken]) wx_cv_cc___thread=no ;; *) AC_MSG_RESULT([yes, it works]) ;; esac fi fi if test "$wx_cv_cc___thread" = "yes"; then AC_DEFINE(HAVE___THREAD_KEYWORD) fi fi fi dnl from if !MSW else if test "$wxUSE_THREADS" = "yes" ; then case "${host}" in x86_64-*-mingw32* ) ;; *-*-mingw32* ) dnl check if the compiler accepts -mthreads AC_CACHE_CHECK([if compiler supports -mthreads], wx_cv_cflags_mthread, [ CFLAGS_OLD="$CFLAGS" CFLAGS="-mthreads $CFLAGS" AC_TRY_COMPILE([], [], wx_cv_cflags_mthread=yes, wx_cv_cflags_mthread=no ) ] ) if test "$wx_cv_cflags_mthread" = "yes"; then dnl it does, use it WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS -mthreads" LDFLAGS="$LDFLAGS -mthreads" else dnl it doesn't CFLAGS="$CFLAGS_OLD" fi ;; *-pc-os2*emx ) WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS -Zmt -D__ST_MT_ERRNO__" LDFLAGS="$LDFLAGS -Zmt" ;; esac fi fi AC_CHECK_FUNC(localtime_r, [ AC_DEFINE(HAVE_LOCALTIME_R) ]) AC_CHECK_FUNC(gmtime_r, [ AC_DEFINE(HAVE_GMTIME_R) ]) dnl By preference, we probably should use getaddrinfo which avoids thread dnl safety issues and supports IPv6, however there currently is no code dnl for it, so testing for it is temporarily disabled and we are restricted dnl to gethostbyname_r/gethostbyaddr_r and getservbyname_r dnl AC_CHECK_FUNC(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO), [ dnl no getaddrinfo, so check for gethostbyname_r and dnl related functions (taken from python's configure.in) dnl sigh -- gethostbyname_r is a mess; it can have 3, 5 or 6 arguments AX_FUNC_WHICH_GETHOSTBYNAME_R if test "x$ac_cv_func_which_gethostbyname_r" = "xno" -o \ "x$ac_cv_func_which_gethostbyname_r" = "xunknown" ; then AC_CHECK_FUNC(gethostbyname, [ AC_DEFINE(HAVE_GETHOSTBYNAME) ]) fi dnl A similar test for getservbyname_r dnl I'm tempted to just not do this test which is taking much time and dnl do something similar as for gethostbyaddr_r, but OTOH the macro dnl doing the test already exists, so using it is easy enough. - SN AC_raf_FUNC_WHICH_GETSERVBYNAME_R if test "x$ac_cv_func_which_getservbyname_r" = "xno" -o \ "x$ac_cv_func_which_getservbyname_r" = "xunknown" ; then AC_CHECK_FUNCS(getservbyname,[ AC_DEFINE(HAVE_GETSERVBYNAME) ]) fi dnl For gethostbyaddr_r, we currently do no separate test, instead, we dnl silently assume it's available exactly if gethostbyname_r is dnl available and always requires two more arguments than dnl gethostbyname_r. dnl (also, I'm lazy and there no m4 file that's ready for use for this dnl function, although it should be easy to rewrite the gethostbyname_r dnl check to fit this case, if it's really needed. - SN ) dnl ] dnl ) if test "$wxUSE_THREADS" = "yes"; then AC_DEFINE(wxUSE_THREADS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS thread" else dnl on some systems, _REENTRANT should be defined if we want to use any _r() dnl functions - add tests for other functions here as well if test "$wx_cv_func_strtok_r" = "yes"; then AC_MSG_CHECKING(if -D_REENTRANT is needed) if test "$NEEDS_D_REENTRANT_FOR_R_FUNCS" = 1; then WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS -D_REENTRANT" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi fi fi if test "$WXGTK2" = 1 ; then AC_DEFINE_UNQUOTED(__WXGTK20__,$WXGTK2) WXGTK12=1 fi if test "$WXGTK12" = 1 ; then AC_DEFINE_UNQUOTED(__WXGTK12__,$WXGTK12) fi if test "$WXGTK127" = 1 ; then AC_DEFINE_UNQUOTED(__WXGTK127__,$WXGTK127) fi if test "$WXGPE" = 1 ; then AC_DEFINE_UNQUOTED(__WXGPE__,$WXGPE) fi dnl DEBUG_CFLAGS contains debugging options (supposed to be the same for C and C++ dnl compilers: we'd need a separate DEBUG_CXXFLAGS if this is ever not the case) DEBUG_CFLAGS= if `echo $CXXFLAGS $CFLAGS | grep " -g" >/dev/null`; then dnl the CXXFLAGS or the CFLAGS variable already contains the -g flag dnl (e.g. it was specified by the user before running configure); since dnl later they will be merged with DEBUG_CFLAGS, don't set the -g option dnl in DEBUG_CFLAGS to avoid (possibly different) flag duplicates AC_MSG_WARN([CXXFLAGS/CFLAGS already contains -g flag; ignoring the --enable-debug_info option]) elif test "$wxUSE_DEBUG_INFO" = "yes" ; then DEBUG_CFLAGS="-g" fi if test "$wxUSE_DEBUG_GDB" = "yes" ; then wxUSE_DEBUG_INFO=yes if test "$GCC" = yes; then DEBUG_CFLAGS="-ggdb" fi fi if test "$wxUSE_DEBUG_FLAG" = "no" ; then WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS -DwxDEBUG_LEVEL=0" if test "$wxUSE_GTK" = 1 ; then if test "x$wxGTK_VERSION" = "x1" ; then CPPFLAGS="-DGTK_NO_CHECK_CASTS $CPPFLAGS" fi fi fi if test "$wxUSE_MEM_TRACING" = "yes" ; then AC_DEFINE(wxUSE_MEMORY_TRACING) AC_DEFINE(wxUSE_GLOBAL_MEMORY_OPERATORS) AC_DEFINE(wxUSE_DEBUG_NEW_ALWAYS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS memcheck" fi if test "$wxUSE_DMALLOC" = "yes" ; then DMALLOC_LIBS="-ldmallocthcxx" fi dnl cc/cxx/ld option for profiling PROFILE_FLAGS= if test "$wxUSE_PROFILE" = "yes" ; then PROFILE_FLAGS=" -pg" fi if test "$GCC" = "yes" ; then if test "$wxUSE_NO_RTTI" = "yes" ; then dnl Define wxNO_RTTI on the command line because only g++ 4.3 and later dnl define __GXX_RTTI which allows us to detect the use of -fno-rtti dnl switch but we need to do it manually for the older versions. WXCONFIG_CXXFLAGS="$WXCONFIG_CXXFLAGS -DwxNO_RTTI -fno-rtti" fi if test "$wxUSE_NO_EXCEPTIONS" = "yes" ; then WXCONFIG_CXXFLAGS="$WXCONFIG_CXXFLAGS -fno-exceptions" fi if test "$wxUSE_PERMISSIVE" = "yes" ; then WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS -fpermissive" fi dnl Ian Brown reports that versions of gcc before dnl 3.0 overflow the table of contents on rs6000 as they create an entry dnl for each subroutine by default -- using the switch below only creates dnl one entry per file instead at the price of minor performance penalty dnl dnl As of wx2.4 a bug in the hppa gcc compiler causes a similar problem dnl without -ffunction-sections. No idea how long we'll need to maintain dnl this, or even the extent of gcc/wx version combinations affected, but dnl also as above, this 'fix' does not come without side effects. dnl dnl TODO: test for the gcc version here (how?) case "${host}" in powerpc*-*-aix* ) WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS -mminimal-toc" ;; *-hppa* ) WXCONFIG_CFLAGS="$WXCONFIG_CFLAGS -ffunction-sections" ;; esac fi dnl C/C++ compiler option for optimization (supposed to be the same for both) OPTIMISE_CFLAGS= if `echo $CXXFLAGS $CFLAGS | grep " -O" >/dev/null`; then dnl the CXXFLAGS or the CFLAGS variable already contains -O optimization flag dnl (e.g. it was specified by the user before running configure); since dnl later they will be merged with OPTIMISE_CFLAGS, don't set the -O option dnl in OPTIMISE_CFLAGS to avoid (possibly different) flag duplicates AC_MSG_WARN([CXXFLAGS/CFLAGS already contains -O flag; ignoring the --disable-optimise option]) else if test "$wxUSE_OPTIMISE" = "no" ; then if test "$GCC" = yes ; then dnl use -O0 because compiling with it is faster than compiling with no dnl optimization options at all (at least with g++ 3.2) OPTIMISE_CFLAGS="-O0" fi else if test "$GCC" = yes ; then case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) dnl Not all of the supported gcc versions understand dnl -fstrict-aliasing and none actually needs it (yet). OPTIMISE_CFLAGS="-O2" ;; *) dnl Switch on optimisation but keep strict-aliasing off for dnl now (see -fstrict-aliasing in the gcc manual). When it is dnl switched back on consider using -Wstrict-aliasing=2. OPTIMISE_CFLAGS="-O2 -fno-strict-aliasing" ;; esac else OPTIMISE_CFLAGS="-O" fi fi fi dnl --------------------------------------------------------------------------- dnl compatibility level dnl --------------------------------------------------------------------------- if test "x$WXWIN_COMPATIBILITY_2_6" = "xyes"; then AC_DEFINE(WXWIN_COMPATIBILITY_2_6) WXWIN_COMPATIBILITY_2_8="yes" fi if test "x$WXWIN_COMPATIBILITY_2_8" != "xno"; then AC_DEFINE(WXWIN_COMPATIBILITY_2_8) fi dnl --------------------------------------------------------------------------- dnl the library may be built without GUI classes at all dnl --------------------------------------------------------------------------- if test "$wxUSE_GUI" = "yes"; then AC_DEFINE(wxUSE_GUI) dnl the things we always pull in the GUI version of the library: dnl 1. basic things like wxApp, wxWindow, wxControl, wxFrame, wxDialog (the dnl library really can't be built without those) dnl 2. basic controls: wxButton, wxStaticText, wxTextCtrl (these are used in dnl almost any program and the first 2 are needed to show a message box dnl which want to be always able to do) dnl 3. GDI stuff: icon, cursors and all that. Although it would be very nice dnl to compile without them (if the app doesn't do any drawing, it doesn't dnl need the dcs, pens, brushes, ...), this just can't be done now dnl 4. menu stuff: wxMenu, wxMenuBar, wxMenuItem dnl 5. misc stuff: timers, settings, message box fi dnl --------------------------------------------------------------------------- dnl Unix/Windows dnl --------------------------------------------------------------------------- if test "$wxUSE_UNIX" = "yes"; then AC_DEFINE(wxUSE_UNIX) fi dnl ------------------------------------------------------------------------ dnl DLL support dnl ------------------------------------------------------------------------ dnl under MSW we always have LoadLibrary/GetProcAddress if test "$TOOLKIT" != "MSW" -a "$USE_OS2" != 1; then HAVE_DL_FUNCS=0 HAVE_SHL_FUNCS=0 if test "$wxUSE_DYNAMIC_LOADER" = "yes" -o "$wxUSE_DYNLIB_CLASS" = "yes" ; then if test "$USE_DOS" = 1; then HAVE_DL_FUNCS=0 else dnl the test is a bit complicated because we check for dlopen() both with dnl and without -ldl and we also try to find shl_load() if there is no dnl dlopen() on this system AC_CHECK_FUNCS(dlopen, [ AC_DEFINE(HAVE_DLOPEN) HAVE_DL_FUNCS=1 ], [ AC_CHECK_LIB(dl, dlopen, [ AC_DEFINE(HAVE_DLOPEN) HAVE_DL_FUNCS=1 DL_LINK=" -ldl$DL_LINK" ], [ AC_CHECK_FUNCS(shl_load, [ AC_DEFINE(HAVE_SHL_LOAD) HAVE_SHL_FUNCS=1 ], [ AC_CHECK_LIB(shl_load, dld, [ HAVE_SHL_FUNCS=1 DL_LINK=" -ldld$DL_LINK" ]) ]) ]) ]) dnl check also for dlerror() if test "$HAVE_DL_FUNCS" = 1; then AC_CHECK_FUNCS(dlerror, AC_DEFINE(HAVE_DLERROR), [ AC_CHECK_LIB(dl, dlerror, AC_DEFINE(HAVE_DLERROR)) ] ) fi fi dnl Force HAVE_DL_FUNCS on for Darwin, even if the tests failed (e.g. pre-10.3) if test "$USE_DARWIN" = 1; then dnl dlopen/dlerror is implemented in dynlib.cpp for Darwin/Mac OS X HAVE_DL_FUNCS=1 fi if test "$HAVE_DL_FUNCS" = 0; then if test "$HAVE_SHL_FUNCS" = 0; then if test "$USE_UNIX" = 1 -o "$USE_DOS" = 1; then AC_MSG_WARN([Missing dynamic loading support, several features will be disabled]) wxUSE_DYNAMIC_LOADER=no wxUSE_DYNLIB_CLASS=no else AC_MSG_WARN([Assuming wxLibrary class works on this platform]) fi fi fi fi fi if test "$wxUSE_DYNAMIC_LOADER" = "yes" ; then AC_DEFINE(wxUSE_DYNAMIC_LOADER) fi if test "$wxUSE_DYNLIB_CLASS" = "yes" ; then AC_DEFINE(wxUSE_DYNLIB_CLASS) fi dnl --------------------------------------------------------------------------- dnl Verify consistency of plugins/monolithic/shared settings: dnl --------------------------------------------------------------------------- if test "$wxUSE_PLUGINS" = "yes" ; then if test "$wxUSE_SHARED" = "no" ; then AC_MSG_WARN([plugins supported only in shared build, disabling]) wxUSE_PLUGINS=no fi if test "$wxUSE_MONOLITHIC" = "yes" ; then AC_MSG_WARN([plugins not supported monolithic build, disabling]) wxUSE_PLUGINS=no fi if test "$wxUSE_DYNLIB_CLASS" = "no" ; then AC_MSG_WARN([plugins require wxDynamicLibrary, disabling]) wxUSE_PLUGINS=no fi if test "$wxUSE_PLUGINS" = "yes" ; then AC_DEFINE(wxUSE_PLUGINS) fi fi dnl --------------------------------------------------------------------------- dnl File system watcher checks dnl --------------------------------------------------------------------------- if test "$wxUSE_FSWATCHER" = "yes"; then dnl wxFileSystemWatcher is always available under MSW but we need either dnl inotify or kqueue support in the system for it under Unix (this dnl includes OS X which does have kqueue but no other platforms) if test "$wxUSE_MSW" != "1"; then if test "$wxUSE_UNIX" = "yes"; then AC_CHECK_HEADERS(sys/inotify.h,,, [AC_INCLUDES_DEFAULT()]) if test "$ac_cv_header_sys_inotify_h" = "yes"; then AC_DEFINE(wxHAS_INOTIFY) else AC_CHECK_HEADERS(sys/event.h,,, [AC_INCLUDES_DEFAULT()]) if test "$ac_cv_header_sys_event_h" = "yes"; then AC_DEFINE(wxHAS_KQUEUE) else wxUSE_FSWATCHER=no fi fi else wxUSE_FSWATCHER=no fi else if test "$wxUSE_THREADS" != "yes"; then AC_MSG_WARN([wxFileSystemWatcher disabled due to --disable-threads]) wxUSE_FSWATCHER=no fi fi if test "$wxUSE_FSWATCHER" = "yes"; then AC_DEFINE(wxUSE_FSWATCHER) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS fswatcher" else AC_MSG_WARN([wxFileSystemWatcher won't be available on this platform]) fi fi dnl --------------------------------------------------------------------------- dnl Register non-GUI class options for makefiles and setup.h dnl --------------------------------------------------------------------------- if test "$wxUSE_STL" = "yes"; then AC_DEFINE(wxUSE_STL) fi if test "$wxUSE_EXTENDED_RTTI" = "yes"; then AC_DEFINE(wxUSE_EXTENDED_RTTI) fi if test "$wxUSE_ANY" = "yes"; then AC_DEFINE(wxUSE_ANY) fi if test "$wxUSE_APPLE_IEEE" = "yes"; then AC_DEFINE(wxUSE_APPLE_IEEE) fi if test "$wxUSE_TIMER" = "yes"; then AC_DEFINE(wxUSE_TIMER) fi dnl Unix implementation needs additional checks because audio support dnl comes in many favours: if test "$USE_UNIX" = 1 ; then dnl mmedia doesn't compile with wxMGL, remove this if this is ever fixed if test "$wxUSE_MGL" != 1; then dnl it's not enough to check for just the header because OSS under NetBSD dnl redefines ioctl as oss_ioctrl inside it and so we also need to test dnl whether we need -lossaudio at link-time AC_CACHE_CHECK([for SNDCTL_DSP_SPEED in sys/soundcard.h], ac_cv_header_sys_soundcard, [ AC_TRY_LINK([ #include #include ], [ ioctl(0, SNDCTL_DSP_SPEED, 0); ], ac_cv_header_sys_soundcard=yes, [ saveLibs="$LIBS" LIBS="$saveLibs -lossaudio" AC_TRY_LINK([ #include #include ], [ ioctl(0, SNDCTL_DSP_SPEED, 0); ], ac_cv_header_sys_soundcard=yes, [ LIBS="$saveLibs" ac_cv_header_sys_soundcard=no ] ) ] ) ]) fi if test "$ac_cv_header_sys_soundcard" = "yes"; then AC_DEFINE(HAVE_SYS_SOUNDCARD_H) fi fi WITH_PLUGIN_SDL=0 if test "$wxUSE_SOUND" = "yes"; then if test "$USE_UNIX" = 1 ; then if test "$wxUSE_LIBSDL" != "no"; then AM_PATH_SDL([1.2.0], [ EXTRALIBS_SDL="$SDL_LIBS" CFLAGS="$SDL_CFLAGS $CFLAGS" CXXFLAGS="$SDL_CFLAGS $CXXFLAGS" AC_DEFINE(wxUSE_LIBSDL) ], [wxUSE_LIBSDL="no"]) if test "$wxUSE_LIBSDL" = "yes" -a "$wxUSE_PLUGINS" = "yes" ; then WITH_PLUGIN_SDL=1 fi fi else dnl wxMGL doesn't support sound under DOS, only under Unix if test "$wxUSE_MGL" = 1; then AC_MSG_WARN([wxSound not supported in MGL under DOS... disabled]) wxUSE_SOUND="no" fi fi fi if test "$wxUSE_SOUND" = "yes"; then AC_DEFINE(wxUSE_SOUND) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS sound" fi if test "$WXGTK2" = 1; then PKG_PROG_PKG_CONFIG() if test "$wxUSE_PRINTING_ARCHITECTURE" = "yes" ; then if test "$wxUSE_GTKPRINT" = "yes" ; then PKG_CHECK_MODULES(GTKPRINT, [gtk+-unix-print-2.0 >= 2.10], [ CFLAGS="$GTKPRINT_CFLAGS $CFLAGS" CXXFLAGS="$GTKPRINT_CFLAGS $CXXFLAGS" AC_DEFINE(wxUSE_GTKPRINT) ], [ AC_MSG_WARN([GTK printing support not found (GTK+ >= 2.10), library will use GNOME printing support or standard PostScript printing]) wxUSE_GTKPRINT="no" ] ) fi if test "$wxUSE_LIBGNOMEPRINT" = "yes" ; then PKG_CHECK_MODULES(LIBGNOMEPRINTUI, [libgnomeprintui-2.2 >= 2.8], [ CFLAGS="$LIBGNOMEPRINTUI_CFLAGS $CFLAGS" CXXFLAGS="$LIBGNOMEPRINTUI_CFLAGS $CXXFLAGS" AC_DEFINE(wxUSE_LIBGNOMEPRINT) ], [ AC_MSG_WARN([libgnomeprintui not found, library will use standard PostScript printing]) wxUSE_LIBGNOMEPRINT="no" ] ) fi fi if test "$wxUSE_MIMETYPE" = "yes" ; then if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then PKG_CHECK_MODULES(GNOMEVFS, [gnome-vfs-2.0 >= 2.0], [ CFLAGS="$GNOMEVFS_CFLAGS $CFLAGS" CXXFLAGS="$GNOMEVFS_CFLAGS $CXXFLAGS" AC_DEFINE(wxUSE_LIBGNOMEVFS) ], [ AC_MSG_WARN([libgnomevfs not found, library won't be able to associate MIME type]) wxUSE_LIBGNOMEVFS="no" ] ) fi fi if test "$wxUSE_LIBHILDON" = "yes" ; then PKG_CHECK_MODULES(HILDON, [hildon-lgpl >= 0.9], [ EXTRALIBS_HILDON="$HILDON_LIBS" CFLAGS="$CFLAGS $HILDON_CFLAGS" CXXFLAGS="$CXXFLAGS $HILDON_CFLAGS" AC_DEFINE(wxUSE_LIBHILDON) ac_hildon_lgpl=1 ], [ AC_MSG_WARN([libhildon_lgpl not found]) wxUSE_LIBHILDON="no" ac_hildon_lgpl=0 ] ) if test "$ac_hildon_lgpl" = 0 ; then PKG_CHECK_MODULES(HILDON2, [hildon-1 >= 1.99], [ EXTRALIBS_HILDON="$HILDON2_LIBS" CFLAGS="$CFLAGS $HILDON2_CFLAGS" CXXFLAGS="$CXXFLAGS $HILDON2_CFLAGS" AC_DEFINE(wxUSE_LIBHILDON2) ], [ AC_MSG_WARN([libhildon_1 not found]) wxUSE_LIBHILDON2="no" ] ) fi fi fi if test "$wxUSE_CMDLINE_PARSER" = "yes"; then AC_DEFINE(wxUSE_CMDLINE_PARSER) fi if test "$wxUSE_STOPWATCH" = "yes"; then AC_DEFINE(wxUSE_STOPWATCH) fi if test "$wxUSE_DATETIME" = "yes"; then AC_DEFINE(wxUSE_DATETIME) fi if test "$wxUSE_FILE" = "yes"; then AC_DEFINE(wxUSE_FILE) fi if test "$wxUSE_FFILE" = "yes"; then AC_DEFINE(wxUSE_FFILE) fi if test "$wxUSE_ARCHIVE_STREAMS" = "yes"; then if test "$wxUSE_STREAMS" != yes; then AC_MSG_WARN(wxArchive requires wxStreams... disabled) wxUSE_ARCHIVE_STREAMS=no else AC_DEFINE(wxUSE_ARCHIVE_STREAMS) fi fi if test "$wxUSE_ZIPSTREAM" = "yes"; then if test "$wxUSE_ARCHIVE_STREAMS" != "yes"; then AC_MSG_WARN(wxZip requires wxArchive... disabled) elif test "$wxUSE_ZLIB" = "no"; then AC_MSG_WARN(wxZip requires wxZlib... disabled) else AC_DEFINE(wxUSE_ZIPSTREAM) fi fi if test "$wxUSE_TARSTREAM" = "yes"; then if test "$wxUSE_ARCHIVE_STREAMS" != "yes"; then AC_MSG_WARN(wxTar requires wxArchive... disabled) else AC_DEFINE(wxUSE_TARSTREAM) fi fi if test "$wxUSE_FILE_HISTORY" = "yes"; then AC_DEFINE(wxUSE_FILE_HISTORY) fi if test "$wxUSE_FILESYSTEM" = "yes"; then if test "$wxUSE_STREAMS" != yes -o \( "$wxUSE_FILE" != yes -a "$wxUSE_FFILE" != yes \); then AC_MSG_WARN(wxFileSystem requires wxStreams and wxFile or wxFFile... disabled) wxUSE_FILESYSTEM=no else AC_DEFINE(wxUSE_FILESYSTEM) fi fi if test "$wxUSE_FS_ARCHIVE" = "yes"; then if test "$wxUSE_FILESYSTEM" != yes -o "$wxUSE_ARCHIVE_STREAMS" != yes; then AC_MSG_WARN(wxArchiveFSHandler requires wxArchive and wxFileSystem... disabled) else AC_DEFINE(wxUSE_FS_ARCHIVE) fi fi if test "$wxUSE_FS_ZIP" = "yes"; then if test "$wxUSE_FS_ARCHIVE" != yes; then AC_MSG_WARN(wxZipFSHandler requires wxArchiveFSHandler... disabled) else AC_DEFINE(wxUSE_FS_ZIP) fi fi if test "$wxUSE_ON_FATAL_EXCEPTION" = "yes"; then if test "$USE_UNIX" != 1; then AC_MSG_WARN([Catching fatal exceptions not currently supported on this system, wxApp::OnFatalException will not be called]) wxUSE_ON_FATAL_EXCEPTION=no else AC_DEFINE(wxUSE_ON_FATAL_EXCEPTION) fi fi if test "$wxUSE_STACKWALKER" = "yes"; then AC_DEFINE(wxUSE_STACKWALKER) fi if test "$wxUSE_DEBUGREPORT" = "yes"; then if test "$USE_UNIX" != 1 -a "$USE_WIN32" != 1; then AC_MSG_WARN([Creating debug reports not currently supported on this system, disabled]) wxUSE_DEBUGREPORT=no else AC_DEFINE(wxUSE_DEBUGREPORT) if test "$wxUSE_ON_FATAL_EXCEPTION" = "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS debugrpt" fi fi fi if test "$wxUSE_SNGLINST_CHECKER" = "yes"; then AC_DEFINE(wxUSE_SNGLINST_CHECKER) fi if test "$wxUSE_BUSYINFO" = "yes"; then AC_DEFINE(wxUSE_BUSYINFO) fi if test "$wxUSE_HOTKEY" = "yes"; then if test "$wxUSE_MSW" != 1 -a "$wxUSE_OSX_COCOA" != 1 -a "$wxUSE_OSX_CARBON" != 1; then AC_MSG_WARN([Hot keys not supported by the current toolkit, disabled]) wxUSE_HOTKEY=no fi elif test "$wxUSE_HOTKEY" = "auto"; then if test "$wxUSE_MSW" = 1 -o "$wxUSE_OSX_COCOA" = 1 -o "$wxUSE_OSX_CARBON" = 1; then wxUSE_HOTKEY=yes fi fi if test "$wxUSE_HOTKEY" = "yes"; then AC_DEFINE(wxUSE_HOTKEY) fi if test "$wxUSE_STD_CONTAINERS" = "yes"; then AC_DEFINE(wxUSE_STD_CONTAINERS) fi if test "$wxUSE_STD_IOSTREAM" = "yes"; then AC_DEFINE(wxUSE_STD_IOSTREAM) fi if test "$wxUSE_STD_STRING" = "yes"; then AC_DEFINE(wxUSE_STD_STRING) fi if test "$wxUSE_STD_STRING_CONV_IN_WXSTRING" = "yes"; then AC_DEFINE(wxUSE_STD_STRING_CONV_IN_WXSTRING) fi if test "$wxUSE_STDPATHS" = "yes"; then AC_DEFINE(wxUSE_STDPATHS) fi if test "$wxUSE_TEXTBUFFER" = "yes"; then AC_DEFINE(wxUSE_TEXTBUFFER) fi if test "$wxUSE_TEXTFILE" = "yes"; then if test "$wxUSE_FILE" != "yes" -o "$wxUSE_TEXTBUFFER" != "yes" ; then AC_MSG_WARN(wxTextFile requires wxFile and wxTextBuffer... disabled) else AC_DEFINE(wxUSE_TEXTFILE) fi fi if test "$wxUSE_CONFIG" = "yes" ; then if test "$wxUSE_TEXTFILE" != "yes"; then AC_MSG_WARN(wxConfig requires wxTextFile... disabled) else AC_DEFINE(wxUSE_CONFIG) AC_DEFINE(wxUSE_CONFIG_NATIVE) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS config" fi fi if test "$wxUSE_INTL" = "yes" ; then if test "$wxUSE_FILE" != "yes"; then AC_MSG_WARN(I18n code requires wxFile... disabled) else AC_DEFINE(wxUSE_INTL) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS internat" GUIDIST="$GUIDIST INTL_DIST" fi fi if test "$wxUSE_XLOCALE" = "yes" ; then AC_DEFINE(wxUSE_XLOCALE) AC_CHECK_TYPES(locale_t,,, [#include #include ]) fi if test "$wxUSE_LOG" = "yes"; then AC_DEFINE(wxUSE_LOG) if test "$wxUSE_LOGGUI" = "yes"; then AC_DEFINE(wxUSE_LOGGUI) fi if test "$wxUSE_LOGWINDOW" = "yes"; then AC_DEFINE(wxUSE_LOGWINDOW) fi if test "$wxUSE_LOGDIALOG" = "yes"; then AC_DEFINE(wxUSE_LOG_DIALOG) fi dnl the keyboard sample requires wxUSE_LOG SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS keyboard" fi if test "$wxUSE_LONGLONG" = "yes"; then AC_DEFINE(wxUSE_LONGLONG) fi if test "$wxUSE_GEOMETRY" = "yes"; then AC_DEFINE(wxUSE_GEOMETRY) fi if test "$wxUSE_BASE64" = "yes"; then AC_DEFINE(wxUSE_BASE64) fi if test "$wxUSE_STREAMS" = "yes" ; then AC_DEFINE(wxUSE_STREAMS) fi if test "$wxUSE_PRINTF_POS_PARAMS" = "yes"; then AC_DEFINE(wxUSE_PRINTF_POS_PARAMS) fi if test "$wxUSE_OBJC_UNIQUIFYING" = "yes"; then AC_DEFINE(wxUSE_OBJC_UNIQUIFYING) fi dnl --------------------------------------------------------------------------- dnl console event loop stuff dnl --------------------------------------------------------------------------- if test "$wxUSE_CONSOLE_EVENTLOOP" = "yes"; then AC_DEFINE(wxUSE_CONSOLE_EVENTLOOP) if test "$wxUSE_UNIX" = "yes"; then if test "$wxUSE_SELECT_DISPATCHER" = "yes"; then AC_DEFINE(wxUSE_SELECT_DISPATCHER) fi if test "$wxUSE_EPOLL_DISPATCHER" = "yes"; then AC_CHECK_HEADERS(sys/epoll.h,,, [AC_INCLUDES_DEFAULT()]) if test "$ac_cv_header_sys_epoll_h" = "yes"; then AC_DEFINE(wxUSE_EPOLL_DISPATCHER) else AC_MSG_WARN([sys/epoll.h not available, wxEpollDispatcher disabled]) fi fi fi fi dnl --------------------------------------------------------------------------- dnl time/date functions dnl --------------------------------------------------------------------------- dnl check for gettimeofday (SVr4, BSD 4.3) and ftime (V7, BSD 4.3) for the dnl function to be used for high resolution timers AC_CHECK_FUNCS(gettimeofday ftime, break) if test "$ac_cv_func_gettimeofday" = "yes"; then AC_CACHE_CHECK([whether gettimeofday takes two arguments], wx_cv_func_gettimeofday_has_2_args, [ dnl on some _really_ old systems it takes only 1 argument AC_TRY_COMPILE( [ #include #include ], [ struct timeval tv; gettimeofday(&tv, NULL); ], wx_cv_func_gettimeofday_has_2_args=yes, AC_TRY_COMPILE( [ #include #include ], [ struct timeval tv; gettimeofday(&tv); ], wx_cv_func_gettimeofday_has_2_args=no, [ AC_MSG_WARN([failed to determine number of gettimeofday() arguments]) wx_cv_func_gettimeofday_has_2_args=unknown ] ) ) ]) if test "$wx_cv_func_gettimeofday_has_2_args" != "yes"; then AC_DEFINE(WX_GETTIMEOFDAY_NO_TZ) fi fi if test "$wxUSE_DATETIME" = "yes"; then dnl check for timezone variable dnl doesn't exist under Darwin / Mac OS X which uses tm_gmtoff instead AC_CACHE_CHECK(for timezone variable in , wx_cv_var_timezone, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #include ], [ int tz; tz = timezone; ], [ wx_cv_var_timezone=timezone ], [ AC_TRY_COMPILE( [ #include ], [ int tz; tz = _timezone; ], [ wx_cv_var_timezone=_timezone ], [ AC_TRY_COMPILE( [ #include ], [ int tz; tz = __timezone; ], [ wx_cv_var_timezone=__timezone ], [ if test "$USE_DOS" = 0 ; then AC_MSG_WARN(no timezone variable, will use tm_gmtoff instead) fi ] ) ] ) ] ) AC_LANG_POP() ] ) dnl as we want $wx_cv_var_timezone to be expanded, use AC_DEFINE_UNQUOTED if test "x$wx_cv_var_timezone" != x ; then AC_DEFINE_UNQUOTED(WX_TIMEZONE, $wx_cv_var_timezone) fi dnl check for localtime (it's POSIX, but the check can do no harm...) AC_CHECK_FUNCS(localtime) if test "$ac_cv_func_localtime" = "yes"; then AC_CACHE_CHECK(for tm_gmtoff in struct tm, wx_cv_struct_tm_has_gmtoff, [ AC_TRY_COMPILE( [ #include ], [ struct tm tm; tm.tm_gmtoff++; ], [ wx_cv_struct_tm_has_gmtoff=yes ], wx_cv_struct_tm_has_gmtoff=no ) ]) fi if test "$wx_cv_struct_tm_has_gmtoff" = "yes"; then AC_DEFINE(WX_GMTOFF_IN_TM) fi SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS typetest" fi dnl ------------------------------------------------------------------------ dnl wxSocket dnl ------------------------------------------------------------------------ dnl VZ: the GUI hooks wxSocket needs are not implemented yet in some toolkits if test "$wxUSE_SOCKETS" = "yes"; then if test "$wxUSE_MGL" = 1; then AC_MSG_WARN([wxSocket not yet supported under MGL... disabled]) wxUSE_SOCKETS="no" fi fi if test "$wxUSE_SOCKETS" = "yes"; then dnl under MSW we always have sockets if test "$TOOLKIT" != "MSW"; then dnl under Solaris and OS/2, socket functions live in -lsocket AC_CHECK_FUNC(socket,, [ AC_CHECK_LIB(socket, socket, if test "$INET_LINK" != " -lsocket"; then INET_LINK="$INET_LINK -lsocket" fi, [ AC_MSG_WARN([socket library not found - sockets will be disabled]) wxUSE_SOCKETS=no ] ) ] ) fi fi if test "$wxUSE_SOCKETS" = "yes" ; then dnl this test may be appropriate if building under cygwin dnl right now I'm assuming it also uses the winsock stuff dnl like mingw does.. -- RL if test "$TOOLKIT" != "MSW"; then dnl determine the type of third argument for getsockname dnl This test needs to be done in C++ mode since gsocket.cpp now dnl is C++ code and pointer cast that are possible even without dnl warning in C still fail in C++. AC_CACHE_CHECK([what is the type of the third argument of getsockname], wx_cv_type_getsockname3, [ AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #include #include ], [ socklen_t len; getsockname(0, 0, &len); ], wx_cv_type_getsockname3=socklen_t, [ dnl the compiler will compile the version with size_t dnl even if the real type of the last parameter is int dnl but it should give at least a warning about dnl converting between incompatible pointer types, so dnl try to use it to get the correct behaviour at dnl least with gcc (otherwise we'd always use size_t) CFLAGS_OLD="$CFLAGS" if test "$GCC" = yes ; then CFLAGS="-Werror $CFLAGS" fi AC_TRY_COMPILE( [ #include #include ], [ size_t len; getsockname(0, 0, &len); ], wx_cv_type_getsockname3=size_t, AC_TRY_COMPILE( [ #include #include ], [ int len; getsockname(0, 0, &len); ], wx_cv_type_getsockname3=int, wx_cv_type_getsockname3=unknown ) ) CFLAGS="$CFLAGS_OLD" ] ) AC_LANG_POP() ]) if test "$wx_cv_type_getsockname3" = "unknown"; then wxUSE_SOCKETS=no AC_MSG_WARN([Couldn't find socklen_t synonym for this system]) else AC_DEFINE_UNQUOTED(WX_SOCKLEN_T, $wx_cv_type_getsockname3) fi dnl Do this again for getsockopt as it may be different AC_CACHE_CHECK([what is the type of the fifth argument of getsockopt], wx_cv_type_getsockopt5, [ dnl Note that the rules for compatibility of pointers dnl are somewhat different between C and C++, so code dnl that fails in C++ may not even give a warning about dnl converting between incompatible pointer types in C. dnl So this test needs to be done in C++ mode. AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #include #include ], [ socklen_t len; getsockopt(0, 0, 0, 0, &len); ], wx_cv_type_getsockopt5=socklen_t, [ AC_TRY_COMPILE( [ #include #include ], [ size_t len; getsockopt(0, 0, 0, 0, &len); ], wx_cv_type_getsockopt5=size_t, AC_TRY_COMPILE( [ #include #include ], [ int len; getsockopt(0, 0, 0, 0, &len); ], wx_cv_type_getsockopt5=int, wx_cv_type_getsockopt5=unknown ) ) ] ) AC_LANG_POP() ]) if test "$wx_cv_type_getsockopt5" = "unknown"; then wxUSE_SOCKETS=no AC_MSG_WARN([Couldn't find socklen_t synonym for this system]) else AC_DEFINE_UNQUOTED(SOCKOPTLEN_T, $wx_cv_type_getsockopt5) fi fi fi if test "$wxUSE_SOCKETS" = "yes" ; then if test "$wxUSE_IPV6" = "yes"; then AC_CACHE_CHECK( [whether we have sockaddr_in6], [wx_cv_type_sockaddr_in6], [ AC_TRY_COMPILE( [ #include #include #include ], [ struct sockaddr_in6 sa6; ], wx_cv_type_sockaddr_in6=yes, wx_cv_type_sockaddr_in6=no ) ] ) if test "$wx_cv_type_sockaddr_in6"="yes"; then AC_DEFINE(wxUSE_IPV6) else AC_MSG_WARN([IPv6 support not available... disabled]) fi fi AC_DEFINE(wxUSE_SOCKETS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS sockets" fi if test "$wxUSE_PROTOCOL" = "yes"; then if test "$wxUSE_SOCKETS" != "yes"; then AC_MSG_WARN(Protocol classes require sockets... disabled) wxUSE_PROTOCOL=no fi fi if test "$wxUSE_PROTOCOL" = "yes"; then AC_DEFINE(wxUSE_PROTOCOL) if test "$wxUSE_PROTOCOL_HTTP" = "yes"; then AC_DEFINE(wxUSE_PROTOCOL_HTTP) fi if test "$wxUSE_PROTOCOL_FTP" = "yes"; then AC_DEFINE(wxUSE_PROTOCOL_FTP) fi if test "$wxUSE_PROTOCOL_FILE" = "yes"; then AC_DEFINE(wxUSE_PROTOCOL_FILE) fi else if test "$wxUSE_FS_INET" = "yes"; then AC_MSG_WARN([HTTP filesystem require protocol classes... disabled]) wxUSE_FS_INET="no" fi fi if test "$wxUSE_URL" = "yes"; then if test "$wxUSE_PROTOCOL" != "yes"; then AC_MSG_WARN(wxURL class requires wxProtocol... disabled) wxUSE_URL=no fi if test "$wxUSE_URL" = "yes"; then AC_DEFINE(wxUSE_URL) fi fi if test "$wxUSE_VARIANT" = "yes"; then AC_DEFINE(wxUSE_VARIANT) fi if test "$wxUSE_FS_INET" = "yes"; then AC_DEFINE(wxUSE_FS_INET) fi dnl --------------------------------------------------------------------------- dnl Joystick support dnl --------------------------------------------------------------------------- if test "$wxUSE_GUI" = "yes" -a "$wxUSE_JOYSTICK" = "yes"; then wxUSE_JOYSTICK=no dnl under MSW we always have joystick support if test "$TOOLKIT" = "MSW"; then wxUSE_JOYSTICK=yes dnl mac only available on darwin elif test "$TOOLKIT" = "OSX" -o "$TOOLKIT" = "COCOA"; then if test "$USE_DARWIN" = 1; then dnl check for a bug in the headers, some have bad setEventCallout AC_MSG_CHECKING([headers have declarations needed for joystick support]) AC_LANG_PUSH(C++) AC_TRY_COMPILE( [ #include ], [ IOHIDQueueInterface *qi = NULL; IOHIDCallbackFunction cb = NULL; qi->setEventCallout(NULL, cb, NULL, NULL); ], [ wxUSE_JOYSTICK=yes ] ) AC_LANG_POP() AC_MSG_RESULT($wxUSE_JOYSTICK) fi dnl joystick support is only for Linux 2.1.x or greater else dnl wxJoystick not supported by wxMGL at all if test "$wxUSE_MGL" != 1; then dnl notice the dummy includes argument: without it, AC_CHECK_HEADER dnl checks only whether the header can be preprocessed, not that it dnl can be compiled and in Linux 2.6.16 joystick.h is present but dnl can't be compiled because of an error and with the default dnl AC_CHECK_HEADER semantics we'd still detect it in this case and dnl build would fail later AC_CHECK_HEADERS([linux/joystick.h], [wxUSE_JOYSTICK=yes],, [AC_INCLUDES_DEFAULT()]) fi fi if test "$wxUSE_JOYSTICK" = "yes"; then AC_DEFINE(wxUSE_JOYSTICK) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS joytest" else AC_MSG_WARN(Joystick not supported by this system... disabled) fi fi dnl --------------------------------------------------------------------------- dnl String stuff dnl --------------------------------------------------------------------------- if test "$wxUSE_FONTENUM" = "yes" ; then AC_DEFINE(wxUSE_FONTENUM) fi if test "$wxUSE_FONTMAP" = "yes" ; then AC_DEFINE(wxUSE_FONTMAP) fi if test "$wxUSE_UNICODE" = "yes" ; then AC_DEFINE(wxUSE_UNICODE) if test "$USE_WIN32" != 1; then wxUSE_UNICODE_MSLU=no fi if test "$USE_WIN32" = 1 -a "$wxUSE_UNICODE_MSLU" = "yes"; then AC_CHECK_LIB(unicows,main, [ AC_DEFINE(wxUSE_UNICODE_MSLU) ], [ AC_MSG_WARN([Compiler doesn't support MSLU (libunicows.a), disabled. Applications will only run on Windows NT/2000/XP!]) wxUSE_UNICODE_MSLU=no ]) fi fi if test "$wxUSE_UNICODE" = "yes" -a "$wxUSE_UNICODE_UTF8" = "yes"; then AC_DEFINE(wxUSE_UNICODE_UTF8) if test "$wxUSE_UNICODE_UTF8_LOCALE" = "yes"; then AC_DEFINE(wxUSE_UTF8_LOCALE_ONLY) fi fi dnl --------------------------------------------------------------------------- dnl big GUI components: MDI, doc/view, printing, help, ... dnl --------------------------------------------------------------------------- if test "$wxUSE_CONSTRAINTS" = "yes"; then AC_DEFINE(wxUSE_CONSTRAINTS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS layout" fi if test "$wxUSE_MDI" = "yes"; then AC_DEFINE(wxUSE_MDI) if test "$wxUSE_MDI_ARCHITECTURE" = "yes"; then AC_DEFINE(wxUSE_MDI_ARCHITECTURE) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS mdi" fi fi if test "$wxUSE_DOC_VIEW_ARCHITECTURE" = "yes" ; then AC_DEFINE(wxUSE_DOC_VIEW_ARCHITECTURE) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS docview" fi if test "$wxUSE_HELP" = "yes"; then AC_DEFINE(wxUSE_HELP) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS help" if test "$wxUSE_MSW" = 1; then if test "$wxUSE_MS_HTML_HELP" = "yes"; then AC_DEFINE(wxUSE_MS_HTML_HELP) fi fi if test "$wxUSE_WXHTML_HELP" = "yes"; then if test "$wxUSE_HTML" = "yes"; then AC_DEFINE(wxUSE_WXHTML_HELP) else AC_MSG_WARN(Cannot use wxHTML-based help without wxHTML so it won't be compiled) wxUSE_WXHTML_HELP=no fi fi fi if test "$wxUSE_PRINTING_ARCHITECTURE" = "yes" ; then AC_DEFINE(wxUSE_PRINTING_ARCHITECTURE) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS printing" fi if test "$wxUSE_POSTSCRIPT" = "yes" ; then AC_DEFINE(wxUSE_POSTSCRIPT) fi AC_DEFINE(wxUSE_AFM_FOR_POSTSCRIPT) if test "$wxUSE_SVG" = "yes"; then AC_DEFINE(wxUSE_SVG) fi dnl --------------------------------------------------------------------------- dnl wxMetafile availability dnl --------------------------------------------------------------------------- if test "$wxUSE_METAFILE" = "yes"; then if test "$wxUSE_MSW" != 1 -a "$wxUSE_MAC" != 1 -a "$wxUSE_PM" != 1; then AC_MSG_WARN([wxMetafile is not available on this system... disabled]) wxUSE_METAFILE=no fi fi dnl --------------------------------------------------------------------------- dnl IPC: IPC, Drag'n'Drop, Clipboard, ... dnl --------------------------------------------------------------------------- dnl check for ole headers and disable a few features requiring it if not dnl present (earlier versions of mingw32 don't have ole2.h) if test "$USE_WIN32" = 1 -a \( "$wxUSE_DATAOBJ" = "yes" \ -o "$wxUSE_CLIPBOARD" = "yes" \ -o "$wxUSE_OLE" = "yes" \ -o "$wxUSE_DRAG_AND_DROP" = "yes" \) ; then AC_CHECK_HEADER(ole2.h,,, [ ]) if test "$ac_cv_header_ole2_h" = "yes" ; then if test "$GCC" = yes ; then AC_MSG_CHECKING([if g++ requires -fvtable-thunks]) AC_TRY_COMPILE([#include #include ], [], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(yes) WXCONFIG_CXXFLAGS="$WXCONFIG_CXXFLAGS -fvtable-thunks"]) LIBS=" -lrpcrt4 -loleaut32 -lole32 -luuid$LIBS" if test "$wxUSE_OLE" = "yes" ; then AC_DEFINE(wxUSE_OLE) AC_DEFINE(wxUSE_OLE_AUTOMATION) AC_DEFINE(wxUSE_ACTIVEX) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS oleauto" fi fi dnl for OLE clipboard and dnd if test "$wxUSE_DATAOBJ" = "yes" ; then AC_DEFINE(wxUSE_DATAOBJ) fi else AC_MSG_WARN([Some features disabled because OLE headers not found]) wxUSE_CLIPBOARD=no wxUSE_DRAG_AND_DROP=no wxUSE_DATAOBJ=no wxUSE_OLE=no fi if test "$wxUSE_METAFILE" = "yes"; then AC_DEFINE(wxUSE_METAFILE) dnl this one should probably be made separately configurable AC_DEFINE(wxUSE_ENH_METAFILE) fi fi if test "$wxUSE_IPC" = "yes"; then if test "$wxUSE_SOCKETS" != "yes" -a "$USE_WIN32" != 1; then AC_MSG_WARN(wxWidgets IPC classes require sockets... disabled) wxUSE_IPC=no fi if test "$wxUSE_IPC" = "yes"; then AC_DEFINE(wxUSE_IPC) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS ipc" fi fi if test "$wxUSE_DATAOBJ" = "yes"; then if test "$wxUSE_MGL" = 1 -o "$wxUSE_DFB" = 1; then AC_MSG_WARN([wxDataObject not yet supported under $TOOLKIT... disabled]) wxUSE_DATAOBJ=no else AC_DEFINE(wxUSE_DATAOBJ) fi else AC_MSG_WARN([Clipboard and drag-and-drop require wxDataObject -- disabled]) wxUSE_CLIPBOARD=no wxUSE_DRAG_AND_DROP=no fi if test "$wxUSE_CLIPBOARD" = "yes"; then if test "$wxUSE_MGL" = 1 -o "$wxUSE_DFB" = 1; then AC_MSG_WARN([Clipboard not yet supported under $TOOLKIT... disabled]) wxUSE_CLIPBOARD=no fi if test "$wxUSE_CLIPBOARD" = "yes"; then AC_DEFINE(wxUSE_CLIPBOARD) fi fi if test "$wxUSE_DRAG_AND_DROP" = "yes" ; then if test "$wxUSE_GTK" = 1; then if test "$WXGTK12" != 1; then AC_MSG_WARN([Drag and drop is only supported under GTK+ 1.2... disabled]) wxUSE_DRAG_AND_DROP=no fi fi if test "$wxUSE_MOTIF" = 1 -o "$wxUSE_X11" = 1 -o "$wxUSE_MGL" = 1 -o \ "$wxUSE_DFB" = 1; then AC_MSG_WARN([Drag and drop not yet supported under $TOOLKIT... disabled]) wxUSE_DRAG_AND_DROP=no fi if test "$wxUSE_DRAG_AND_DROP" = "yes"; then AC_DEFINE(wxUSE_DRAG_AND_DROP) fi fi if test "$wxUSE_DRAG_AND_DROP" = "yes" -o "$wxUSE_CLIPBOARD" = "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS dnd" fi if test "$wxUSE_CLIPBOARD" = "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS clipboard" fi if test "$wxUSE_SPLINES" = "yes" ; then AC_DEFINE(wxUSE_SPLINES) fi if test "$wxUSE_MOUSEWHEEL" = "yes" ; then AC_DEFINE(wxUSE_MOUSEWHEEL) fi if test "$wxUSE_UIACTIONSIMULATOR" = "yes" ; then AC_DEFINE(wxUSE_UIACTIONSIMULATOR) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS uiaction" fi if test "$wxUSE_DC_TRANSFORM_MATRIX" = "yes" ; then AC_DEFINE(wxUSE_DC_TRANSFORM_MATRIX) fi dnl --------------------------------------------------------------------------- dnl GUI controls dnl --------------------------------------------------------------------------- USES_CONTROLS=0 if test "$wxUSE_CONTROLS" = "yes"; then USES_CONTROLS=1 fi if test "$wxUSE_MARKUP" = "yes"; then AC_DEFINE(wxUSE_MARKUP) fi if test "$wxUSE_ACCEL" = "yes"; then AC_DEFINE(wxUSE_ACCEL) USES_CONTROLS=1 fi if test "$wxUSE_ANIMATIONCTRL" = "yes"; then AC_DEFINE(wxUSE_ANIMATIONCTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS animate" fi if test "$wxUSE_BUTTON" = "yes"; then AC_DEFINE(wxUSE_BUTTON) USES_CONTROLS=1 fi if test "$wxUSE_BMPBUTTON" = "yes"; then AC_DEFINE(wxUSE_BMPBUTTON) USES_CONTROLS=1 fi if test "$wxUSE_CALCTRL" = "yes"; then AC_DEFINE(wxUSE_CALENDARCTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS calendar" fi if test "$wxUSE_CARET" = "yes"; then AC_DEFINE(wxUSE_CARET) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS caret" fi if test "$wxUSE_COLLPANE" = "yes"; then AC_DEFINE(wxUSE_COLLPANE) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS collpane" fi if test "$wxUSE_COMBOBOX" = "yes"; then AC_DEFINE(wxUSE_COMBOBOX) USES_CONTROLS=1 fi if test "$wxUSE_COMBOCTRL" = "yes"; then AC_DEFINE(wxUSE_COMBOCTRL) USES_CONTROLS=1 fi if test "$wxUSE_COMMANDLINKBUTTON" = "yes"; then AC_DEFINE(wxUSE_COMMANDLINKBUTTON) USES_CONTROLS=1 fi if test "$wxUSE_CHOICE" = "yes"; then AC_DEFINE(wxUSE_CHOICE) USES_CONTROLS=1 fi if test "$wxUSE_CHOICEBOOK" = "yes"; then AC_DEFINE(wxUSE_CHOICEBOOK) USES_CONTROLS=1 fi if test "$wxUSE_CHECKBOX" = "yes"; then AC_DEFINE(wxUSE_CHECKBOX) USES_CONTROLS=1 fi if test "$wxUSE_CHECKLST" = "yes"; then AC_DEFINE(wxUSE_CHECKLISTBOX) USES_CONTROLS=1 fi if test "$wxUSE_COLOURPICKERCTRL" = "yes"; then AC_DEFINE(wxUSE_COLOURPICKERCTRL) USES_CONTROLS=1 fi if test "$wxUSE_DATEPICKCTRL" = "yes"; then AC_DEFINE(wxUSE_DATEPICKCTRL) USES_CONTROLS=1 fi if test "$wxUSE_DIRPICKERCTRL" = "yes"; then AC_DEFINE(wxUSE_DIRPICKERCTRL) USES_CONTROLS=1 fi if test "$wxUSE_FILECTRL" = "yes"; then AC_DEFINE(wxUSE_FILECTRL) USES_CONTROLS=1 fi if test "$wxUSE_FILEPICKERCTRL" = "yes"; then AC_DEFINE(wxUSE_FILEPICKERCTRL) USES_CONTROLS=1 fi if test "$wxUSE_FONTPICKERCTRL" = "yes"; then AC_DEFINE(wxUSE_FONTPICKERCTRL) USES_CONTROLS=1 fi if test "$wxUSE_DISPLAY" = "yes"; then if test "$wxUSE_DFB" = 1 -o "$wxUSE_MGL" = 1; then AC_MSG_WARN([wxDisplay not yet supported under $TOOLKIT... disabled]) wxUSE_DISPLAY=no else AC_DEFINE(wxUSE_DISPLAY) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS display" fi fi if test "$wxUSE_DETECT_SM" = "yes"; then AC_DEFINE(wxUSE_DETECT_SM) fi if test "$wxUSE_GAUGE" = "yes"; then AC_DEFINE(wxUSE_GAUGE) USES_CONTROLS=1 fi if test "$wxUSE_GRID" = "yes"; then AC_DEFINE(wxUSE_GRID) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS grid" fi if test "$wxUSE_HEADERCTRL" = "yes"; then AC_DEFINE(wxUSE_HEADERCTRL) USES_CONTROLS=1 fi if test "$wxUSE_HYPERLINKCTRL" = "yes"; then AC_DEFINE(wxUSE_HYPERLINKCTRL) USES_CONTROLS=1 fi if test "$wxUSE_BITMAPCOMBOBOX" = "yes"; then AC_DEFINE(wxUSE_BITMAPCOMBOBOX) USES_CONTROLS=1 fi if test "$wxUSE_DATAVIEWCTRL" = "yes"; then AC_DEFINE(wxUSE_DATAVIEWCTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS dataview" fi if test "$wxUSE_IMAGLIST" = "yes"; then AC_DEFINE(wxUSE_IMAGLIST) fi if test "$wxUSE_INFOBAR" = "yes"; then AC_DEFINE(wxUSE_INFOBAR) fi if test "$wxUSE_LISTBOOK" = "yes"; then AC_DEFINE(wxUSE_LISTBOOK) USES_CONTROLS=1 fi if test "$wxUSE_LISTBOX" = "yes"; then AC_DEFINE(wxUSE_LISTBOX) USES_CONTROLS=1 fi if test "$wxUSE_LISTCTRL" = "yes"; then if test "$wxUSE_IMAGLIST" = "yes"; then AC_DEFINE(wxUSE_LISTCTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS listctrl" else AC_MSG_WARN([wxListCtrl requires wxImageList and won't be compiled without it]) fi fi if test "$wxUSE_EDITABLELISTBOX" = "yes"; then AC_DEFINE(wxUSE_EDITABLELISTBOX) USES_CONTROLS=1 fi if test "$wxUSE_NOTEBOOK" = "yes"; then AC_DEFINE(wxUSE_NOTEBOOK) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS notebook" fi if test "$wxUSE_NOTIFICATION_MESSAGE" = "yes"; then AC_DEFINE(wxUSE_NOTIFICATION_MESSAGE) fi if test "$wxUSE_ODCOMBOBOX" = "yes"; then AC_DEFINE(wxUSE_ODCOMBOBOX) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS combo" fi if test "$wxUSE_RADIOBOX" = "yes"; then AC_DEFINE(wxUSE_RADIOBOX) USES_CONTROLS=1 fi if test "$wxUSE_RADIOBTN" = "yes"; then AC_DEFINE(wxUSE_RADIOBTN) USES_CONTROLS=1 fi if test "$wxUSE_REARRANGECTRL" = "yes"; then AC_DEFINE(wxUSE_REARRANGECTRL) fi if test "$wxUSE_RICHMSGDLG" = "yes"; then AC_DEFINE(wxUSE_RICHMSGDLG) fi if test "$wxUSE_SASH" = "yes"; then AC_DEFINE(wxUSE_SASH) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS sashtest" fi if test "$wxUSE_SCROLLBAR" = "yes"; then AC_DEFINE(wxUSE_SCROLLBAR) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS scroll" fi if test "$wxUSE_SEARCHCTRL" = "yes"; then AC_DEFINE(wxUSE_SEARCHCTRL) USES_CONTROLS=1 fi if test "$wxUSE_SLIDER" = "yes"; then AC_DEFINE(wxUSE_SLIDER) USES_CONTROLS=1 fi if test "$wxUSE_SPINBTN" = "yes"; then AC_DEFINE(wxUSE_SPINBTN) USES_CONTROLS=1 fi if test "$wxUSE_SPINCTRL" = "yes"; then AC_DEFINE(wxUSE_SPINCTRL) USES_CONTROLS=1 fi if test "$wxUSE_SPLITTER" = "yes"; then AC_DEFINE(wxUSE_SPLITTER) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS splitter" fi if test "$wxUSE_STATBMP" = "yes"; then AC_DEFINE(wxUSE_STATBMP) USES_CONTROLS=1 fi if test "$wxUSE_STATBOX" = "yes"; then AC_DEFINE(wxUSE_STATBOX) USES_CONTROLS=1 fi if test "$wxUSE_STATTEXT" = "yes"; then AC_DEFINE(wxUSE_STATTEXT) USES_CONTROLS=1 fi if test "$wxUSE_STATLINE" = "yes"; then AC_DEFINE(wxUSE_STATLINE) USES_CONTROLS=1 fi if test "$wxUSE_STATUSBAR" = "yes"; then dnl this will get undefined in wx/chkconf.h if it's not supported AC_DEFINE(wxUSE_NATIVE_STATUSBAR) AC_DEFINE(wxUSE_STATUSBAR) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS statbar" fi if test "$wxUSE_TEXTCTRL" = "yes"; then AC_DEFINE(wxUSE_TEXTCTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS text" dnl we don't have special switches to disable wxUSE_RICHEDIT[2], it doesn't dnl seem useful to allow disabling them AC_DEFINE(wxUSE_RICHEDIT) AC_DEFINE(wxUSE_RICHEDIT2) fi if test "$wxUSE_TOGGLEBTN" = "yes"; then if test "$wxUSE_OLD_COCOA" = 1 ; then AC_MSG_WARN([Toggle button not yet supported under Mac OS X... disabled]) wxUSE_TOGGLEBTN=no fi if test "$wxUSE_TOGGLEBTN" = "yes"; then AC_DEFINE(wxUSE_TOGGLEBTN) USES_CONTROLS=1 fi fi if test "$wxUSE_TOOLBAR" = "yes"; then AC_DEFINE(wxUSE_TOOLBAR) USES_CONTROLS=1 if test "$wxUSE_UNIVERSAL" = "yes"; then wxUSE_TOOLBAR_NATIVE="no" else wxUSE_TOOLBAR_NATIVE="yes" AC_DEFINE(wxUSE_TOOLBAR_NATIVE) fi SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS toolbar" fi if test "$wxUSE_TOOLTIPS" = "yes"; then if test "$wxUSE_MOTIF" = 1; then AC_MSG_WARN([wxTooltip not supported yet under Motif... disabled]) else if test "$wxUSE_UNIVERSAL" = "yes"; then AC_MSG_WARN([wxTooltip not supported yet in wxUniversal... disabled]) else AC_DEFINE(wxUSE_TOOLTIPS) fi fi fi if test "$wxUSE_TREEBOOK" = "yes"; then AC_DEFINE(wxUSE_TREEBOOK) USES_CONTROLS=1 fi if test "$wxUSE_TOOLBOOK" = "yes"; then AC_DEFINE(wxUSE_TOOLBOOK) USES_CONTROLS=1 fi if test "$wxUSE_TREECTRL" = "yes"; then if test "$wxUSE_IMAGLIST" = "yes"; then AC_DEFINE(wxUSE_TREECTRL) USES_CONTROLS=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS treectrl" else AC_MSG_WARN([wxTreeCtrl requires wxImageList and won't be compiled without it]) fi fi if test "$wxUSE_POPUPWIN" = "yes"; then if test "$wxUSE_OLD_COCOA" = 1 ; then AC_MSG_WARN([Popup window not yet supported under Mac OS X... disabled]) else if test "$wxUSE_PM" = 1; then AC_MSG_WARN([wxPopupWindow not yet supported under PM... disabled]) else AC_DEFINE(wxUSE_POPUPWIN) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS popup" USES_CONTROLS=1 fi fi fi if test "$wxUSE_DIALUP_MANAGER" = "yes"; then if test "$wxUSE_MAC" = 1 -o "$wxUSE_OLD_COCOA" = 1 -o "$wxUSE_MGL" = 1; then AC_MSG_WARN([Dialup manager not supported on this platform... disabled]) else AC_DEFINE(wxUSE_DIALUP_MANAGER) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS dialup" fi fi if test "$wxUSE_TIPWINDOW" = "yes"; then if test "$wxUSE_PM" = 1; then AC_MSG_WARN([wxTipWindow not yet supported under PM... disabled]) else AC_DEFINE(wxUSE_TIPWINDOW) fi fi if test "$USES_CONTROLS" = 1; then AC_DEFINE(wxUSE_CONTROLS) fi dnl --------------------------------------------------------------------------- dnl misc options dnl --------------------------------------------------------------------------- dnl please keep the settings below in alphabetical order if test "$wxUSE_ACCESSIBILITY" = "yes"; then AC_DEFINE(wxUSE_ACCESSIBILITY) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS access" fi if test "$wxUSE_ARTPROVIDER_STD" = "yes"; then AC_DEFINE(wxUSE_ARTPROVIDER_STD) fi if test "$wxUSE_ARTPROVIDER_TANGO" = "auto"; then dnl Tango-based art provider is not needed in GTK-based ports as the dnl native art provider completely replaces it. if test "$wxUSE_GTK" != 1; then dnl It also requires support for memory-mapped PNG images. if test "$wxUSE_LIBPNG" != no -a \ "$wxUSE_IMAGE" = yes -a \ "$wxUSE_STREAMS" = yes; then wxUSE_ARTPROVIDER_TANGO="yes" fi fi fi if test "$wxUSE_ARTPROVIDER_TANGO" = "yes"; then AC_DEFINE(wxUSE_ARTPROVIDER_TANGO) fi if test "$wxUSE_DRAGIMAGE" = "yes"; then AC_DEFINE(wxUSE_DRAGIMAGE) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS dragimag" fi if test "$wxUSE_EXCEPTIONS" = "yes"; then if test "$wxUSE_NO_EXCEPTIONS" = "yes" ; then AC_MSG_WARN([--enable-exceptions can't be used with --enable-no_exceptions]) else AC_DEFINE(wxUSE_EXCEPTIONS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS except" fi fi USE_HTML=0 if test "$wxUSE_HTML" = "yes"; then AC_DEFINE(wxUSE_HTML) USE_HTML=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS html html/about html/help html/helpview html/printing html/test html/virtual html/widget html/zip htlbox" fi if test "$wxUSE_WEBKIT" = "yes"; then if test "$wxUSE_MAC" = 1 -a "$USE_DARWIN" = 1; then old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-x objective-c++ $CPPFLAGS" AC_CHECK_HEADER([WebKit/HIWebView.h], [ AC_DEFINE(wxUSE_WEBKIT) WEBKIT_LINK="-framework WebKit" ], [ AC_MSG_WARN([WebKit headers not found; disabling wxWebKit]) wxUSE_WEBKIT=no ], [ #include #include ]) CPPFLAGS="$old_CPPFLAGS" elif test "$wxUSE_OLD_COCOA" = 1; then AC_DEFINE(wxUSE_WEBKIT) else wxUSE_WEBKIT=no fi if test "$wxUSE_WEBKIT" = "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS html/htmlctrl" fi fi USE_XRC=0 if test "$wxUSE_XRC" = "yes"; then if test "$wxUSE_XML" != "yes"; then AC_MSG_WARN([XML library not built, XRC resources disabled]) wxUSE_XRC=no else AC_DEFINE(wxUSE_XRC) USE_XRC=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS xrc" fi fi USE_AUI=0 if test "$wxUSE_AUI" = "yes"; then AC_DEFINE(wxUSE_AUI) USE_AUI=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS aui" fi USE_PROPGRID=0 if test "$wxUSE_PROPGRID" = "yes"; then AC_DEFINE(wxUSE_PROPGRID) USE_PROPGRID=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS propgrid" fi USE_RIBBON=0 if test "$wxUSE_RIBBON" = "yes"; then AC_DEFINE(wxUSE_RIBBON) USE_RIBBON=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS ribbon" fi USE_STC=0 if test "$wxUSE_STC" = "yes"; then AC_DEFINE(wxUSE_STC) USE_STC=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS stc" dnl python is used to update src/stc.h (see build/bakefiles/scintilla.bkl) AC_PATH_PROG(PYTHON, python) if test "x$PYTHON" = "x"; then COND_PYTHON="#" fi AC_SUBST(COND_PYTHON) fi if test "$wxUSE_MENUS" = "yes"; then AC_DEFINE(wxUSE_MENUS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS menu" fi if test "$wxUSE_METAFILE" = "yes"; then AC_DEFINE(wxUSE_METAFILE) fi if test "$wxUSE_MIMETYPE" = "yes"; then AC_DEFINE(wxUSE_MIMETYPE) fi if test "$wxUSE_MINIFRAME" = "yes"; then AC_DEFINE(wxUSE_MINIFRAME) fi if test "$wxUSE_SYSTEM_OPTIONS" = "yes"; then AC_DEFINE(wxUSE_SYSTEM_OPTIONS) fi if test "$wxUSE_TASKBARICON" = "yes"; then AC_DEFINE(wxUSE_TASKBARICON) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS taskbar" fi if test "$wxUSE_VALIDATORS" = "yes"; then AC_DEFINE(wxUSE_VALIDATORS) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS validate" fi if test "$wxUSE_PALETTE" = "yes" ; then if test "$wxUSE_DFB" = 1; then AC_MSG_WARN([wxPalette not yet supported under DFB... disabled]) wxUSE_PALETTE=no else AC_DEFINE(wxUSE_PALETTE) fi fi if test "$wxUSE_UNICODE" = "yes" -a "$wxUSE_UNICODE_MSLU" = "yes" ; then dnl Must be done this late because -lunicows must be before all the other libs LIBS=" -lunicows $LIBS" fi USE_RICHTEXT=0 if test "$wxUSE_RICHTEXT" = "yes"; then AC_DEFINE(wxUSE_RICHTEXT) USE_RICHTEXT=1 SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS richtext" fi dnl --------------------------------------------------------------------------- dnl wxImage options dnl --------------------------------------------------------------------------- if test "$wxUSE_IMAGE" = "yes" ; then AC_DEFINE(wxUSE_IMAGE) if test "$wxUSE_GIF" = "yes" ; then AC_DEFINE(wxUSE_GIF) fi if test "$wxUSE_PCX" = "yes" ; then AC_DEFINE(wxUSE_PCX) fi if test "$wxUSE_TGA" = "yes" ; then AC_DEFINE(wxUSE_TGA) fi if test "$wxUSE_IFF" = "yes" ; then AC_DEFINE(wxUSE_IFF) fi if test "$wxUSE_PNM" = "yes" ; then AC_DEFINE(wxUSE_PNM) fi if test "$wxUSE_XPM" = "yes" ; then AC_DEFINE(wxUSE_XPM) fi if test "$wxUSE_ICO_CUR" = "yes" ; then AC_DEFINE(wxUSE_ICO_CUR) fi fi dnl --------------------------------------------------------------------------- dnl common dialogs dnl --------------------------------------------------------------------------- if test "$wxUSE_ABOUTDLG" = "yes"; then AC_DEFINE(wxUSE_ABOUTDLG) fi if test "$wxUSE_CHOICEDLG" = "yes"; then AC_DEFINE(wxUSE_CHOICEDLG) fi if test "$wxUSE_COLOURDLG" = "yes"; then AC_DEFINE(wxUSE_COLOURDLG) fi if test "$wxUSE_FILEDLG" = "yes"; then AC_DEFINE(wxUSE_FILEDLG) fi if test "$wxUSE_FINDREPLDLG" = "yes"; then AC_DEFINE(wxUSE_FINDREPLDLG) fi if test "$wxUSE_FONTDLG" = "yes"; then AC_DEFINE(wxUSE_FONTDLG) fi if test "$wxUSE_DIRDLG" = "yes"; then if test "$wxUSE_TREECTRL" != "yes"; then AC_MSG_WARN(wxDirDialog requires wxTreeCtrl so it won't be compiled without it) else AC_DEFINE(wxUSE_DIRDLG) fi fi if test "$wxUSE_MSGDLG" = "yes"; then AC_DEFINE(wxUSE_MSGDLG) fi if test "$wxUSE_NUMBERDLG" = "yes"; then AC_DEFINE(wxUSE_NUMBERDLG) fi if test "$wxUSE_PROGRESSDLG" = "yes"; then AC_DEFINE(wxUSE_PROGRESSDLG) fi if test "$wxUSE_SPLASH" = "yes"; then AC_DEFINE(wxUSE_SPLASH) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS splash" fi if test "$wxUSE_STARTUP_TIPS" = "yes"; then AC_DEFINE(wxUSE_STARTUP_TIPS) fi if test "$wxUSE_TEXTDLG" = "yes"; then AC_DEFINE(wxUSE_TEXTDLG) fi if test "$wxUSE_WIZARDDLG" = "yes"; then AC_DEFINE(wxUSE_WIZARDDLG) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS wizard" fi dnl --------------------------------------------------------------------------- dnl options used under wxMSW and wxPM dnl --------------------------------------------------------------------------- if test "$wxUSE_MSW" = 1 -o "$wxUSE_PM" = 1; then if test "$wxUSE_OWNER_DRAWN" = "yes"; then AC_DEFINE(wxUSE_OWNER_DRAWN) fi fi dnl --------------------------------------------------------------------------- dnl wxMSW-only options dnl --------------------------------------------------------------------------- if test "$wxUSE_MSW" = 1 ; then if test "$wxUSE_DC_CACHEING" = "yes"; then AC_DEFINE(wxUSE_DC_CACHEING) fi if test "$wxUSE_DIB" = "yes"; then AC_DEFINE(wxUSE_WXDIB) fi if test "$wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW" = "yes"; then AC_DEFINE(wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW) fi if test "$wxUSE_UXTHEME" = "yes"; then AC_DEFINE(wxUSE_UXTHEME) fi fi dnl wxUSE_MSW = 1 dnl not quite MSW-only although mostly useful to disable this under MSW if test "$wxUSE_AUTOID_MANAGEMENT" = "yes"; then AC_DEFINE(wxUSE_AUTOID_MANAGEMENT) fi if test "$USE_WIN32" = 1 ; then if test "$wxUSE_INICONF" = "yes"; then AC_DEFINE(wxUSE_INICONF) fi if test "$wxUSE_REGKEY" = "yes"; then AC_DEFINE(wxUSE_REGKEY) fi fi dnl USE_WIN32 = 1 dnl --------------------------------------------------------------------------- dnl wxGraphicsContext dnl --------------------------------------------------------------------------- dnl Under Mac we don't even provide --enable-graphics_ctx switch as we always dnl need it -- but because we don't have the option, wxUSE_GRAPHICS_CONTEXT is dnl not defined automatically and we need to do it ourselves if test "$wxUSE_MAC" = 1; then wxUSE_GRAPHICS_CONTEXT="yes" fi if test "$wxUSE_GRAPHICS_CONTEXT" = "yes"; then wx_has_graphics=0 if test "$wxUSE_MSW" = 1; then AC_CACHE_CHECK([if GDI+ is available], wx_cv_lib_gdiplus, [ dnl we need just the header, not the library, as we load the dnl GDI+ DLL dynamically anyhow during run-time AC_LANG_PUSH(C++) AC_TRY_COMPILE( [#include #include ], [ using namespace Gdiplus; ], wx_cv_lib_gdiplus=yes, wx_cv_lib_gdiplus=no ) AC_LANG_POP() ] ) if test "$wx_cv_lib_gdiplus" = "yes"; then wx_has_graphics=1 fi elif test "$wxUSE_GTK" = 1 -o "$wxUSE_X11" = 1; then PKG_CHECK_MODULES(CAIRO, cairo, [wx_has_graphics=1], [AC_MSG_WARN([Cairo library not found])] ) if test "$wx_has_graphics" = 1; then dnl Check that Cairo library is new enough: wxGraphicsContext dnl won't compile without cairo_push_group() and dnl cairo_pop_group_to_source() which are new in 1.2. save_LIBS="$LIBS" LIBS="$LIBS $CAIRO_LIBS" AC_CHECK_FUNCS([cairo_push_group]) LIBS="$save_LIBS" if test "$ac_cv_func_cairo_push_group" = "no"; then wx_has_graphics=0 AC_MSG_WARN([Cairo library is too old and misses cairo_push_group()]) else AC_DEFINE(wxUSE_CAIRO) dnl We don't need to do this for wxGTK as we already get Cairo dnl flags as part of GTK+ ones. if test "$wxUSE_GTK" != 1; then CPPFLAGS="$CAIRO_CFLAGS $CPPFLAGS" GUI_TK_LIBRARY="$GUI_TK_LIBRARY $CAIRO_LIBS" fi fi fi else dnl assume it's ok, add more checks here if needed wx_has_graphics=1 fi if test "$wx_has_graphics" = 1; then AC_DEFINE(wxUSE_GRAPHICS_CONTEXT) else AC_MSG_WARN([wxGraphicsContext won't be available]) fi fi dnl --------------------------------------------------------------------------- dnl wxMediaCtrl dnl --------------------------------------------------------------------------- USE_MEDIA=0 if test "$wxUSE_MEDIACTRL" = "yes" -o "$wxUSE_MEDIACTRL" = "auto"; then USE_MEDIA=1 dnl ----------------------------------------------------------------------- dnl GStreamer dnl ----------------------------------------------------------------------- if test "$wxUSE_GTK" = 1; then wxUSE_GSTREAMER="no" dnl ------------------------------------------------------------------- dnl Test for at least 0.8 gstreamer module from pkg-config dnl Even totem doesn't accept 0.9 evidently. dnl dnl So, we first check to see if 0.10 if available - if not we dnl try the older 0.8 version dnl ------------------------------------------------------------------- GST_VERSION_MAJOR=0 GST_VERSION_MINOR=10 GST_VERSION=$GST_VERSION_MAJOR.$GST_VERSION_MINOR if test "$wxUSE_GSTREAMER8" = "no"; then PKG_CHECK_MODULES(GST, [gstreamer-$GST_VERSION gstreamer-plugins-base-$GST_VERSION gconf-2.0], [ wxUSE_GSTREAMER="yes" GST_LIBS="$GST_LIBS -lgstinterfaces-$GST_VERSION" ], [ AC_MSG_WARN([GStreamer 0.10 not available, falling back to 0.8]) GST_VERSION_MINOR=8 ] ) else dnl check only for 0.8 GST_VERSION_MINOR=8 fi if test $GST_VERSION_MINOR = "8"; then GST_VERSION=$GST_VERSION_MAJOR.$GST_VERSION_MINOR PKG_CHECK_MODULES(GST, [gstreamer-$GST_VERSION gstreamer-interfaces-$GST_VERSION gstreamer-gconf-$GST_VERSION], wxUSE_GSTREAMER="yes", [ AC_MSG_WARN([GStreamer 0.8/0.10 not available.]) ]) fi if test "$wxUSE_GSTREAMER" = "yes"; then CPPFLAGS="$GST_CFLAGS $CPPFLAGS" EXTRALIBS_MEDIA="$GST_LIBS" AC_DEFINE(wxUSE_GSTREAMER) else USE_MEDIA=0 fi fi if test $USE_MEDIA = 1; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS mediaplayer" AC_DEFINE(wxUSE_MEDIACTRL) else if test "$wxUSE_MEDIACTRL" = "yes"; then AC_MSG_ERROR([GStreamer not available]) else dnl was set to 'auto' AC_MSG_WARN([GStreamer not available... disabling wxMediaCtrl]) fi fi fi dnl --------------------------------------------------------------------------- dnl get the string with OS info - used by wxGetOsDescription() on MacOS X dnl --------------------------------------------------------------------------- if test "$cross_compiling" != "no"; then dnl Use best guess from host as we can't use uname when cross compiling OSINFO="\"$host\"" else dnl attualy work out OS version OSINFO=`uname -s -r -m` OSINFO="\"$OSINFO\"" fi AC_DEFINE_UNQUOTED(WXWIN_OS_DESCRIPTION, $OSINFO) dnl --------------------------------------------------------------------------- dnl define the variable containing the installation prefix (used in dcpsg.cpp) dnl --------------------------------------------------------------------------- if test "x$prefix" != "xNONE"; then wxPREFIX=$prefix else wxPREFIX=$ac_default_prefix fi AC_DEFINE_UNQUOTED(wxINSTALL_PREFIX, "$wxPREFIX") dnl --------------------------------------------------------------------------- dnl define variables with all built libraries for wx-config dnl --------------------------------------------------------------------------- STD_BASE_LIBS="base" STD_GUI_LIBS="" BUILT_WX_LIBS="base" ALL_WX_LIBS="xrc stc gl media qa html adv core xml net base" if test "$wxUSE_SOCKETS" = "yes" ; then STD_BASE_LIBS="net $STD_BASE_LIBS" BUILT_WX_LIBS="net $BUILT_WX_LIBS" fi if test "$wxUSE_XML" = "yes" ; then STD_BASE_LIBS="xml $STD_BASE_LIBS" BUILT_WX_LIBS="xml $BUILT_WX_LIBS" fi if test "$wxUSE_GUI" = "yes"; then STD_GUI_LIBS="adv core" BUILT_WX_LIBS="$STD_GUI_LIBS $BUILT_WX_LIBS" if test "$wxUSE_DEBUGREPORT" = "yes" ; then STD_GUI_LIBS="qa $STD_GUI_LIBS" BUILT_WX_LIBS="qa $BUILT_WX_LIBS" fi if test "$wxUSE_HTML" = "yes" ; then STD_GUI_LIBS="html $STD_GUI_LIBS" BUILT_WX_LIBS="html $BUILT_WX_LIBS" fi if test "$wxUSE_MEDIACTRL" = "yes" ; then BUILT_WX_LIBS="media $BUILT_WX_LIBS" fi if test "$wxUSE_OPENGL" = "yes" ; then BUILT_WX_LIBS="gl $BUILT_WX_LIBS" fi if test "$wxUSE_AUI" = "yes" ; then BUILT_WX_LIBS="aui $BUILT_WX_LIBS" fi if test "$wxUSE_PROPGRID" = "yes" ; then BUILT_WX_LIBS="propgrid $BUILT_WX_LIBS" fi if test "$wxUSE_RIBBON" = "yes" ; then BUILT_WX_LIBS="ribbon $BUILT_WX_LIBS" fi if test "$wxUSE_RICHTEXT" = "yes" ; then BUILT_WX_LIBS="richtext $BUILT_WX_LIBS" fi if test "$wxUSE_STC" = "yes" ; then BUILT_WX_LIBS="stc $BUILT_WX_LIBS" fi if test "$wxUSE_XRC" = "yes" ; then STD_GUI_LIBS="xrc $STD_GUI_LIBS" BUILT_WX_LIBS="xrc $BUILT_WX_LIBS" fi fi AC_SUBST(ALL_WX_LIBS) AC_SUBST(BUILT_WX_LIBS) AC_SUBST(STD_BASE_LIBS) AC_SUBST(STD_GUI_LIBS) dnl --------------------------------------------------------------------------- dnl Output the makefiles and such from the results found above dnl --------------------------------------------------------------------------- dnl all additional libraries (except wxWidgets itself) we link with EXTRA_FRAMEWORKS= if test "$wxUSE_MAC" = 1 ; then if test "$USE_DARWIN" = 1; then if test "$wxUSE_OSX_IPHONE" = 1; then EXTRA_FRAMEWORKS="-framework IOKit -framework UIKit -framework CFNetwork -framework AudioToolbox -framework CoreFoundation -framework CoreGraphics -framework OpenGLES -framework Foundation -framework QuartzCore" else EXTRA_FRAMEWORKS="-framework IOKit -framework Carbon -framework Cocoa -framework AudioToolbox -framework System -framework OpenGL -framework QuickTime" fi fi fi if test "$wxUSE_OLD_COCOA" = 1 ; then EXTRA_FRAMEWORKS="-framework IOKit -framework Cocoa" if test "$wxUSE_MEDIACTRL" = "yes"; then EXTRA_FRAMEWORKS="$EXTRA_FRAMEWORKS -framework QuickTime" fi fi if test "$USE_DARWIN" = 1 -a "$wxUSE_MAC" != 1 -a "$wxUSE_OLD_COCOA" != 1 ; then EXTRA_FRAMEWORKS="$EXTRA_FRAMEWORKS -framework IOKit -framework CoreServices -framework System -framework ApplicationServices" fi LDFLAGS="$LDFLAGS $EXTRA_FRAMEWORKS" WXCONFIG_LDFLAGS="$WXCONFIG_LDFLAGS $EXTRA_FRAMEWORKS" LIBS="$ZLIB_LINK $POSIX4_LINK $INET_LINK $WCHAR_LINK $DL_LINK $LIBS" if test "$wxUSE_GUI" = "yes"; then dnl TODO add checks that these samples will really compile (i.e. all the dnl library features they need are present) dnl TODO some samples are never built so far: mfc (requires VC++) SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS artprov controls dialogs drawing \ erase event exec font image minimal render \ shaped svg taborder vscroll widgets wrapsizer" if test "$wxUSE_MONOLITHIC" != "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS console" fi if test "$TOOLKIT" = "MSW"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS regtest" if test "$wxUSE_UNIVERSAL" != "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS ownerdrw nativdlg dll" fi fi if test "$TOOLKIT" = "PM" -a "$wxUSE_UNIVERSAL" != "yes"; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS ownerdrw" fi else SAMPLES_SUBDIRS="console" if test "$wxUSE_SOCKETS" = "yes" ; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS sockets" fi if test "$wxUSE_IPC" = "yes" ; then SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS ipc" fi fi dnl C/C++ compiler options used to compile wxWidgets dnl dnl check for icc before gcc as icc is also recognized as gcc if test "x$INTELCC" = "xyes" ; then dnl Warnings which can't be easily suppressed in C code are disabled: dnl dnl #810: conversion from "x" to "y" may lose significant bits dnl #869: parameter "foo" was never referenced dnl #1572: floating-point equality and inequality comparisons dnl are unreliable dnl #1684: conversion from pointer to same-sized integral type dnl #2259: non-pointer conversion from "x" to "y" may lose significant dnl bits CWARNINGS="-Wall -wd810,869,981,1418,1572,1684,2259" elif test "$GCC" = yes ; then CWARNINGS="-Wall -Wundef" fi if test "x$INTELCXX" = "xyes" ; then dnl Intel compiler gives some warnings which simply can't be worked dnl around or of which we have too many (810, 869) so it's impractical to dnl keep them enabled even if in theory it would be nice and some others dnl (279) are generated for standard macros and so there is nothing we can dnl do about them dnl dnl #279: controlling expression is constant dnl #383: value copied to temporary, reference to temporary used dnl #444: destructor for base class "xxx" is not virtual dnl #981: operands are evaluated in unspecified order dnl #1418: external definition with no prior declaration dnl #1419: external declaration in primary source file dnl #1881: argument must be a constant null pointer value dnl dnl (for others see CWARNINGS above) CXXWARNINGS="-Wall -wd279,383,444,810,869,981,1418,1419,1881,2259" elif test "$GXX" = yes ; then CXXWARNINGS="-Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy" AX_CXXFLAGS_GCC_OPTION(-Woverloaded-virtual, CXXWARNINGS) dnl when building under Mac we currently get hundreds of deprecation dnl warnings for Carbon symbols from the standard headers -- disable them dnl as we already know that they're deprecated and nothing else can be seen dnl with these warnings on if test "$wxUSE_MAC" = 1 ; then CXXWARNINGS="$CXXWARNINGS -Wno-deprecated-declarations" fi fi dnl combine everything together and remove the extra white space while doing it WXCONFIG_CFLAGS=`echo $WXCONFIG_CFLAGS` WXCONFIG_CXXFLAGS=`echo $WXCONFIG_CFLAGS $WXCONFIG_CXXFLAGS` dnl add -I options we use during library compilation dnl dnl note that the order is somewhat important: wxWidgets headers should dnl come first and the one with setup.h should be before $(top_srcdir)/include dnl in case the latter contains setup.h used by non-autoconf makefiles (e.g. dnl CodeWarrior): CPPFLAGS=`echo $WXCONFIG_CPPFLAGS \ -I\\${wx_top_builddir}/lib/wx/include/${TOOLCHAIN_FULLNAME} \ -I\\${top_srcdir}/include $TOOLKIT_INCLUDE \ $CPPFLAGS ` C_AND_CXX_FLAGS="$DEBUG_CFLAGS $PROFILE_FLAGS $OPTIMISE_CFLAGS" CFLAGS=`echo $WXCONFIG_CFLAGS $CWARNINGS $C_AND_CXX_FLAGS $CFLAGS ` CXXFLAGS=`echo $WXCONFIG_CXXFLAGS $C_AND_CXX_FLAGS $CXXFLAGS ` OBJCFLAGS=`echo $WXCONFIG_CFLAGS $CWARNINGS $C_AND_CXX_FLAGS $OBJCFLAGS ` OBJCXXFLAGS=`echo $WXCONFIG_CXXFLAGS $C_AND_CXX_FLAGS $OBJCXXFLAGS ` dnl now that we added WXCONFIG_CPPFLAGS to CPPFLAGS we can add the wx-config dnl only stuff to it WXCONFIG_CPPFLAGS=`echo $WXCONFIG_CPPFLAGS $WXCONFIG_ONLY_CPPFLAGS` if test "x$MWCC" = "xyes"; then dnl Correct MW 8.3 to be more similar to GCC. In particular we dnl must use from system not our local copy on OS X, dnl but must use local not system on OS 9. dnl The following should make all -I paths usable for <> includes dnl while first checking in real system paths. With 8.3 using dnl -gccincludes it will actually check local paths before system dnl even for <> which is totally wrong. dnl Note that because this absolutely needs to be before any -I dnl that we have to tack it on to the end of the compiler commandline. CC="$CC -cwd source -I-" CXX="$CXX -cwd source -I-" fi LIBS=`echo $LIBS` EXTRALIBS="$LDFLAGS $LDFLAGS_VERSIONING $LIBS $DMALLOC_LIBS" EXTRALIBS_XML="$EXPAT_LINK" EXTRALIBS_HTML="$MSPACK_LINK" EXTRALIBS_MEDIA="$GST_LIBS" EXTRALIBS_STC="-lwxscintilla${WX_LIB_FLAVOUR}-${WX_RELEASE}${HOST_SUFFIX}" if test "$wxUSE_GUI" = "yes"; then EXTRALIBS_GUI=`echo $GUI_TK_LIBRARY $PNG_LINK $JPEG_LINK $TIFF_LINK $WEBKIT_LINK $EXTRALIBS_HILDON $EXTRALIBS_GNOMEVFS $EXTRALIBS_GNOMEPRINT` fi if test "$wxUSE_OPENGL" = "yes"; then EXTRALIBS_OPENGL="$LDFLAGS_GL $OPENGL_LIBS" fi LDFLAGS="$LDFLAGS $PROFILE_FLAGS" WXCONFIG_LIBS="$LIBS" dnl wx-config must output builtin 3rd party libs in --libs in static build: if test "$wxUSE_REGEX" = "builtin" ; then wxconfig_3rdparty="regex${lib_unicode_suffix} $wxconfig_3rdparty" fi if test "$wxUSE_EXPAT" = "builtin" ; then wxconfig_3rdparty="expat $wxconfig_3rdparty" fi if test "$wxUSE_LIBTIFF" = "builtin" ; then wxconfig_3rdparty="tiff $wxconfig_3rdparty" fi if test "$wxUSE_LIBJPEG" = "builtin" ; then wxconfig_3rdparty="jpeg $wxconfig_3rdparty" fi if test "$wxUSE_LIBPNG" = "builtin" ; then wxconfig_3rdparty="png $wxconfig_3rdparty" fi if test "$wxUSE_ZLIB" = "builtin" ; then wxconfig_3rdparty="zlib $wxconfig_3rdparty" fi for i in $wxconfig_3rdparty ; do WXCONFIG_LIBS="-lwx${i}${WX_LIB_FLAVOUR}-${WX_RELEASE}${HOST_SUFFIX} $WXCONFIG_LIBS" done if test "x$wxUSE_UNIVERSAL" = "xyes" ; then WXUNIV=1 case "$wxUNIV_THEMES" in ''|all) AC_DEFINE(wxUSE_ALL_THEMES) ;; *) for t in `echo $wxUNIV_THEMES | tr , ' ' | tr '[[a-z]]' '[[A-Z]]'`; do AC_DEFINE_UNQUOTED(wxUSE_THEME_$t) done esac else WXUNIV=0 fi AC_SUBST(wxUSE_ZLIB) AC_SUBST(wxUSE_REGEX) AC_SUBST(wxUSE_EXPAT) AC_SUBST(wxUSE_LIBJPEG) AC_SUBST(wxUSE_LIBPNG) AC_SUBST(wxUSE_LIBTIFF) if test $wxUSE_MONOLITHIC = "yes" ; then MONOLITHIC=1 else MONOLITHIC=0 fi if test $wxUSE_PLUGINS = "yes" ; then USE_PLUGINS=1 else USE_PLUGINS=0 fi if test "$wxUSE_DEBUGREPORT" = "yes" ; then USE_QA=1 else USE_QA=0 fi if test $wxUSE_OFFICIAL_BUILD = "yes" ; then OFFICIAL_BUILD=1 else OFFICIAL_BUILD=0 fi AC_SUBST(VENDOR) AC_SUBST(OFFICIAL_BUILD) AC_SUBST(WX_FLAVOUR) AC_SUBST(WX_LIB_FLAVOUR) AC_SUBST(WXUNIV) AC_SUBST(MONOLITHIC) AC_SUBST(USE_PLUGINS) AC_SUBST(LIBS) AC_SUBST(CXXWARNINGS) AC_SUBST(EXTRALIBS) AC_SUBST(EXTRALIBS_XML) AC_SUBST(EXTRALIBS_HTML) AC_SUBST(EXTRALIBS_MEDIA) AC_SUBST(EXTRALIBS_GUI) AC_SUBST(EXTRALIBS_OPENGL) AC_SUBST(EXTRALIBS_SDL) AC_SUBST(EXTRALIBS_STC) AC_SUBST(WITH_PLUGIN_SDL) AC_SUBST(EXTRALIBS_GTKPRINT) AC_SUBST(EXTRALIBS_GNOMEPRINT) AC_SUBST(EXTRALIBS_GNOMEVFS) AC_SUBST(EXTRALIBS_HILDON) AC_SUBST(UNICODE) AC_SUBST(DEBUG_INFO) AC_SUBST(DEBUG_FLAG) TOOLKIT_LOWERCASE=`echo $TOOLKIT | tr '[[A-Z]]' '[[a-z]]'` AC_SUBST(TOOLKIT_LOWERCASE) AC_SUBST(TOOLKIT_VERSION) AC_SUBST(DYLIB_RPATH_INSTALL) AC_SUBST(DYLIB_RPATH_POSTLINK) AC_SUBST(SAMPLES_RPATH_FLAG) AC_SUBST(HEADER_PAD_OPTION) AC_SUBST(HOST_SUFFIX) AC_SUBST(CPPUNIT_CFLAGS) AC_SUBST(CPPUNIT_LIBS) case "$TOOLKIT" in GTK) TOOLKIT_DESC="GTK+" if test "$WXGTK2" = 1; then TOOLKIT_DESC="$TOOLKIT_DESC 2" if test "$wxUSE_GTKPRINT" = "yes" ; then TOOLKIT_EXTRA="$TOOLKIT_EXTRA GTK+ printing"; fi if test "$wxUSE_LIBGNOMEPRINT" = "yes" ; then TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomeprint"; fi if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs" fi if test "$wxUSE_LIBHILDON" = "yes"; then TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon" fi if test "$wxUSE_LIBHILDON2" = "yes"; then TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon" fi if test "$TOOLKIT_EXTRA" != ""; then TOOLKIT_DESC="$TOOLKIT_DESC with support for `echo $TOOLKIT_EXTRA | tr -s ' '`" fi fi ;; ?*) TOOLKIT_DESC=$TOOLKIT_LOWERCASE ;; *) TOOLKIT_DESC="base only" ;; esac if test "$wxUSE_WINE" = "yes"; then BAKEFILE_FORCE_PLATFORM=win32 fi dnl gcc 3.4 has a pch bug which truncates wide character constants in headers. dnl Hopefully for a non-unicode build there aren't any wide constants in dnl headers, but for a unicode build it's best to disable pch. if test "$wxUSE_UNICODE" = yes -a "$GCC" = yes -a "$bk_use_pch" != no then AC_CACHE_CHECK( [for gcc precompiled header bug], [wx_cv_gcc_pch_bug], [[ echo '#include const wchar_t test_var[] = L"awidetest";' > conftest.h echo '#include "conftest.h" int main() { printf("%ls", test_var); return 0; }' > conftest.cpp wx_cv_gcc_pch_bug="pch not supported" if $CXX conftest.h >/dev/null 2>&1 then wx_cv_gcc_pch_bug= if $CXX -o conftest$PROGRAM_EXT conftest.cpp >/dev/null 2>&1 then if tr -dc '[a-z]' < conftest$PROGRAM_EXT | grep awidetest >/dev/null then wx_cv_gcc_pch_bug=no else wx_cv_gcc_pch_bug=yes fi fi fi rm -f conftest.h conftest.gch conftest.cpp conftest$PROGRAM_EXT ]]) if test "$wx_cv_gcc_pch_bug" = yes; then dnl make the default for pch 'no' dnl further below check whether the user overrode and warn them bk_use_pch=no fi fi AC_BAKEFILE([m4_include(autoconf_inc.m4)]) dnl make install path absolute (if not already); dnl will fail with (some) MSDOS paths case ${INSTALL} in /* ) # Absolute ;; ?:* ) # Drive letter, considered as absolute. ;; *) INSTALL=`pwd`/${INSTALL} ;; esac if test "$wxUSE_GUI" = "yes"; then if test "$wxUSE_MSW" = 1 ; then if test "x$WINDRES" = "x"; then AC_MSG_ERROR([Required windres program not found]) fi RESCOMP="$WINDRES" fi if test "$wxUSE_MAC" = 1 -o "$wxUSE_OLD_COCOA" = 1; then dnl base name of the resource file for wxMac must be the same dnl as library installation base name (-install_name) WX_RESOURCES_MACOSX_ASCII="libwx_${TOOLCHAIN_NAME}.${wx_release_number}.r" WX_RESOURCES_MACOSX_DATA="libwx_${TOOLCHAIN_NAME}.${wx_release_number}.rsrc" dnl add the resources target for wxMac LIBWXMACRES="\$(wx_top_builddir)/lib/${WX_RESOURCES_MACOSX_ASCII}" AC_CHECK_PROG(DEREZ, DeRez, DeRez, /Developer/Tools/DeRez) MACSETFILE="\$(SETFILE)" dnl resources are bundled both with shared library and applications dnl since the carb resource *must* be included in the application if test "$wxUSE_OSX_CARBON" = 1; then POSTLINK_COMMAND="\$(REZ) -d __DARWIN__ -t APPL Carbon.r -o" RESCOMP="$REZ" WXCONFIG_RESFLAGS="-d __DARWIN__ -t APPL Carbon.r -o" else POSTLINK_COMMAND="cat /dev/null | \$(REZ) -d __DARWIN__ -t APPL ${LIBWXMACRES}" RESCOMP="cat /dev/null \| $REZ" WXCONFIG_RESFLAGS="-d __DARWIN__ -t APPL \$libdir/$WX_RESOURCES_MACOSX_ASCII" fi else dnl default value is to (silently) do nothing in the makefile MACSETFILE="@true" if test "$wxUSE_PM" = 1; then RESCOMP="emxbind" WXCONFIG_RESFLAGS="-ep" dnl Is this one really used anywhere for pm? POSTLINK_COMMAND="$RESCOMP $WXCONFIG_RESFLAGS" else POSTLINK_COMMAND="@true" fi fi fi dnl wxUSE_GUI = 1 dnl find out if the compiler supports PCH dnl dnl TODO: this should be in bakefile if test $GCC_PCH = 1 then if test "$wx_cv_gcc_pch_bug" = yes; then AC_MSG_WARN([*** Precompiled header support is broken on this compiler]) AC_MSG_WARN([*** --enable-precomp-headers is not recommended]) AC_MSG_WARN([*** see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13361]) fi # Our WX_PRECOMP flag does not make sense for any language except C++ because # the headers that benefit from precompilation are mostly C++ headers. CXXFLAGS="-DWX_PRECOMP $CXXFLAGS" # When Bakefile can do multi-language PCH (e.g. C++ and Objective-C++) enable this: #OBJCXXFLAGS="-DWX_PRECOMP $CXXFLAGS" fi dnl HACK ALERT!! dnl For now, we need to alter bk-deps not to generate deps dnl when we've configured a Universal binary build. dnl The next version of Bakefile will have the correct fix for this dnl at which time, this hack can be removed. if test "$wxUSE_MAC" = 1 ; then if test "x$wxUSE_UNIVERSAL_BINARY" != "xno" ; then sed "s/DEPSMODE=gcc/DEPSMODE=none/" < bk-deps > temp mv temp bk-deps chmod +x bk-deps fi fi if test "$wxUSE_SHARED" = "yes"; then dnl Need addtional flag on OS/2, so override bakefiles value dnl (there currently is no suitable variable to which the dnl missing flags could be added, AFAICS. SN, 18.12.2004. ) case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) SHARED_LD_CC="`pwd`/dllar.sh -name-mangler-script ./dllnames.sh -libf INITINSTANCE -libf TERMINSTANCE -o" SHARED_LD_CXX="`pwd`/dllar.sh -name-mangler-script ./dllnames.sh -libf INITINSTANCE -libf TERMINSTANCE -o" cp -p ${srcdir}/src/os2/dllnames.sh . cp -p ${srcdir}/src/os2/dllar.sh . ;; esac fi if test "$wxUSE_OMF" = "yes"; then case "${host}" in *-pc-os2_emx | *-pc-os2-emx ) LDFLAGS="$LDFLAGS -Zlinker /EXEPACK" LDFLAGS_GUI="-Zlinker /PMTYPE:PM" WXCONFIG_LDFLAGS_GUI="-Zlinker /PMTYPE:PM" ;; esac fi dnl TOOLCHAIN_DEFS should be used for both wx and client code WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS $TOOLCHAIN_DEFS" dnl Sun cc is compatible with gcc and so either of them can use the C dnl libraries built with the other, i.e. gcc can be used to build wxGTK under dnl Solaris where GTK+ is compiled using cc and cc can be used under Linux dnl where GTK+ is built with gcc dnl dnl However the compiler options are not compatible at all and in particular dnl gcc doesn't like cc -mt option and cc doesn't like -pthread. We simply dnl filter them out as we already have the correct options for multithreaded dnl programs if we're using threads (and if we don't, it shouldn't matter) case "${host}" in *-*-solaris2* ) dnl system packages are compiled with Sun CC and so pkg-config outputs dnl CC-specific "-mt" flag, remove it when using gcc if test "$GCC" = yes; then CPPFLAGS=`echo $CPPFLAGS | sed 's/-mt//'` LIBS=`echo $LIBS | sed 's/-mt//'` EXTRALIBS_GUI=`echo $EXTRALIBS_GUI | sed 's/-mt//'` fi ;; *-*-linux* ) dnl OTOH when using Sun CC under Linux, the flags contain gcc-specific dnl -pthreads which Sun CC doesn't know about if test "x$SUNCXX" = xyes; then CPPFLAGS=`echo $CPPFLAGS | sed 's/-pthread//'` LIBS=`echo $LIBS | sed 's/-pthread//'` EXTRALIBS_GUI=`echo $EXTRALIBS_GUI | sed 's/-pthread//'` fi ;; esac dnl Add visibility support flags to CFLAGS/CXXFLAGS - do it this late so that dnl it doesn't affect compilation checks above CFLAGS="$CFLAGS $CFLAGS_VISIBILITY" CXXFLAGS="$CXXFLAGS $CXXFLAGS_VISIBILITY" OBJCFLAGS="$OBJCFLAGS $CFLAGS_VISIBILITY" OBJCXXFLAGS="$OBJCXXFLAGS $CXXFLAGS_VISIBILITY" dnl for convenience, sort the samples in alphabetical order dnl dnl FIXME For some mysterious reasons, sometimes the directories are duplicated dnl in this list - hence uniq. But normally, this shouldn't be needed! dnl dnl Unfortunately, there is a bug in OS/2's tr, such that dnl tr ' ' '\n' introduces DOS-like line breaks, whereas tr '\n' ' ' dnl only removes the Unix-like part of the introduced line break. SAMPLES_SUBDIRS="`echo $SAMPLES_SUBDIRS | tr -s ' ' | tr ' ' '\n' | sort | uniq | tr '\n' ' '| tr -d '\r'`" dnl subtle bakefile goop. dnl Used in wx-config now too, as its STATIC_FLAG with different makeup. dnl I wish we would have called it something less likely to clash with dnl things though. AC_SUBST(SHARED) dnl global options AC_SUBST(WX_LIBRARY_BASENAME_NOGUI) AC_SUBST(WX_LIBRARY_BASENAME_GUI) dnl toolkit options AC_SUBST(USE_GUI) AC_SUBST(AFMINSTALL) AC_SUBST(WIN32INSTALL) AC_SUBST(TOOLKIT) AC_SUBST(TOOLKIT_DIR) AC_SUBST(TOOLCHAIN_NAME) AC_SUBST(TOOLCHAIN_FULLNAME) dnl wx-config options AC_SUBST(host_alias) AC_SUBST(cross_compiling) AC_SUBST(WIDGET_SET) AC_SUBST(WX_RELEASE) AC_SUBST(WX_VERSION) AC_SUBST(WX_SUBVERSION) AC_SUBST(WX_CHARTYPE) dnl note that in addition to the usual CPP/C/CXXFLAGS which are used for dnl building the library itself, we also have WXCONFIG_-prefixed variants which dnl are used when building the libraries using the library dnl dnl so put anything which should be used only during the library build in, e.g. dnl CXXFLAGS, but put everything else (by default) into WXCONFIG_CXXFLAGS dnl dnl and, finally, for some things which should be only used by wx-config but dnl not during the library compilation, use WXCONFIG_ONLY_CPPFLAGS which is dnl added to WXCONFIG_CPPFLAGS after adding the latter to CPPFLAGS AC_SUBST(WXCONFIG_CPPFLAGS) AC_SUBST(WXCONFIG_CFLAGS) AC_SUBST(WXCONFIG_CXXFLAGS) AC_SUBST(WXCONFIG_LIBS) AC_SUBST(WXCONFIG_RPATH) AC_SUBST(WXCONFIG_LDFLAGS) AC_SUBST(WXCONFIG_LDFLAGS_GUI) AC_SUBST(WXCONFIG_RESFLAGS) dnl distribution vars AC_SUBST(GUIDIST) AC_SUBST(DISTDIR) dnl additional subdirectories where we will build AC_SUBST(SAMPLES_SUBDIRS) dnl additional libraries and linker settings AC_SUBST(LDFLAGS) AC_SUBST(LDFLAGS_GL) AC_SUBST(OPENGL_LIBS) AC_SUBST(DMALLOC_LIBS) AC_SUBST(WX_VERSION_TAG) dnl additional resurces settings AC_SUBST(RESCOMP) AC_SUBST(WINDRES) AC_SUBST(REZ) AC_SUBST(RESFLAGS) AC_SUBST(RESPROGRAMOBJ) AC_SUBST(WX_RESOURCES_MACOSX_ASCII) AC_SUBST(WX_RESOURCES_MACOSX_DATA) dnl additional for Mac OS X AC_SUBST(DEREZ) AC_SUBST(LIBWXMACRES) AC_SUBST(POSTLINK_COMMAND) AC_SUBST(MACSETFILE) dnl other tools AC_SUBST(GCC) AC_SUBST(DLLTOOL) dnl MAKE_SET will be replaced with "MAKE=..." or nothing if make sets MAKE dnl itself (this macro is required if SUBDIRS variable is used in Makefile.am dnl - and we do use it) AC_PROG_MAKE_SET AC_CONFIG_HEADERS([lib/wx/include/${TOOLCHAIN_FULLNAME}/wx/setup.h:setup.h.in]) if test "$USE_WIN32" = 1; then AC_CONFIG_COMMANDS([rcdefs.h], [ mkdir -p $outdir && $CPP $infile | sed 's/^# *[1-9].*//;s/^ *//;/./,/^$/!d' > $outdir/rcdefs.h ], [ CPP="$CPP" infile="$srcdir/include/wx/msw/genrcdefs.h" outdir="lib/wx/include/$TOOLCHAIN_FULLNAME/wx/msw" ] ) fi AC_CONFIG_FILES([ lib/wx/config/${TOOLCHAIN_FULLNAME}:wx-config.in ], [ chmod +x lib/wx/config/${TOOLCHAIN_FULLNAME} ], [ TOOLCHAIN_FULLNAME="${TOOLCHAIN_FULLNAME}" ]) AC_CONFIG_FILES([ lib/wx/config/inplace-${TOOLCHAIN_FULLNAME}:wx-config-inplace.in ], [ chmod +x lib/wx/config/inplace-${TOOLCHAIN_FULLNAME} ], [ TOOLCHAIN_FULLNAME="${TOOLCHAIN_FULLNAME}" ]) dnl this is used to run ifacecheck with the same flags used by the compiler dnl for the real compilation: AC_CONFIG_FILES([ utils/ifacecheck/rungccxml.sh ], [ chmod +x utils/ifacecheck/rungccxml.sh ]) if test "$wx_cv_version_script" = "yes"; then AC_CONFIG_FILES(version-script) fi AC_CONFIG_FILES(Makefile) AC_CONFIG_COMMANDS([wx-config], [ rm -f wx-config ${LN_S} lib/wx/config/inplace-${TOOLCHAIN_FULLNAME} wx-config ], [ TOOLCHAIN_FULLNAME="${TOOLCHAIN_FULLNAME}" LN_S="${LN_S}" ]) dnl This would give us us build dir that in every significant way dnl resembles an installed wx in prefix=$builddir. It is troublesome dnl though in this form because AC_CONFIG_LINKS will fail for directories dnl on platforms that do not have symlinks. dnl AC_CONFIG_LINKS([ include/wx-$WX_RELEASE$WX_FLAVOUR:include ]) if test "$wxWITH_SUBDIRS" != "no"; then dnl Configure samples, demos etc. directories, but only if they are present: if test "$wxUSE_GUI" = "yes"; then SUBDIRS="samples demos utils" else dnl we build wxBase only dnl there are no wxBase programs in demos SUBDIRS="samples utils" fi dnl Add tests to the list of subdirs if cppunit 1.8.0+ is detected AM_PATH_CPPUNIT(1.8.0, [SUBDIRS="$SUBDIRS tests"]) for subdir in $SUBDIRS; do if test -d ${srcdir}/${subdir} ; then if test "$wxUSE_GUI" = "yes"; then if test ${subdir} = "samples"; then dnl only take those samples which compile in the current dnl configuration and which exist makefiles="samples/Makefile.in $makefiles" for sample in $SAMPLES_SUBDIRS; do if test -d $srcdir/samples/$sample; then makefiles="samples/$sample/Makefile.in $makefiles" fi done else dnl assume that everything compiles for utils &c dnl any that shouldn't be built can be added to dnl DISABLED_UTILS, DISABLED_DEMOS disabled_var=DISABLED_`echo $subdir | tr '[[a-z]]' '[[A-Z]]'` eval "disabled=\$$disabled_var" disabled=/`echo X $disabled | sed 's@ @/|/@g'`/ makefiles=`(cd $srcdir ; find $subdir -name Makefile.in) | $EGREP -v "$disabled"` fi else dnl we build wxBase only dnl don't take all samples/utils, just those which build with wxBase if test ${subdir} = "samples"; then dnl only take those samples which compile in the current dnl configuration and which exist makefiles="samples/Makefile.in $makefiles" for sample in `echo $SAMPLES_SUBDIRS`; do if test -d $srcdir/samples/$sample; then makefiles="samples/$sample/Makefile.in $makefiles" fi done elif test ${subdir} = "utils"; then makefiles="" for util in ifacecheck ; do if test -d $srcdir/utils/$util ; then makefiles="utils/$util/src/Makefile.in \ $makefiles" fi done else dnl assume that everything compiles for tests makefiles=`(cd $srcdir ; find $subdir -name Makefile.in)` fi fi for mkin in $makefiles ; do mk=`echo $mkin | sed 's/Makefile\.in/Makefile/g'` AC_CONFIG_FILES([$mk]) done fi done fi dnl wxWITH_SUBDIRS AC_OUTPUT dnl report how we have been configured echo echo "Configured wxWidgets ${WX_VERSION} for \`${host}'" echo "" echo " Which GUI toolkit should wxWidgets use? ${TOOLKIT_DESC}" echo " Should wxWidgets be compiled into single library? ${wxUSE_MONOLITHIC:-yes}" echo " Should wxWidgets be linked as a shared library? ${wxUSE_SHARED:-no}" echo $ECHO_N " Should wxWidgets support Unicode? ${wxUSE_UNICODE:-no}$ECHO_C" if test "$wxUSE_UNICODE" = "yes"; then if test "$wxUSE_UNICODE_UTF8" = "yes"; then echo " (using UTF-8)" else echo " (using wchar_t)" fi else echo fi echo " What level of wxWidgets compatibility should be enabled?" echo " wxWidgets 2.6 ${WXWIN_COMPATIBILITY_2_6:-no}" echo " wxWidgets 2.8 ${WXWIN_COMPATIBILITY_2_8:-yes}" echo " Which libraries should wxWidgets use?" echo " STL ${wxUSE_STL}" echo " jpeg ${wxUSE_LIBJPEG-none}" echo " png ${wxUSE_LIBPNG-none}" echo " regex ${wxUSE_REGEX}" echo " tiff ${wxUSE_LIBTIFF-none}" if test "$wxUSE_X11" = 1 -o "$wxUSE_MOTIF" = 1; then echo " xpm ${wxUSE_LIBXPM-none}" fi echo " zlib ${wxUSE_ZLIB}" echo " expat ${wxUSE_EXPAT}" echo " libmspack ${wxUSE_LIBMSPACK}" echo " sdl ${wxUSE_LIBSDL}" echo "" dnl vi: set et sts=4 sw=4 com=\:dnl: stimfit-0.17.1/dist/macosx/scripts/configure.10.4.in000077500000000000000000000161151517235503400221110ustar00rootroot00000000000000AC_INIT([stimfit],[0.9.3]) AC_CONFIG_SRCDIR(src/app/app.cpp) AM_INIT_AUTOMAKE AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC AC_PROG_INSTALL AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL AC_PROG_CPP AC_PROG_AWK AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_MKDIR_P AC_PROG_CXX BUILDDATE=`date` AC_MSG_CHECKING(for kernel) case `uname` in Darwin) AC_MSG_RESULT(darwin) STF_PYTHON_LIBNAME="libstf.0.dylib" STFKERNEL="darwin" ARCH_FLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk/ -mmacosx-version-min=10.4" CFLAGS="${CFLAGS} ${ARCH_FLAGS}" CXXFLAGS="${CXXFLAGS} ${ARCH_FLAGS}" LDFLAGS="${LDFLAGS} ${ARCH_FLAGS}" OBJCFLAGS="${OBJCFLAGS} ${ARCH_FLAGS}" OBJCXXFLAGS="${OBJCXXFLAGS} ${ARCH_FLAGS}" ;; Linux) AC_MSG_RESULT(linux) STF_PYTHON_LIBNAME="libstf.so.0.0.0" CPPFLAGS="${CPPFLAGS} -D__linux__" STFKERNEL="linux" ;; *) AC_MSG_RESULT(other) AC_MSG_WARN([Platforms other than GNU/Linux and Mac OS X are not actively supported by the configure script. Use Visual Studio 2008 to build on Windows.]) STF_PYTHON_LIBNAME="libstf.so.0.0.0" STFKERNEL="other" ;; esac AC_SUBST(STF_PYTHON_LIBNAME) # Checks for libraries. AC_CHECK_LIB([fftw3], [fftw_malloc], HAVE_FFTW3="yes") if test "${HAVE_FFTW3}" != "yes" ; then AC_MSG_ERROR([Couldn't find fftw3.]) fi # Checks for python libraries. AC_ARG_ENABLE([python], AC_HELP_STRING([--enable-python],[enable python console]),[]) if test "$enable_python" = "yes" ; then AC_PYTHON_DEVEL AC_PROG_SWIG(1.3.17) SWIG_ENABLE_CXX SWIG_PYTHON AC_SUBST(SWIG) CPPFLAGS="${CPPFLAGS} -DWITH_PYTHON" CXXFLAGS="${CXXFLAGS}" CFLAGS="${CFLAGS}" LIBPYTHON_LDFLAGS=$PYTHON_LDFLAGS LIBPYTHON_INCLUDES=$PYTHON_CPPFLAGS LIBNUMPY_INCLUDES=$PYTHON_NUMPY_INCLUDE else LIBPYTHON_LDFLAGS= LIBPYTHON_INCLUDES= LIBNUMPY_INCLUDES= fi AC_SUBST(LIBPYTHON_LDFLAGS) AC_SUBST(LIBPYTHON_INCLUDES) AC_SUBST(LIBNUMPY_INCLUDES) AM_CONDITIONAL(BUILD_PYTHON, test "$enable_python" = "yes") # Checks for python libraries. AC_ARG_ENABLE([ipython], AC_HELP_STRING([--enable-ipython],[enable ipython as the default shell (experimental)]),[]) if test "$enable_ipython" = "yes" ; then CPPFLAGS="${CPPFLAGS} -DIPYTHON" fi # Optionally enables aui for doc/view architecture AC_ARG_ENABLE([aui], AC_HELP_STRING([--enable-aui],[enable AUI for the doc/view architecture (experimental)]),[]) if test "$enable_aui" = "yes" ; then CPPFLAGS="${CPPFLAGS} -DWITH_AUIDOCVIEW" fi # if this is darwin, unconditionally use atlas: if test "$STFKERNEL" = "darwin" ; then AC_CHECK_LIB([atlas], [dgetrf_], HAVE_LAPACKX="yes") if test "${HAVE_LAPACKX}" != "yes" ; then AC_CHECK_LIB([lapack], [dgetrf_], HAVE_LAPACKX="yes") if test "${HAVE_LAPACKX}" != "yes" ; then LIBLAPACK_LDFLAGS="-latlas -llapack -lblas" CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " else AC_MSG_ERROR([Couldn't find lapack.]) fi else LIBLAPACK_LDFLAGS="-latlas -llapack -lblas" CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " fi else AC_CHECK_LIB([lapack], [dgetrf_], HAVE_LAPACKX="yes") if test "${HAVE_LAPACKX}" != "yes" ; then AC_CHECK_LIB([lapack3], [dgetrf_], HAVE_LAPACK3="yes") if test "${HAVE_LAPACK3}" != "yes" ; then AC_CHECK_LIB([lapack-3], [dgetrf_], HAVE_LAPACK_3="yes") if test "${HAVE_LAPACK_3}" != "yes" ; then AC_CHECK_LIB([atlas], [dgetrf_], HAVE_ATLAS="yes") if test "${HAVE_ATLAS}" != "yes" ; then AC_MSG_ERROR([Couldn't find lapack.]) else LIBLAPACK_LDFLAGS="-llapack -latlas" CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " fi else LIBLAPACK_LDFLAGS="-llapack-3" CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " fi else LIBLAPACK_LDFLAGS=-llapack3 CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " fi else LIBLAPACK_LDFLAGS=-llapack CPPFLAGS="${CPPFLAGS} -DHAVE_LAPACK " fi fi AC_SUBST(LIBLAPACK_LDFLAGS) # Checks for libraries. AC_CHECK_LIB([hdf5], [H5Fcreate], HAVE_HDF5="yes") if test "${HAVE_HDF5}" != "yes" ; then AC_MSG_ERROR([Couldn't find hdf5 libraries.]) else CPPFLAGS="${CPPFLAGS} -DH5_USE_16_API" fi AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug],[build stimfit in debug mode]),[ ]) if test "$enable_debug" = "yes" ; then CPPFLAGS="${CPPFLAGS} -D_STFDEBUG " OPT_CXXFLAGS="-O0 -g3" CFLAGS="${CFLAGS} -O0 -g3" else stimfit_CXXFLAGS="${CXXFLAGS} -O2 -g" OPT_CXXFLAGS="-O2 -g" CFLAGS="${CFLAGS} -O2 -g" fi AC_SUBST(OPT_CXXFLAGS) WXCONFIG=wx-config AC_ARG_WITH(wx-config, [[ --with-wx-config=FILE Use the given path to wx-config when determining wxWidgets configuration; defaults to "wx-config"]], [ if test "$withval" != "yes" -a "$withval" != ""; then WXCONFIG=$withval fi ]) wxversion=0 AC_DEFUN([WXTEST], [ AC_REQUIRE([AC_PROG_AWK]) AC_MSG_CHECKING([wxWidgets version]) if wxversion=`$WXCONFIG --version`; then AC_MSG_RESULT([$wxversion]) else AC_MSG_RESULT([not found]) AC_MSG_ERROR([wxWidgets is required. Try --with-wx-config.]) fi]) # Call WXTEST func WXTEST # Verify minimus requires AC_MSG_CHECKING(for wxWidgets libraries) vers=`echo $wxversion | $AWK 'BEGIN { FS = "."; } { printf "% d", ($2 * 1000 + $2) * 1000 + $3;}'` if test -n "$vers" && test "$vers" -ge 2008000; then WX_CPPFLAGS="`$WXCONFIG --cppflags`" WX_CXXFLAGS="`$WXCONFIG --cxxflags`" if test "$STFKERNEL" = "darwin" ; then WX_LIBS="`$WXCONFIG --libs base,core,adv,aui,net`" else WX_LIBS="`$WXCONFIG --libs base,core,adv,aui,net`" fi AC_MSG_RESULT([$WX_LIBS]) else AC_MSG_ERROR([wxWidgets 2.8.0 or newer is required]) fi CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS" AC_SUBST(WX_LIBS) dnl default value is to (silently) do nothing in the makefile POSTLINK_COMMAND="@true" MACSETFILE="@true" AC_MSG_CHECKING(for wxWidgets platform) WX_BASENAME="`$WXCONFIG --basename`" case $WX_BASENAME in *wx_osx*) AC_MSG_RESULT($WX_BASENAME) AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez) POSTLINK_COMMAND="\$(REZ) -d __DARWIN__ -t APPL Carbon.r -o" AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile) MACSETFILE="\$(SETFILE)" ;; *wx_mac*) AC_MSG_RESULT($WX_BASENAME) AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez) POSTLINK_COMMAND="\$(REZ) -d __DARWIN__ -t APPL Carbon.r -o" AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile) MACSETFILE="\$(SETFILE)" ;; *) AC_MSG_RESULT(other) ;; esac AC_SUBST(POSTLINK_COMMAND) AC_SUBST(MACSETFILE) CPPFLAGS="${CPPFLAGS} -DSTFDATE='\"${BUILDDATE}\"'" CXXFLAGS="${CXXFLAGS} -Wall " AC_CONFIG_HEADERS([stfconf.h]) AC_CONFIG_FILES([Makefile src/Makefile src/stfswig/Makefile src/app/Makefile stimfit.plist]) AC_OUTPUT stimfit-0.17.1/dist/macosx/scripts/install-wxpy.sh000077500000000000000000000001701517235503400222200ustar00rootroot00000000000000#! /bin/bash /usr/bin/python setup.py install --prefix=dummy-install WXPORT=osx_cocoa WX_CONFIG=~/wxbin/bin/wx-config stimfit-0.17.1/dist/macosx/scripts/ln_stf.sh000077500000000000000000000002121517235503400210270ustar00rootroot00000000000000#! /bin/bash ln -sf /Applications/stimfit.app/Contents/libs/libstf.0.dylib /Applications/stimfit.app/Contents/Frameworks/stimfit/_stf.so stimfit-0.17.1/dist/macosx/scripts/mkimage.sh.in000066400000000000000000000001451517235503400215630ustar00rootroot00000000000000#! /bin/bash hdiutil create stimfit-@PACKAGE_VERSION@.dmg -srcfolder ./stimfit.app -ov -format UDBZ stimfit-0.17.1/dist/macosx/scripts/testpyver.sh000077500000000000000000000002731517235503400216160ustar00rootroot00000000000000#! /bin/sh result=`python -c "import sys, string; ver = string.split(sys.version)[0]; print (ver >= '2.5.0' and ver < '2.6.0')"` if [ $result="True" ] then exit 0 else exit 1 fistimfit-0.17.1/dist/macosx/stimfit.dmgCanvas000066400000000000000000047247731517235503400210550ustar00rootroot00000000000000bplist00T$topX$objectsX$versionY$archiverTroot7 DISTUV]cdefjrv/{U$null ZNS.objectsWNS.keysV$class.YdiskImage !" #$%&'()*+,-./0123/454789:;?@A0C_suggestedDiskImageName_windowContentHeightZviewLayout^toolbarVisible_defaultLicenseLanguageYwindowTopXiconSize]labelPositionXpassword_backgroundImageZencryptionZwindowLeft_statusBarVisibleZvolumeName\nameFontSize_backgroundColorZbackground^windowContentsZvolumeIconXlicenses_windowContentWidthVformat_internetEnabled[finalFormat5D P2246 $1 3 EHFG JKLM NOP8RXfilePathXlocation_relativeFilePathYisAnAlias _../build/release/stimfit.app_+/Users/cs/stimfit/build/release/stimfit.appZ{120, 151}WXY\X$classesZ$classnameZ[_DBDiskContentItemXNSObject_DBDiskContentItemJKLM ^_`0R _../../../../Applications]/ApplicationsZ{439, 152}WXghhi[^NSMutableArrayWNSArrayk lmnopqWNSColorVNSReps\NSImageFlags sHt wzxy| }~_NSTIFFRepresentationOWMM* HBm~?"AA .N[*MNaB#<p= ``]0d?O $n\|`~\~_O?Q@ /}o~>\a]=@}^ aOA@=B@;A>"AA:A @??1?n o|2?A?r????????>A>@1D9CA<?>?. .O|C|D._<lLG==a0Ay@|^?<.B?^~m+? ?n~Ab??zp|?.kx%?D;}D?~?<@j-Z?O;?B? { ?L`?<>-1@A ] ?A?=@~S<>o>}?~?~?><_???`p,!A_???@mNpA_~???_+||???~`C/f???_\??? P<{???zbOR???^_?" o~!/_}???@>R=q0 1?AA? < ?Ao_ @=}=d^2M`.>?DDa.!@01?@~@@|0|Lo?p|@-mO"`|_/ Q~~pCoo^^AEl+!z!V  CE/kW7%a I,X ?+lY D"m Z:c VL!  mp '6-Z*\,?nn $ Wc 7Xo #?\ v.BZ ,Me !6Xm +dB\ DrC) qD* .>.C!<C>@A-b :@~?.--AC=B^QP?Nnn/?^^r>N]{@~?AA:@bbOn?QlQ/# ToaO{@Qn3P3NQl>~?=<1?Azs~>@>~?=B:q>0nr2|U <A=<>Ps "mZ"k_ ==? A -1!~@aM ><A><?1=>A2/@^~}NO??1|A>0<$1>!>>>#d~q11k9?^_2{@l./??}}4C @,~?> Q~^@]=jA@=A}Q*1p}^,}NF<?O@Mz".~?!>o= AB>/M~@!; ?_~ok^ ==?a|0B~??4^~|~q/1^|zBq/}ApQ`}|x=^ 0AN=TBAC.?0.k@a ~/}?a |BD3c|\>~?=2~> M>! @;<#poA 3";<>A,!oZAD>@< =@@2qA@= q% RQA<B~2r:A <On >#n= o=>/E n>?u<=>^P ?@@?B;@ snNMn~= >=@,A?n>~op 3";<>0]^B~?A}~?}a^~#~1A=@p3 _?=@B=no10B? ~@>0!;;{}^^@zB\L`?p!`@?{>~?>?`NQo=?R??@=qo`A?}Nm0Opo_>P>?A</-= > @?-a~@@C??/0O@?@>.` 0|>~A|?_ @@~?>}>.}}A@=}Q@<~}?>}}@>{?B>@?>=@@~O??A~~`>|@~>@A>=My@=?}B <>;>?~p>>>A9C"p}>>}B>~C?>@B>>>>?p|0@=@}}>|?~D>B?~>=~?CA?===A??~<~B}B po9}>@~AqQA=|=:Nn-~?@LOM>@}2_?=?~< |>?>R1,}? Qy|B;?-1{A?=]>yL/l|@B =~@A  @ ;=!? .?,|>@M=}N@}a>#OB@B~=;~=}=A@?A?A<Bo3}>5S@zN~`A =}@]c@=ap<C@]_=<=<oe?A 1~@U^Ad`C[QQ=P<DkOm^3?Q;`-BM@_.@}<.==a?nF?CQ>/B~ <?pC99}BM9=LB?nL??!1;Q@|D>@=>`_=\A^@|?>d@.C KB?<NS/P>~BB| }_21oK?MAp_=0@,>@0]LQ?  1j/qC}1p}AC{@L/P?\P<@B<>?@ @.>/1?B >> B-=@1=2>3B1+A >A<>A|=1BA2;B2?/A  ?=?A!>2A+>@?<BA0=@ B-?B.=;|B\@<>;~^C{C2i{N @ B $D  ; S "sp *8h 00000PpADBEprtrCMYKLab )5acspAPPLADBE-ADBE desctcprtp+wtptA2B0A2B2A2B1B2A0E8B2A1~t8B2A2(8gamtdescU.S. Web Coated (SWOP) v2textCopyright 2000 Adobe Systems, Inc.XYZ Zg0mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M \lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} 0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ ~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'\A*ىJ nyg؜(VN#q6\DՊB*|i˽?zzhzMџzEzrn8zY,{dBS| '|⃔*Z Ђ`>mۘ:Xc€A'4 uh¨h$nk)l]'Wf@&8[/Թ|zY9_N3kV41@49%wUh 3?Vkؔ.Uٓ|??R~%nVӎȩ5U.k~j9V"U"똬>Ð?%' Ȃ}ˡWml}ʗiRT>OlT$iƝaʚ=\},?iT- =$e0yYq,<-A_|?h@SG=ҩ$leLy)yywydGzPOsz:{ )|qʬί(h䁙~ڀvcc&OS#9tL߮=.v10b䞼 N8ՙ,K.Fpj癪7̥0uPhbQM88Ajʗ׋xAʜڨ†󤔗tuϔaMKMB=(7kua ,̘/1Hsʠ5`\Lk7M (_XĀ⫹}£rs@C`)6OLA;6}Ȕ@(Bat{C rȟH_֧Kť6#̕O&3"^ļ֢qrb_cKu6{ݤ < (ytյy:}Ѱy2ldygZ8dyF冷zj1{r{(B€}b kYdrFl1l;nˉՍވI|ϯkUYz4EƄ0ˀh|RjΌcX}-EYW0,\>շFiba{{4j$W]D?50>R*>6Ā;ٱџziWyZD}p/'g^ȶ6pDzi/W%ԞD9I/Ĝ' J״"ԯzWhy1VߣKC/1ŀٵ˰tzhVﭠCߟ8//)cyxr|xaixPqyS> sy)zjfY{ C7ċ恶q¹JaJm~P ~=_~)]f2ÀDÒG'q^`۳uOY=RZ)#JNO©k#_p鷼`k&O:%=j(Hڧ,O[pt` N֐&<èi(ץc^PbB7pM@s_ϱ ,N&q<Е(¤+8fը*p_oN<}:(nN&Q̺o_Nw }gu~_jx&thxQy7Qẙzi%u7{Z{=v|k|v՟wӾ xѦx Ryosz'kYuzیM1<} #}oha}?'O|}g3}f }É\}Y}|ȸזP|D|mg|˨N|3,}X S}(d}5<|0|nƕ|4~|8f|eNT|2|L |Qvww~~x }1xfyzM(zI28%{1 ։$|y<Ǽ|>ډcΒhU~|nWdQL\15 쇋Z⊩!_+7/0 zXcⅩFK&0D!D $~uI&%ڏ͆.yl bDŽ̋vJQ/nFY k솷&ڸWlΆN]xa„I.~ ҃ᆤh/jhwo`ӃX^H.Е QLr71Nu vf`ҟGHUXu-{8IF,mźg߄ދuނ_gfGǁ-pȑ=ͅtؠ/IzKhu5^ՂGJ,^&J5uYv vw6rw]xEry+Nz|},SP~˛S~~~Sr ~O\~mD΋o~*'C~,lWح46uxp[(/C񊁃)cM &oA(7ȍpofZ0C(e_׃GgϐNanً(AY@RBS( Ѓj<ŏJmQXm@A<'|;Ȇ<[9%_5,~4m,WƈA' U<ϻ6ʱ^ly0W(W@@&֚$`|źm[xR`k7NV@-&H;/ݲàztáHuNvz t9t|uOqEu^sJvJw5Wxk@kx0| |$p|spv4|p]ڜ9|J"|4}-И5}ls?䄅lfo1]Μ=*ڙʜ]1zlʫrզЮb*|Pܟ s>Ԧ*d0vsQysjٶCt+['tJu8vF$R+v Xw {.yzj `xbiAY3I?N7#ףV> J߻bSxPgi5YuߓHU7]ӑ#âk t€ޢ_x ڟdhY9>kH§79,# MbwյZhưkYeH^7 # { >w9hX#H97# `- a{n1rmŶs7_XsPst'@t/E!udukoMw${h@zmz_^kyPpIy@z /RzVG1z_ /|F"{rmÞ_G=PN @}:m/PGw}Iu!{pm}s_gP%ԅ@^/Jn{[emep^P‹@Oߊ/P܊߫Ћ0${9%mT^PՑ@O/aґ {ńumGꜳ^`GP f@[%]/yyK!;΄7z0m?[^,Pa@guY/Vx@jzĝ>m>᫓_ 8[P*̦3@פ/E1gȥFvpswKsxt̢*xu$yvqczwW{Ox;/|1y}!yt~hku~v|}we}ʈxK}p.y3}V[z}:z~ {T}1r̚td_u Fv ~wnxBU>xy8yĂyՂ iq8rsltюLuvmvT*w!7xxpu2q/r+sŖՄtl|viS#w 7wwq?lo pqˣrzwtkXu53R.vA6BvvKNn뷌p[q1r0z̓0!{ ){ͮwӹx*NxelxTyZy,4byqJz!K/z\r zˇ6wswwܳ5x'xx ay'Iyk.yN Bz-Uw>JwQ#_wwwwx$/a x{ITy'.}yAo y~p3qrrڌsvGu `\v5HwU-ńxR܆Oy`Fzꅻzs {u{Wu{_[| Gh|i,؃|/}u\1_rك,tT^QkFǂD+n9 ­Ǐ*1ɂ|q|sB6]5kEՁJ+,x~(Ta؂ uz)Qr-\5TEh*x }0@Wd8EqZ[QDD)D=DI7ˀNdK [p=DZC~")Q~B?θڬ&2`Nos~NY~C ~wp(~^~ܾxӾc$~5n~@IYE~ sB~0(y}^~&\Wo5p!rs.lˋtTWu@v&;w*$yXySCGyyz?k֊_zVf{$@ {%{ۈ}iI ]~׊Sij̉7UJ?6$΀,Mԋˋ>j}*iT·>>k $PYفKIŠ˔8o-|:7h1kS߆a=#ċ%ʁs Y{ygʆq[S1<#,!V5q zٟg՜{Rj"0Ճ'=r'@ zVfQPQƄ;Ο_"a?) Œn;y]eQD;d1!"ospA(~|݈C|BxGgtXUѕB{5.l ʓ@lןzwߕWfɗ/SU/B{@. 'F΀F(wD f9tTAA-ma8KΞNvҤeTQA-X9ub;k)v"xFeAS*A/:-}v 4n~W{oo]p/_yqKNrhSU7Ct214+}pO@bqSb&C%1#!}ip aƫɗRB1Ҡޔz~.Nx}joدPa=RB\p1Jf|yv}6GoЯ+Va]RdB1vɔŅ(rHlemX9nIӷo:up)S4q-p)t{rwtpeÿtX:tIu@:vu)v!uxr:{er{EX&zIֵ$z:{){8n{}.re&WjBIҀ:f)0!rvҊ e_WEIu:QsQ)GIUrQheJWNTIg":Al^)!'XPr0Pe?bW Icϓ:?)8`-!GrӠ`e=̞W՛Id:::ҙ)}yM:qv6eCPWC(Ikwk:E)Q)ЧʜERٵqlrn7touIq-vkrjwtRxu6zyvzyv׷oWwppxGIrAxKsy4ttyivzQPw4z5hx!{>xzmogp–rIs^htOuJ4lvwA"kJmo:pu~r1gWsvNt3uru0zjo;l@̩Tm֔?o^}Rp⏔f%r^Ms2tGtԆ&ik8#lϝan\Q|o*e qh?Lr1s? eshԻjgk+Im{od&p3Lq1:rZ sGhi˶ kSÐ^l֫z/njcWomKpqC0q grybιg`ia}ajںclM`ymmڮbohJpP0p q%Zyk}zdmKzn{hptyU{qb||sJ}t/}v 9dv7wv{>${* I|}9z Xz Əy|zhz1Tzy>z$zjR{݂\y yVy|yh9ySyA=z|$ y͘_{^؋iڜk~mpyofipQbr$; s!tNw$setU u2x?veqvQw;xx jx{j|ۚՇ{|ن} w}!dq4}FP)}u:Qr} U}~цZ>vScyO\yI98ƃoÏۘ"ubgbo֊dNkuJ82n2f{.י~~0\to3a0Mx8EERX 2ȃEvsš`ā7&M͕7ǀvQlWJ#&r&`VLS977ߛD-`3^|r<_|Kz6Xy iNԓ&k#yln̐nj\oIqt3֍rrz쓔rZsM't3mu[čXuHUEv3(ww~{Nb{}~!{mX{Z |G|_2~c|~||lZ+ |~5l YւXFΉӂ 10&,{^kY-F1YPƇXRQ?{7~j5X^ՏFEmԍ0ˇ)MIZ0zy͚iz^=W! DՇ[0^Wh̉إy܊Dh܈ɟWD@I/慽)aV{yVܫ9hNRVCՆ/8kH(؞ĥלLjsߚl4cėmR oI?씆p+Jqlq/}А@qcHrQsˑ{@*Y{q/{%Ϛ̂=nq-ya&P{7>*)ޏ
ґƗYp`O֑ =z)w>{UƓGxp<@` O33`=%j)"]Ƙ~ϙo_z`Nu<(όؒikU~"RCo^͜Nܚ<&O(k8KW=}Ôn^VM[Q;όƠ(!7h7vm\-=nknlpvZoRiʯ(p\WpMTq>p^r-:Isj㣧sF7uav |vi`w\Gw`Mw>(x--xxT^zXu~]h}~[w}M4}=Ǣ},Рj}Z}~uDhX.[τLm=rd,2kٞ;th(urZXL_yX=h,_hҝ#te=gZn#CL<ԟ,0;ڜYVjBt]םg-;Z2VKآ<억+뜓vƐSdt.~gZ.K]<{)+뛾њ|j2f]λ@hP㷖ipC#j4*k#>l!Hksi=n2]Ϻ9nPBoCEwpn4[.q1#sJqpx)iͼud]uPմuC&v4Qv|#vv&|"ir|k]af|P]{Bw{4-{#{g{hiz1]5#PVKB+4#0liN<]PDB 3#:槫i)]GP?Bl3񨛍#2E"Y߀i Y]PDYUBM3ǔ#^?YHh]#IPQ|B%3 n#"V PlmfDn0huojqcl{rndUtOp}LlurP1vs x1s\iqTXkrgmmswogtyquc>rvKasw0txU vtwɈg|`i|\k|_&m|}xoV|bp|JYro}/s+} !t|ǻePh Pj `kw*m̓`o/ITq.q vsdF4)f|Th~juln_nCH`oˆA.p+ rxRc!e?p8gUiS tkG^m!3Gn)-in hq öad@*fUhTksjR]l3FmT,m˒ pa< cĜSeLgri\kmF$l,Ol٘\ pj`b盲d%fNrhکs\]j¥>El7>+l mp_te`uglvqiwZkrxBm\Zy,oESzq+zs}s}Fr=osfq;Zturpuvsqvst[jwquDvx]v*8yw{[xp.zk>qrzrz?s{Bot{ZDu{Csv|2)XwN|?zy|l)n]ʨo31p샖rnxsOY'txBun(u.x1lя)'n2Ôo|PlpmFqXs4RAt-;'tDywdlxklmnM#Col0pِW)r@s'>rVgvރjl$mTInkGoV`q.V@>r8&qޒ#'wJ|i߮>kLl~vmϣjwo"aUpn7?q]&IpwYVib$jɴ#k}m/>inzUoţg?p %pw=p|dM}g}TiW|}kgh}meTD~VoS>~q$r&gtSzn3{'p{zqh{u{rg|:sSS|u=8},v#C}vxqxxyMyyyzKz&zfzzvRf{z*:FEeWqcbEa?b!PX>V e*5qE|czieYlDgx\dirLIkM:6 l%ّ8n ZduΤ[fˌWg/GR6Ґě.'K͒F؋RFn9ab]cU:eGi;gW8Mh'6j*inbmi?ajTFkG@m*87`nS'?1oq-n-simpa9qsTr7Fޢs7ퟹs'rt.sx0lx`xSS,xFjzx73yA&ݜyl2x0|cl(l`8PS+E&71~&p~~k_٣wS%DžE P6؛&o(ƀkd}_ҍRߟ猲E:6&;%Jۀk$_T&R3D_Y6@%a'j𤡝_VRD؛V63%j a|`U|bRIde`"m$gsinji]plFrEo,s&p v*q d%jѭKflhn,jorFlq`\nrEpItS+pu] mthukIaud vNf}vshwpjx\[lyDnpy+nz rz-w_K]aCdlȃfoiiZRkMCl)*Bl~vq~]U `ܕbie nRgbY5iBk9)krY?q[^pa-1cm-fX\Zyc]Vj_1bpl=dޕ1WjgAqh(`h|sYY\b|^_avknc眙Vf,@gɗ''f"Ds XԵ~[?^D~`!jcVe`~@Mf'neș_t̳7n_GpOb1qd~hrgwjt?iUulM?vnw&wZo2{ ql,i{mkoPmP}kpnir pUsxr2>ts%Wutxyruɰ1isk~tߎ{m u{nvhzp0w`Sqx.=rx$ry&yzFg~&if~-k!~.zl~)g8ni~0Ro~;=q~<#p~[zS~+eGgliiy.k flхQnlgonp,\qEUIrL64rcqˈKmkUܐHH;ʂ9V)07vdh'mO'aՊUTEG9vv(ϋQu߀mB a5UyGiӏ8t(pnjрla_}TԘ_G 8r(9ŕ'Ɏ0'ebW[Z^M#`e@[b1dh e emdc'YdMmf@l{hV1Ҝi j Oird+juY kMl?n1o Кo }lo{wcqXkrzLhs?y0z' M-z1 z*b,VWqaKuH>|0UN % b&-WyK$>(܆f/2mD t ΀a՜^+V̚JJӘ=ؕ/Dv~ %z!a˖V$Jŗl=(/Jg[ 숟Y#ZdNR\Bd^5`',b#abhEcZqXpga}McB#jd5.f:':g`gpҦhQvXhhMJ iAЩj588k'l sl|9mxgzWo:Lߪ&oAWp4Uqm&ߣq Nq\rA~WRvLvAv4w3&wm ]w)Ÿx>V}#LP*}J@դ}N4^7}?&t}3}~^V-L)@u4Al&t4G->!zVҋCL2@g42&]!6MVb4~L z"@U4.#&g/&jp&aSYc]6f/`7hqcLkjfFW(li%A*nbk'nmtnų*]daq`fc6h~Kekjh m(Vj@o.@5kq'lr^cu5sANZo]pJM`q|c&rinet TguC?>ivV&Qiew ux"tWy[y܍^ z9{Y`zhc{Se{k>Ng{%f{v$|UxFX΃u[y^łyfaRd=veʁX$dvmRSvfVZx] je_(Qbp pE [pqL.~sǤbmdo7fpxshqa8js&Mlti8mu|m.u~-xe4_wbPx0dxr_fyQ_hyLjzc7kzjz~T|f]}``]-b|&pd^fဤKhԀw6jKkht~uԠc[{+^B `oc ]e@Jg56ChXf~_Yt2\̀_>oa$]coJe܌5fe3~Xas[Y^ [nJ`l\ZbaIhdi57e7:d6~Wة6Z ~]#m_{N[aĜXHcš4dc x~ɀ|6pXq\`}gr_ltbZuDedGvgh2whj`^wkZrmbne|1pAgikqiYrkFtm28to`tovȘjl ?l@m{moUjo&pXpr(Fqst1rt|cr&tzhuiv~ykgwFi:lwWnlxEoyA0pyoy~qeggyl*zGn@{mzsj~t lyp{tn`uoP2vq>w]r]* wsE=yr}ps}kqto)ru_svOOtzwK=guOw)uxivwnk||Po}n p}W^q}zN]r}h-jKO0j,lksjgg>i[ kfM#l=xnd-o}oNq6rp?ofqYr8LJs>=4pt#,mt6t] vq}BwexYy"K]yh[img"ndgQf7\@gPPiCk=4l#mn^l^sf~qm[^nObp*Beq<3슀r #or7rxe}uLZvNvA.wP3fw#w SwN|d|Y0}KNg}{A }2އ}"ن} }dZYRwMh /@vT2Z"X3!GcއEY M/$@?,;2/g"6僠c|X!|L˅MS?O1sn"*ۂ] \URBYXF[E9]+}_I`JamI\]QY_UF7ay9cr+Qe Peߘer1[_dCPeEg9i&*jV&jjwZ@kZP8lDѕm8jan*joݔ3o.p#{eZ LrOs[D0t7ƒ|t*u-u!1*u.YsyO}zCC.z7Qz)zq-z;{XkN>;CL#6폗). PX\`N/:;B66(܍~sG+X7N rBÏ6o(WrT PaTMFbV;M Y=.[i \]`|q.Oƨ[*EĦ]7:_2.` [mb+ǥbleuO=SaE-c:Ae.~fy gVѢg iz<NǤ hDYi9k-IllƠ?l(wo+}NK oqD+kpN93q-+Lqqq5u Mנjv`Cʞv8(wU,뛞wXw؛w^qzTMs}UC}8},7}&]}љ} ~M$YCJsq82, w{{L)C(8dЋ,ٗDݏgZS]W|`[5wPc,^debCPhe;ih#%ipjygl˧V^ Y`\cv _fxcbiOe"k:fm"eeolyqgRhGVUjsYlLt\nb2_oNb^q9ds!btyvbOSrݔzS sڄ| X_|VEb(|1c|cD|dQGg{Q*gh{4jz{oY|\jn^_eaFO'cgd=e ;*Me$,h;WO{Z}m]^_Ndax"W`ixGkZyT6lxy#ml9z qze~bYr7d9dfVpgFiT6j_"i p}`(&q^bZddL4Uf F=g5ph"g nτC} ^p`ԏcdbЎU dkEfP4g ".e؋ m<|]Wp2_ baJTcdaE)d4xe!dbQ knd xyRmzbV` {YQ{])BG|h`0}Ab~ld#dy wv`[Hkw(^/_w`PxcAy}e0tzGg{h~)i|v}s cjte]u gOui@vk/w}m5wm{nuDpkisq:m}\rOnOsEp`?t.q/!trtryt(tmWt7hKnu:[ovNpv?jo}.pR}o}x<~r:i3fjZl Lxm%"=n-nnumx8qgFfiCYxjKk=(l,l߉+kx:qfqehXip"KejŒ\]2D^$g`Oؔ`ԑ biqRˑ ^?Hܐy`g> bm1؏d9#䏯eeggvRBe@Hf=(Kh1/i#TjJjl{<Q9lUGDimߡ;Md|Qg"lUAi{[ XkH[m4\o]Jq$}KtEERހC2SXW)} :qJ@wEhIW;ME\P{2.Q5!gUʆ}08?e=vvBgnG5VKDNԌ1O1T|436;vqABgF KVlJ?cDMY1M^PSϏ|8ZMC]aR v[_V9f}bZ/Ud]C=ga/Oh@diufTmґyUWXZu-[^Je^avTa1dxBcjgJ.d]iNf`jrPaITmcsWfPdZhSV]jAc_m-`ncowbLjGPslqTnVbWRoR)ZYqx@j\r-] t8ats{vHt~Lu{pPvca`T,wW~+V ^dXB[|~G nKDm_OOR~C>XTԄ+TLU]?{DʏmI0J_M&OP=R܊+-RG*]뉛>{C mVG^KNO E=QE*P^i@aN zdRlf&V]h9YMVj.];k`'lcpdhq'\WyH_Zwkca]\{dQ`LYfrc:h)fu'BhhCnhvhnXb`Fw[[bj-^ec[\`gKibj: dl &dmkmzT0iivWykBhZtm Z]0nJ?_pJ9aUq%`r ixr~#2PkrtSsgAW)tXZuI\\v8L^Kwq%g]x ~i1x:M!{sP|f6TG|oWWV|H{Y|7[}C$Z} Ri|~ ~JMrNYa.Yy@[tӄypqsMerQXxsUUJuX;v-\ *wC^x0`~bZxolUcnjYW_o\.Iq6_!; rja*RsZdCt d~g!|mh]bRjx`V6l#cHmei:&ng)oi7p}i~l*l5df`fhThiGj6k9FkmM(ln]mnn~eqja#nF_cfoSedpFgr8hns"(mhsjs~.wi^v^`vwPRbwEd\x7ey'eyxhyg~0{h[K~]]~R` E6a 7c+'Gb/qff$~h%Y]D[Qy^ D_ㅉ6a)&`a&eTD0}gW-\Z3P\^6D"^2"6 _?j&g^ad8~5dz MZYzPN{TA|dW2t}LZ!~] ̀]xe{cEuTXvXLw[@*x]1y`S!zgb |b=jH~aq\W]r_Kta?/uc0ue vxg |yAgoV`md2VoQf4Jph>7qi0r~kYrl? 0vXl t_j\kUlm_Imin=,no/xoOpKoq sqny^vgFsTitHjutX\L`NOCS>7 Va(YVZ\q[i5~WxNS|MVBy`Yq6,\(^I3_C`nmVH{ZZLT|]@A{|_5>}_a'S~ck~d/eVs$U+waK1xc@VyUe4Xyg&zhzi/s}jox Tt9iGJ)uRj?Uv/l63bvml%w7nXGwn^Z{io|rS&q,pICroq>sdr2tsg%7t=stsbyCuRQnwx Hsox=py1qyk$qyr&yxJ{sQl'tGm=Xn1o$eoRBp:\x'Q%j?GolM|np3}6oh(q}}p"}pl ~pvUFy1t]=z-u3\zu'{vrzv |6vl{GFOv{lAUx5:W+>Z:[\Ґ^.i#yt=o}[4P]*_gd`a*c:nV}X<b3tid&)Det"fKfght;ˇi]2j(kkBk?kn0y;;)p)1p'wqyq熮qtS}:|w 1]w|'vew.wIwnz+: ~'0~O' ~1~\~.~mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~"hN~uO 7A胬|.A|33|M|WE|ߓ}OgV}ьN~|M6g\7{cߥ{fǪ{ `{ɞi|+~|fn}CAN.}{5~zʸU/zDzCz{,a{}|$Ye|ȕM}5[~_wzRêzF2 z] z;{|{d|`L}5P4~=cyy@yz:z$| {[@dH|Lo|4}uyZy2yƔyj;zdj{w{ @c{̡L |34=}S~6׆}}p}UR*}u{}că~5Lx~5(=}p@kcyԃ-bKÂ4؂zGetMڽos ČX9wxʂʈaiJ͂&L43oۅO_tz莴r wA`ցNjdJh3\lԟ[7—vx`9Iue3${K͂:X2-{6 uȀ_JH䀯:2ՃsV/&ĤuU^THiS2`rփȥ$ƁWSJЀatk.\^)H;20T7Yn#s]ƞGЕV1||c|:;h|G|rʼni} ]}G{~2Q9*ǔR<6W[䂶q҈=\+3F遢1˄ڣ9Wr݌>WpxpЇh[HwFF1T4B،lkȉR9oهZ؊&Eo0샠ᤔÇ [ޘ:OnkY΅J4D=[05 ֵK\wʤĘRL~nY+ΒDsЌ0EڇDէи\Qڗݧ*mwzXbDsl0VŒj¦ψԖч{Ά=[l)X6NC'/тNA̩ՊMĠ'-7lgWԃٜmCx/O{Y{Q{F '{s~{ju|wV"}9B~P/BB̝ҹ<Ւ4 $~ӁiڍcUƋY1A7.zB!DE.Z.7} }iцJUAtp .!c˒ɒW|-Qh )TX@ۆ.e^fDi{ 3gQSm@]a..4ت`"סp 91zL fS6t@0-؆d VבAȣyf cRƈ?熏 -؄.eNĠ!|iDxFeDRk6?A -LŅq͒rƋwx{(e R?p-@ zɠz|zzur{Vb| P*[|=~ ,j;ӽp|Μsn%tŕb ǀO=n5,IY6ܟn웅φAusPaRPNل[= ,,ĻݔОD[ٚ̏~sd`TNf4<,è靎e!4ڔ&rٹޔVj)0Jp ^*L ;+Ņ􈉰(z&z ~z}HzjlJ!z[{J |9j})Ћį\RfԨف|PZk2"Z}Iʀ69!K)k9wkR{|GsGk]HYEsI 8䎛)ςϝ.4js2{{5j\pYTH`8n)GɬjԋIz,iX͕HTŊV8q*фDb7ɥR zi#fXVQH0k8Z* nԫ^D-yhTWGŐM8>*håڊʨly1hTW|Gj8*5%*؇TLdWɴ艴ux՜MAhF WxKGn/38*yǓyqb -RƇC`q:5ل(!ރ,ǘiq[LOa3R#C'Ή@4C(HaB%7y֙paDQ՚~UB84폿(in.֮z@ILp5`%QB֔4Ff(/\ ̀Ҥp^`žQqBT4(YϞM g<4˨s0p(Wd`PQ[HB 4ꎶ( Qy2yPxybiy[gzhL죡{O>|b1}%to<&؆ѻxE\i[~L,>1%܍2k3w+;iM"AZLb>-1@K&68P.TwOh~_t1S&HNBHƸyw3hzZ%XeK'T>k<1˒3&Nj„B]{vᖛhfғYK֟}>_ 1ݒU&RN:hvıQh?AKYإ/KĞ>X-1܉e',ƓM v͡Fh,YɤRK>UD1q'QZtvQh'9Y̤,KǞW>n20'onщ$yp{6y(nfhy/`췎ySxzND~}46~}y-z4*z{;24{Ё||vBd}.MU~6:hxYjxyxҪ^zzɈ}{d{c|_L}}[5L~?w31֮wȗxhبyyTzAzb{K|G4~ ivGUvޢrwާwxAMyy(zrb {K|,o4$}uoӿv'vͦצ7wϏ/xnxyia9z|J_{m3}u{ҝuv7$v=w䣍wQxs`z I{K33M|ˆhtqѰu'u¸{7v+`wqvx_yI^z2|t'tUAtɛLujnv$wux+_jy[Hz2|6♄x͍xxx8yd \z uz_{IU|3|~uႎ\?(e+kt 9^sHu2ZIQAAًnŀM>.s)]5GdX2Vݿ(%ǔ|B\PtKnr\1\Gņt1݀4DBAdz~{~ҝ~JA~q~[~ F{9m1t0~t~1c}X}Ӟņ=}ߚHp~ [9~V6E~Œ;1Q~2l}~\}^ǚ}C!^}Zo}Z}E~\0~ }Ė}:||ͭM|禛o9}-Z}E!~+0~f}J|'|5D|o;|Xn|դ`Y};D}ȓ=0c~tvٿ|wW-wݗ_x|yCmцz4Y{FD{|0Z~kud5<іZelgX@{C̄,/n*&T5ɇʕ4ЅkWm,C+w/ԁΉB7Ώˍvj3V|Bۅ/9K]́ih"4Ɇ~d1jUދBPy.ӄ[iLz6W b}yiGU]TA؋.l f3D^'DŽΧɃڢ|hsTفݓ=AWr~.'ʠǼcՐj{wh 2TiA .VΈ uͷ6,ׁEخ|lKe}v̊ c)bP‡>P,ńK'&t1uegFU7}EqЄ6L(z򂅤j?tqdȖJJTȊ;E%6(d(pcc`OޗCtN<9d<7TJ8DԎ'6ه(ϣ奖ԜVsϘcƕ"S푟 D5g(Nz]s]F+c_gSAD`5ۊ n([B?Hjr>c eSWD3_5ĉό(ٙltiNw@2Ǐ&z)"{ɪ{.ZblYLJ]b?N@GԄ2҃&GΓ\rys᥎qup[wF\x됔1zf۳n#o²apݻr;su~p`u [vwEx1Qza rÚs9(tN@uhdvpbw[3yNF>z1~|գ}f|r}|h}|}|~|oi~m}OZQ~}Ef]~71!~#{|(|`R|(e}kn\}pYq}D~p0uҞztDzi`{5n{.|mU|%X}%fD}焋0/~܂g.yƽyͩz9ݕz{-l[{tW|sC}L/~Ux٦y0ymByؚZzd}kw{W-{َC|ȊI/}ax5Lxz}xǦy4'y˜jzV{VmB|W/W}9whxxGx~ayKjzmVzBR{)/&}0ͯwj^\w_w趔xEZ}x$iyUz^- dƵ*% -6 v2~ٟxcG~̙P~Ҕ>p,Qtո1~_u~ob~iP[~}>2~,չwpFqLrІtsъiunaZvOx=Pz+|~Dy,yzC7zrJ{6`{Nl|[OLR;a^+ s6Z IMȈ 9-ەo`]L$;و4+ mvUjF|n)j] )FK2:؂fh*|HwT̡n\gK]Ғ :^*Rb!8†­)lmNj\a0K :kĎ *ځZo#+q NrQ{ҒsjCuYߎvIxf8dzs)|쪓xqx狏yX{eyj:/zYA{KH|,8H}B)5~×C,؀^z:Oir)X H7)'Ֆ+ňzey[HOh6YW*kG}7) ߁+KА]qxtfgOW`YG5X7]) Uܧ*rߗ1 וpwg) t%lǎۢv}Tf UF/Ґ 7) /ʥ#ޖ<׮ֆIjuNeD'UbsE놁6ۄ) wͣ o[pqq™ssJb4StR#vpCJx>4hqz_&|6w'xp}xq<`y'aByRzB{4A}&ˈ~Ďjiǚ`"pLa:~Q$BF4&H⟲ƍ~~[oՖI`sHQ CXB>&3'T"Ϗᛞ~,Hos_ߒkPxxAi3L9'*BD}ƒn~T_WPHhA3ɈH'@y̚Vn}2)m^ݑO.)A|,39#'S3~DZi|şPm^sO’AAŎG3ԉ'b@8Įڊ<|9n@m$H^FOJaAq3!'nߐo~pBvqhrYڜtKWv9=ʓx0ezN$|ېvڃlwCuʣwgɟxxYqyPKWDzR={r0j|$Љ~hy~yr~)uUk}gMl}Y`~KA~Z=m~03%ӏ`P^t_fĝadXeJTM=;0q%Q6vX¤yt?f1X7qJY%=Y0%=ÔGɒsːKe͎WЗ͋J‰<쏦0rl%!:-$0s>1+e[22W|5:Iݓ-<<׏30%҆צǟseW7.I_<0|%cōrjrrY?dΚ=V7IqD7<:01&WFnxaokƬq&^rQt1Eu8 w,8z="'|҄nvxJvxkw^ͦwQСxDky8{-%'|#0~SLM};w}|kh|^|Q}/DЛU}8~&-N3~#xX(.w\Mj~^-QJDVM8-o[#͉热0wChjF]̣QDvt8 -$YuvjSʍ]ԋP˝ˊDS@8do-$Rz嘞vj+P]N/P*D6 h8-i/$ ްivi릧|] PnDF8zB-ό$Yv;i5i]PX D 8ό-⌛$͇my0nem}oaεJpV r=JG\s>u3ʜw)z1 |yiuomua3vQV"GwJ_x'>ۡyg4z*|q!~>y>|m{aֲ{V {JU|R>j|4(}*U~" ym\aɁU׀JRX4EY*π~"y߀xm?saaUɅQJ-k>Y4`ɂ*ґH"֊8xƻ&Dm-gat؋UJ"ňG>y4zK+R##xlm$apU%2J >ʉ4Nq+2Q#b:]x am"]jasPU6Jn4>;?4ɉY+VB#݃x{&m'ꝑa|UJ$/?4Y+m臉#yڥqm*ƦsQnIJ+tpW uq釴w0sr&xuB\ywGm{y#2}{ضoxqkxrytOyuz4q"w=z[x{Fz|2%|}n[oQDqT{rށ5WtopvZwр=Ey1{4lnE ocqք sCunu Zv鄶EZx81D{QzӢkG}mŬ nprr;mt!Y?vDxJX0z2XjIlvmɛȖTo#q_lsVXuoGD?wJ0z;PikI mXMnşpl-r2WtڑCCw60[yφ"Јhjwlhqn'p kxr+-WUtdCovΎ{0'yuSh|jSHkēm8ojqVsgCvv/y,Szl$zm{(o,{qT"|Ls j|tV}vB~y/{`x/v}xw0Rx?z>-| 'qro(ksKLt?xufFdvRx11?y؍*-{®q*r ٝrܰsƪ'wotd]vL!QwΖS?=y$-{n`{kR݂m?o ^pvrcȁxtQrv>x,{Iuɀvc_vڈKFwu;xbDyP[]z>|,y}&~٪~ƙX~~6~~t~~b ~OZ~=,FII}t6}}}s}ᄯa0~%N~{=~,||9|`|{r|䊜`^}ENb}<~O+v{{ꕦ{'{ГOq|s_|M} <]}c+~жzؤzz͂{q{n_{1Me|x<}@+~- zK8fzZzdDCzfpSzᛂ^p{kL| `;|ۋ+}׆yWy*zy}zozk]zL{F;|+}ׯf;jNlYn~pGn)r#\)t#KWQvI:@x){sjt]u~vmOw[y JAzJ9ك{)}m |H}#[%}>}V}blo}[,}J-D~;9~)ւR (`)ᄡ|kqDZۂIX 95i)Ɓc,/͌ {qjzYUI#8J)v9?^zCi聱XY">H=8o)_ǚv͊{Hyi9X"HYT8o8)0w%dۂԁáyH hX .(G鏆8AҊ)ۅeăd<}E`UxhbWG48C))jNl?--nuvoeqUm sELv6 x'v{5s>teu t:vdꋍw?TډxE=y5dž{~'}Yl){I`{Ń{t|Ed(d|T<}DD}5~<'@~zۃHrtns$҂jcdPS؁DC_45Y'rX\#_r@ψbP6SC䅑5,CC'ȝ͍ڔ.Ӏڊqb\R0*C4'z)/[-rpވYbapLR+C͉1(%ۄyHgАvY4hPZckLA'>Ԇ1%3c0 v?th:YَK⊋=>g8o1&ƃ'惆uʑ4|gYRJK>)ċ1y"&$lO]Ψ?/^ugѠKgFEY*IKD=c-1c@&4%􈀦li|Qkom]bvIoGUqPG)s:fu.;x#!{Wql{rsoGsb#tTvG_w:Cy>.Oo{#y}1 x{kyEn̝Dyaz2TWfzG{:`8|.\z}#Ƈ~ĀJz͟ln a SMFƑ:7G.e$zf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i 9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy }>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$yzz~n{D{]{{K||r:}}?* ~%FwzKxx~yDQmz\'z݀K{Ҁw:^|0*~Tۮvvfw`\}xlx[^yᅜJzV:|<*}ktufvV|wkwZyRJz79{*}1Ь&tt̛ku}l{vDEjw7ZxUIy|9{*u|sh$ t$tӟ{2ujYvVYwɓI7y9Kz*h|ersMtTzuuiv>YwKHx9 zL*^|쥋|e;gȈDj,xl{hQnW3qWGrs7rv(jz\nSoqtwƂ\rg~tW v4Fw7#y(k|>wEhpx #xvyofz/VZ{Fh{6ۀ|(k~#H߀ SuezUF6(k^~ˆK~/Y~sIt~]Jd~dMU ~XE}~σY6_5G(k}\}1q}uvs}jd9}~Tv}E~6(~(k8e|ٚR|˜ |vs>|c|S} D}k 5~ (k~ǃJ|4ȑ|$|Cr{c|$Ss|Dj|5}(k~k{{ {4{r{yb{_S|D|5}By(k~!E1d鋩gl}݋hio:Al(`nPއq As3rv%zajmy!o}pnrE_zsPYuAw3Fy&!|0u߉v|1twmkx_^ÆkyFO˅zzDA6{U3|&>}ݖ"#~~G{& ~_lن~q^.~OJ[~@惑~2%&XIf5ˆWȅzG҅+ln]| NۃV@P2&nȔkɎcэZyދkIV\σ)NZ|)@Gꅎ2y&Dž xzj3 \7qMЋ@C2& G_2yxhj~[Ԓ!MnF?ƋJ2x&K:Ʉw i[SOdM#ǒ?Y2m-&(dg sYieߐkXnWJpc{"r}~zsIzgh{L[p{O|4B+|7;S}o,Ox~0"Յ~~vrf=BZܒNـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! }~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2u6x)Gz_юzb〾eqhbmk~Rր$nCq4u7&y7}Gh}kj}lp}oa~8qR7~sTC#*u4xA' {*{&q{{r~{t&o|2ug`|vQ}AxB}y4N~{.'|y6z?wyz}z!{Loz{`{?|9Q{|BZ|}R4%}}',~w݊|x%|xnnyH _JzP]zLA{3}'9~u)vNovꊍ{wqm9x+2^xOyA{^3|f'C}䁀uA؈u5zvElw>&]xOXy,ABz\3{Ѕ+'L}lltq5u#zUuŖkv{]cwhNx@yҊv3{U'S} sڤtyu01kvu:\vҕ8Nx*@y\3Wz'Y|u_wbviehͅhoZRkXLEni>[Wq0u<$yB˅h.j@ul^h,n{YpKуXr>ul0Ђx $ւ{!pQVqtՂs!g"yK펭gXwOiknjk_EmRekp'E$r9u&-Jw"ք{1ov勋pkTr ^!sQuE"v8腦x-Pz#|`vvwj/xV]y'QTzDąz8{-S}#U~Aq~0uQh~ri\~]BR~PM~Dzk~8"-Z\# ވ9tCLh?\8 PyBXDKh8-]r#LFt5^ hwZ\?O@OgC邡N8Z-ZqW#Ӂ ~؆'sh[ԃ4OC8 ^^-Y#~se"g[uOOCWq8-Sf$QUx3f_)m2bb!dW:gKoj?ln4}q})鉪u= hyPwfmFhbNjVmm͉/}4/U4+d *u"5wtjCԉ _w TYI=6>gg4+* "cjt<ѐlj)(_?JtTO}I o>-4* "(5sIi^SىHӇ؍"> %3*R"ӂmBo^cxaYZdcNgbDLj9ѓAm/qi&όKuByTlec4gYPj#NDlD6 o 9ؑq0[t'w{l1:lbnXoN^qCsp9ŐOu01 w'az|k|s0bt9XuLM"vwCw9y#09z'|A W}k8yalzJWzM{PCv{9~|09}j'~E "jʚրKa=LRWX:M@C69h0<'އ p0jm醤`f,WtMɄB9F0G!n'k!%j'*`V֓iLƑ Bǎ-^9]07(݃+!R|i`"IV˓Y;L`Bōu9*s0Pg(6oZ!v%pb^Y}s`P7cFѠf=ij48m+wqM#uETyUbdY/"fPgi0F\k=q nb4_qK+tZ$hhw-zak$XԥtlOšnxFpj=]wr4mt,1w@$Ō,y|sapqVX}rsOisFS#u =;v4mx=,W_z%{ }a#wxX8Ax!O)xFy=%z~4l}{,vG|%Q#}K~`ݤ]}X }Oq}E~= ~J4ui~,Q%Rυ`fzWANuEO<4u,~E% `v*W؟ON囨xE֗ĆJ<̅/4hׄ*,ۃ>%W D`YWӞNEӗp?|sk2}v%z0xtkumwvoiVw(qh[3xVsCLyu7?){#wI1|y%~|Eqtrruutvh{uUwZyvxLrxy{1{|U& }}Ǝo|q}Strh}gts}YuH~Kw~M>ox~1z~&%}=T"n!Hot pyfruXt4KSu> w1z:^&9|Zl΍|)nTrsVo͋!eqZXis(Ju=w-$1ky&J|$k•vmWrnڑempr/WrFJntYl=v1Wy{&X{Tj&lrAndogWq"J$s=[v1/x&c{imZ{8]o\2a\b~DdU/^h G΁k:o~.2s#lxA~bz~einh aAjTmcGfp=:Js@.|v#z.|`jy|lm}n`}\pS}rF~Qt:^~v.pyU#〽{z.rxztl{uM`.{v~SK|4wFt|y :}zn.g~{$}xDzwx{Ykyu{_Uz|ERz|F{};9|}.c}~f$<*vvwqkxS^xɁR&yEzF9{À.P}$_~XauzNv&vAjWv^wjQx@3P5i+U"Mv~h"la~sa~[VP~<"K~AG?~oy5L~+Z3"ǁ v)}rk}a}zU}bJ}tW?}5~,+_~"Zu|k|ד/`|ʑU|J`|ˌ?[}5}U+W~;#pu^Zf]p\ms`Qd6Fzg;ϊk1zMox'هsqxZo4a`fd [䍉fQL$iFtl};9o1r(pve >z#nheUj[LlPĊQnFq;|s1gv(B;x j1{n;odqZrP7t Eou;:Jwd1o-y9(b+{5 H}@m,vpc=w^Y6xAOy EI z:{1\|0(}=}_!~l䈺}McY}Yh}O-~D~U:~1\~(nZ!@lZbԆƒX׃YNڂDX:1nF(!qQkubXNUDu:I1K(Á*!kᐿbI9XmSNMHDA[:m1F(р!-eޛ1Y\\S`AI픟c@"gh6fkL-Wo_%Wsxbe"G`}\k?c)S.eIh?Xk6jo+-Wr%[vJzd'g,[ԕ?iLR3kI=m?pJ6VDr-u%x{dm[8KoPRYpH͏=r?d t62v-x%܆zc}csWt3ZuIQv`HXwz?$x6z-{d&|~[bzZ=K{:Q7u{Hw|+>p|5r}T-~&(~8rbY5PgGm>v~5؇n-n&Hi 7_b*φYSPG}>n5Ճ=- &h} f6$aYoP㊄Gf݈>r85Ɔ-̄lq& ځ[\XSP\1J垦_BHic&9f1',k )_koL"^s^xhZڢ_pRԟbJ}dBh9 kG1=|n)r`"ϋGv:>zZkeR^gJ!j8Al9^dom1ArM)׍ZuK#-xw†{Z kQmI1o[ApqR91sq1&ـX/zP[Hޔ8@ő=e8Ў1108*_K_$J[cXoP͖)aHɓ~S@8֍z1E*t$c,4i\U+2_Y&c]}Lf0`litd[lhK;pm(;tq,xv媋X_a\ob`3_eW|'cWhLkfkIZjnaJnq:s4u4+wy>UgiY>k\m~z`ojxdqYhsIm7v :@qx+w{vR=ssKVct&Zduy^lviSbwYgy I:kz]9p{+v7}BOw}BS}nX"}x4\d}h[`}XIe~>Hj~9o~+unM Q†=V8w=Zg}_]WdQEH8i9To +t"K)sOׅT*vzY@uf^WcCGhV9"nt+tiIN$!SMuXfD]7VbeGg8m+t+Hp7M{RK\upW!e\;8VXaGDgb8mr+scU5fiY:Ih]'ukxaeqn,dUqhF/t(m77+wq)[{Xw +`0^呣caEeetc0QgCnll05q)|v#bQ1MU"|YnM]Џ_b,,Qf֊Ckp5p)vMUPjT|Xsm\*_OaZPf!Bk)O5zp)uR[k5UVmYV{'n]=mpa^gsdOuLiASwmI3vzq&}w+g^jbiazl dlnLg]pjOsIn@vqk3Fy/u'&|yQdagx fixialkknB\npNuqpr@tut3#wx<'{{Satpad@qwfsWiit[lv5Mow@ s4yb2v{1'*z}.^y.[ayvfdzhg{%[j{Mng|l?r }&2u}'>z~ގ\ƁR_uwc h f1gZYi"Lm+?Rq2u)'Oyk]Zi{^MtagWdԇmYh]IL!l()?p* 2t}']x聫Y\t`L/fc'Y3g`!KkU>o}2ts'ix}ƌX|Y[7s_YvfJbҒXfKdj>n2Ks'rx'rU~LsYqqu)]Odva#WFx eIyiOr7)t.̂wY&y߂=|eǀq,\rS€t JWuz@߀w7sx.zN&Ł | *l}e~w\M5xS3OyIXzf@{j{77R|.}&E~ i dv}d~}[}~R~~Im~!@$~P07(~_.~' +c|([j|Rq|*I>}{@}U7}[.~='~k c{*[{ʊOR|#H|Q?|U6}.}'$~x W^㓈TVXN \fE%`a<~d3h*ˊm#Mr&w^[U^MwvbDep;ȋyi 3 l*dp#u yU]XgbUEddL=gD:jb;}md2.p+s#wl&z\hT jLClCȈo6;+q2̆t.+zv$0{y|e\ oT&pKErECKAs:5u28w+$Fy$aw{}[u uaS{~v|KGwBx:y2z+17|@$}+~Z{S |'Js|B|:n}w2~+GM~$<gZFpRJhTB\:4݀2P7+?$ہ2 Z3HHR'Jy B_τ:b2ZM+|߂$/TܜT#MZWE [>_6&d.`5h'Emm| r҈~wToRaX1R^DteA6lC*sJ>9Dz|JoP`V+R]LD,d}b6k^*rރK(f9k'y7oԃ-}t$ysyTJnXc]EXa@`MUeBj]7`o7-ct@>$ywlsQltWU+buYdVwU]KBxb?zf4|k*W~p!dvuoXkp\La.r_VtscJvbgC?Vx~k04zoO*l}Ds!xtkq`jmcj`4ofVUAqiKJtlX>vo4Oy!r*u{v" ~z{sLhh9igjju_llT|odnIlqqS>{ts4!wve*zy8"M}|/re)ohRgqs^ jsSmBtHpv)>*s2w4vfy*y{"} }q!bwvgexa]phy7RkpzH^nz=q{3uK|*x}"|`pS`k~fc\f5Rei@Gm1W=yp3tW*x("{р8o^f4a\AeAQh3Gxl=!oɂ3sY*w"{]2o9]$e`[deQgG.k%`[nb 5f,Mk$bCq5ՄvaCjWY[OPGJ^G6b=f4Ձ{j,[o8$sRqx`C|^X |aO}dF~.g=~kC4n,Z\rv$OvaIz[_Tye^W"zgN{j_E{l=|o4T}r,N~u% xI{^pvOlVNwnMxoEFyq<{t4|Nv6,B}x%0zkn}G]srUult!MGvunDx!vb.8XfH0j(fo "5sxV]IO;`uGc?vg7(j/nX(Ճr6"vFgzLUҁcNvfSF܂7i?#4k7P(n/,q(?u%"rxЂ{U)j Ml&F9nL>1p7 ar/u_(w"`z)}T_|p[M}qE~sz>-~|u6~v/Mx(z#t|ts~;SzvyL{wEB|{xt=} yn6{}z/k~2{)~|#D~!{3SAx|YLz/|D{&}-={}6@|}/:}R~x)~#o~RwqKxDz=qzX6U{/h||)'}c#~~NؓOHJSAqX:=\2av+#f%AzkqovM̐UGRY}@]_9}?aq2le+jO%lo RsGxM[F,_?Ռ)b8f2i+y1m%q [v/; z>LxaE|d?1g8{j1ɇm+eoqF%jt xM{Kڈ^gESj!>{l8o1q+\t%τwb }zA|KAmDƅo>@qn7Ąs^1s9up+cw%y!&| aN~JsDL t=v"7w{1Lx+Zmz&|![}~JLy/C炗y=z7V^{X1-|2+E} &2~!~ځ,I|~CR~=U~71l~1$0+T|&(!ĀTmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92EJL`KqJڪMϩVȨaŪk¬u}ŶʲЫ֤ܚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚ82EJK`IqHۭJЬRɬ]ƯgñqyIJˬХ՝ړޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ82EJJ_HpFܯGҰNʱWȶbźlxŭ˧ϠӘ׏ڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏ82DKI_FoDݳCӶH̷Q\lxƩʢΛєԌ׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌72DKG^DnA߸>ֽBJ¾\lxƥɞ̘ϑҊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊ72DKF^Bm>};yN_kzpwtuwsyr{q}poˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀ )A$U5eFpTy{avhrnoqmtkwjyizh|g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@OTNdOuQڥXѢbɟmşwžùǶ˳ϱԮקէէէէէէէէէէէէէէ9*F@NTMdNtOۧUҥ_ʣiŢt¡}øȵͱӮاڡ֡֡֡֡֡֡֡֡֡֡֡֡֡֡9*F@MTLdLtNܪSҩ[˦fƥpåzøɳϰիڠܛ؛؛؛؛؛؛؛؛؛؛؛؛؛؛8*E@LTKcKsLݭPԬX̪bǪlĪv~¸ɳϬգښܖؖؖؖؖؖؖؖؖؖؖؖؖؖؖ8*E@KSJcIrJްMհUΰ^ɰhƲsò|ɮϥ՜ڕّّّّّّّّّّّّّّܑ8*E@JSHbHqH߳JֵQжZ̸eʽq{ȦΝԔ؎یٌٌٌٌٌٌٌٌٌٌٌٌٌٌ8*E@ISGaFpFGٻNӿWcpyǠ͗Ҏׇه؇؇؇؇؇؇؇؇؇؇؇؇؇؇7*D@HREaDoC}DJTbnxǛ̓Њԃւււււււււււււււ7*DAFRD`BnA{BFRamxƘʐΈтӀӀӀӀӀӀӀӀӀӀӀӀӀӀӀ7*DAEQB_?l>x@FQ`mxŕȎˇ΂6*CACP?]Rcpzċņǂ5*BA?7J0R/U,h0BWgs|2*8=/E)H%R)l1EZit|~~~~~~~~~~~~~~~0*/8&<;#W*o5J]ku{~}{zyyyyyyyyyyyyyyy.*%0-A#Z.o<O_lt~x{{y}xvāuÃtÄs†s†s†s†s†s†s†s†s†s†s†s†s†s†s†$%#,F&[5lDzSb|lxquusxqzp|o~ǹm̂l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄ 1G,Y]?fCmMoNYfqyĆǀ|zyyyyyyyyyyyyy5"B7AE=P;Y69A4H3M6P6g;{HXgr{|zzzzzzzzzzzzzz2":43=.B/A.U3k;~J[is{}{ywwwwwwwwwwwwww1"31+6&6&A,Z3n=M^ktz}|zywussssssssssssss.!*+",-#G+]6oB}R`l~s{wx{v~tǀsƂqńpćnĊnËnËnËnËnËnËnËnËnËnËnËnËnË* "3#J.^FJFVHbKmOwU^lȷqw}Ɣɐˌ̊ɊƊƊƊƊƊƊƊƊƊƊƊ6C.F>EJEUFaIkNtU{ajĺpu{ŎȊʆˆɆƆƆƆƆƆƆƆƆƆƆƆ5B.E=DICTD_GhMpVudzinty~ĈDŽɀʁȂƂƂƂƂƂƂƂƂƂƂƂ5B.D=BHASB]FeMkXmazgmrw}Â}z{}}}}}}}}}}}}5B.B<@G>Q@YD`NcYg`yfkpv{}xvuwwwwwwwwwwww4A.@;=E;N>UDYOZQlZ}biqw~|yvtrrrrrrrrrrrr3A/=::C8J;OENF_KqR[fpx|ywvtttttttttttt3>.975?5D9EBHDRHZNaVgbmgmrx~‚ƒ3A&B3@=@GBOGWM]X``lf~kqv|}{}3A&A2?<>EAMESNVZW^kd}jotzzwtwzzzzzzzzzzz3A&?1<:IDMOMWV]jc{hmsx~ytqnqttttttttttt3@&<0989?%9.656::WEgKuS^h|qxwt}pȂnLJkŋiĐhĖfÞeåeåeåeåeåeåeåeåeåeåeå//*"$!# -55I4N?\JfUoy^urd{nk~jphueyc}bځ`ڄ_ه]؋\א[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔  !.,?7MDXOaxYhq_mjdqgjtdowbty`xz_{{]~|\}[~ZYXXXXXXXXXXX   $//==IIRxTZpZ_i_ddegaji^nk\rm[vnZyoX|pW~pVqUrTsStStStStStStStStStStSt'-49~BCwMJnSPgYUb^X^d[[h]Yl^Wp`VsaUvbTxbS{cR}dQdPeOfOfOfOfOfOfOfOfOfOfOf*(~82vD:mKAeQF_WI[]LXbNUfPSjQRmRPpSOrTNuTMwUMyUL{VK~WJWJWJWJWJWJWJWJWJWJWJW->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;VG[Ta`hkpuz䇃߂~zwtrpnmll¤nĤoĤoĤoĤoĤoĤoĤoĤoĤoĤoĤ->K.Q:TGXS^_djluv~䊀߅ۀ|yvsqonmn§p§q§q§q§q§q§q§q§q§q§q§->J-O:QFVR[^aihtq~|߉ۃ{wtrpooqrssssssssss->J-M9OESQX\^herm|wߌۇց}yurporstuuuuuuuuuu->I-L9NDQPV[\fbqi{s}ۊքzvsqqtuvwwwwwwwwww->I,J8LCOOTZYe_ofyoyێևҁ|xussuwxyyyyyyyyyy->H,H7JBMMRXWc]mcwkuܒ~ӌ̆ƀ|yvvwyz{{{{{{{{{{->G,G7HAKLPVUa[kati~ޟsԘ}ˑĊ|zyz{}}}}}}}}}}}->F+F6GAIKNUS^Yh`qhz٥s͜zŕ~}}~->E+D5E@HILSR\Xe_mްivҩqȠx~-=D*C5D>FHKQPYWa^iڴisͬo¤v|-=C*B4B=EFJOOVV]`dԸgrȯmtz-=A*@3A2?;BBGINOWS^_˾dqjpv|~,=?(=1>9A@FEMIXK\^cphntz{xwz||||||||||,==';0<7?)F:MKUZ\hbwgm~svypŁjĉfÒbÜ`æ_ô_¨aaaaaaaaaa,51 .#-"3:.B@IPN_Ul\wc~jvqoyk΀g̈dʐbɘ`ɡ_ɫ_ɹ\â\â\â\â\â\â\â\â\â\â,0,'&- 73>EETLbRnXx}`vipqkxheцbύ`Δ^Λ]ͣ\ͭ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ,+$+&48>KGV}Q^vYen_jhendkraqt_vv]{x[yYzX|W}V~TSSSSSSSSSS   +06=@H}KQuTXmZ]g`bcfe_kg\piZtkXxlW|nUoTpSqRqQrPsPsPsPsPsPsPsPsPsPs־ "!..9:|DCtNJlTPeZT`_X]eZZj\Wn^Ur_Tv`RyaQ}bPcOdNdMeLfLfLfLfLfLfLfLfLfLf %1*|<4sF;jLAcSF^YIZ^LVcNThPRlQPoROrSNvTLyUK|UJVIWHXGXGXGXGXGXGXGXGXGXGX'{3$q<,hC2aJ7[P;VV=S\@P`ANdCLhDJkEInFHqFGtGFvHEyHD|ICIBJBJBJBJBJBJBJBJBJBJ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9G%N1U=[HaSh^ohxp~xz~vspnkjhgffǔfДhГiДiДiДiДiДiДiДiДiД( 9F$M0T >(@0C8H?NEUK޻^TдdeŬksqx~' 7=='?/B6G0C4L6R?YQ¾`bfpl}rx~}xustwx¨x¨x¨x¨x¨x¨x¨x¨x¨' 588#9(<,B.L-O=WP^`doj|pv||vrommp§r§r§r§r§r§r§r§r§r§& 466!6%9'@&I(NNLVY]eco~jxvpnwhc·_ΐ[͚YͥWβV“VДWϕWϕWϕWϕWϕWϕWϕWϕWϕ& ,& '4#=3EBKPR\Xf|_ntfulmzfua}]܆ZۏX٘VءTجTطSɋS֋S֋S֋S֋S֋S֋S֋S֋S֋$ &  &2(;8CFKRR\|Yds^kjdpeluatx^|{[}YVߒUޚSޢRݪQݶQݿQݿQݿQݿQݿQݿQݿQݿQݿ!   &1,;:DGLQ|SZsY`k_fefjamm]tpZzsXtVvTxSyQzP{O|N|N|N|N|N|N|N|N|N|  ' 2.=;EE{MNrTUkZZd`_`gb\meYrgWxiU~jSlQmPnNoMpLqKrKrKrKrKrKrKrKrKr )!4.?9{GAqNHjTNcZR^`VZfXWlZUq\Sv^Qz_O`NaLbKcJdIeHfHfHfHfHfHfHfHfHfͻ, 7+zA4pG;hMAaTE\ZIX_KUeMRjOPnQNrRLwSK{TIUHVGWFWDXDYDYDYDYDYDYDYDYDY".y8%n>-fE2_L7YR;UX>Q]@ObBLfCJjDInEGrFFvGEzHC~HBIAJ@K?K?K?K?K?K?K?K?K?K $w-l3c:$\B(VI,QO/NU1KZ3H^5Fb6Df7Ci8Al8@p9?s:>w:={;<~<:<:=:=:=:=:=:=:=:=:=u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁v$w5yBI'Q2X=_HfQ~nZywbuiqnmskvhyf{d}cba`Ă_΂_׃aۃc݃d݃d݃d݃d݃d݃d݃d݃d݃w$x5|AH'O2V=]GdQlZ|tbxitoptlxj{g~fdba`Dž`Ӆbمd܅eۆeۆeۆeۆeۆeۆeۆeۆeۆx$x5~@G&N1U<[FbPiYqb{{ivprunyk}ifecbaˇbՇdڇeوgىg؉g؉g؉g؉g؉g؉g؉g؉y#y4?F&M0S;ZE`OgYna~xiyptvp{mjgedbÉbЊd؊f؊g׋h֌i֌i֌i֌i֌i֌i֌i֌i֌y#z4>E%L/Q:WD]NeXkati|pwvs|okhfdcnjcԌf֌hՍiԎjԎkԎkԎkԎkԎkԎkԎkԎkԎz#{4=D$J.N8TBZLaVi_phzp{wv|qmjgfeǎfԏhӏjӐkґlґmґmґmґmґmґmґmґmґ{#|4<C$H-L7RAXJ_Tf]nfwo态v{}uqnkihhϓkѓlГmДoГoѓoѓoѓoѓoѓoѓoѓoѓ|#}4;A#F,K5P?VH]Qc[kdumކ~u؀|zvromlkȖmϖoΖpϖqϕrϕrϕrϕrϕrϕrϕrϕrϕ|#}4:@"E+I4NEK2TC[Saahmnwtz{upmjiÜk˛n̚o̙o̙o̙o̙o̙o̙o̙o̙!+ 3214;?I0RBYQ`_fklur~xztojgdcd͘g͘h͗h͗h͗h͗h͗h͗h͗h͗!) 0.,/8 =H.P@XO^]dhjrpz{vt}nhda^]]Д`ДaДaДaДaДaДaДaДaД!( , (& (2 >G,O=VL\Ybehn{ovtu|m|hc_[YXWԎYӏZӐZӐZӐZӐZӐZӐZӐZӐ!'' !  0=F,N:UH[Ua`|gitnpmuvg|{b˄~^ʍZʗWʣUʯT˾SՆTوUىUىUىUىUىUىUىUى% /:"C1J>PJWT|^]tedlljftoa|s\لvYَyU٘{Sڣ|Qڰ}P۾}P|P~QQQQQQQQ  .9'B5IAPK{WSr]Zjc`dje_ri[zlWnSqPrNtLuKvJvJvKuKuKuKuKuKuKuKu !.9*B6JA{RIrWPi\VccZ]i^YpaUwcRfOgMiKkJlImHmGnFnFnFnFnFnFnFnFnӺ "/:+C5zL>qQEhVKa[O\bSWhVToXQuZN|\L]J_H`GaFbEcDdCdCdCdCdCdCdCdCdֲľ %2<)yE2oJ9gO?_UCZ[GUaJRgLOlNMrOKxQI~RGSETCUBVAW@X@X@X@X@X@X@X@X@XƸ  (4w<%mB,eG2]M6WS:SY=O_?LdAJiCHnDFsEDyFB~GAH?I>J=K$[D)TJ,PQ/LW2I\3F`5De6Bi7An8?s9=w:<|;;<9=8=7>6>6>6>6>6>6>6>6>|q$ h+_2W9Q?LF!HM#ER%BW'@[(>_)vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj$i2 l>vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj#i1 n>wE|M(~T3|\E%L.S8ZAaKiS|q[v|bqhmmiqfucxaz`{_|_}b}c~df߀g߀g߀g߀g߀g߀g߀g߀g߀o!o0 ~6<D$L-R6Y@`IfRnZ|yawhrnmsjwgze|c~bÀbӁd߁eނg݂h݃i݃i݃i݃i݃i݃i݃i݃i݃p!r/ 4;C"K+Q4W=]FdOkXu`|hwnrtnyk}hfee˄f܄hۅiۅkۅlۅlۅlۅlۅlۅlۅlۅlۅq!t. 3:C!I)N2T;[DbMiUs^ۂ|f|owurzoljiiĈi؈kوlوmوoڇoڇoڇoڇoڇoڇoڇoڇq v, 2:B G'L/R8X@_IgRڏp\чxfʁo|vw|tqomllϋn׋o؊p؊qىqىqىqىqىqىqىqىr x+ 09AE%J-P4V<\EܛeOғm\ʌufÆ}ov|}xusqppɍqՍs֌t֋t؊t؊t؊t؊t؊t؊t؊t؊s z* /9?C#H*N1T8\@՟bN˘k[Ñrfzow}}ywuttŏuԎvՍwՍw֋w֋w֋w֋w֋w֋w֋w֋s |) /8=A!F'L-R3ܪY?УaMƜiZpewov}~{yxxyӐzԏzՍ{֌{֌{֌{֌{֌{֌{֌{֌t~( .8<?D$J)Q.֮W>˧_MgZneun|v}~}}~Б~ӏ~Ԏ~Ս~Ս~Ս~Ս~Ս~Ս~Ս~Սt'.7:=B H$߷N,ѱU=Ǫ^LeYldsnzv|̑ӐԏՍՍՍՍՍՍՍՍu&- 68;?FڻK+ʹT<®\KcXjcqmwu~|}{ɑ|Ӑ|ԏ}Ս}Ս}Ս}Ս}Ս}Ս}Ս}Սu%- 568=EվI*ȸS;[JbWhbolut|{|yvtƑuӐvԏxՍxՍxՍxՍxՍxՍxՍxՍv$, 235:?H)ĻQ9YH`Ugamktszz{vronÐnӏpԎrՍrՍrՍrՍrՍrՍrՍrՍw", 0 /17 ;F'P8XG_Te_kirqxx~ztoliggՎiՍl֌l֌l֌l֌l֌l֌l֌l֌x!+, * + 29E%N6VE]Rc]igpovvy}|snieca`ҋc׋e؊e؊e؊e؊e؊e؊e؊e؊z )'$$'7C#L4TB[ObZhdnlytrs{xm}hc_][ZЇ\ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ~& %5A!K1R?YL`Wf`zlgssmlzsgwb{^~ZXVUρVނX݂X݂X݂X݂X݂X݂X݂X݂ &6@I-Q;XH^R{eZskalrgfylaǁp]ƊtYƔvVşxSƬyRƻzQyQzS|S|S|S|S|S|S|S| &4? G-O9VD{]LsdTlkZfr_ayd\ԂgXԋjUԕmRԠnPԭoNռpMoMpNrNrNrNrNrNrNrNrع  ' 4>$G0N:zTCqZJiaPdhU_pYZx\V_SbPdMeKgJgIgHgJgJgJgJgJgJgJgJg ۱ʽ (5?&G1yN9pT@hZFa`K]gOXnRTuUQ}WNYK[H\F^D_C_B`A`A`A`A`A`A`A`A`ާ˶ +6@&xH/oM6gS<`X@[_DVeGRlIOrKKyMHOEQCRAS?T=U=VLh@InAFuCC|D@F=G4>3?3?3?3?3?3?3?3? y o( g0_7X>RDLJ"HP$DU&AZ'>_);d*:i+8n,6t-4z.3/1000.1-2-2-2-2-2-2-2-2 ujb!Z) S1M8H>CD?JwFxN(wV1t_:nhAjsHf~NbS_V\ZZ\X^W`UaTbScSdRdTdVdXdYeZfZfZfZfZfZfZfb$^/j5 t<zD|L'{T0w\9reAloHh{NdS`X][[^Y`XbVcUdTeSfTfVfYfZg[h\h\h\h\h\h\h\hc$_.m3 w:}BJ&R0|[8wcAplHlwOgTcY`\]_[bYdXfWgVhUhViYh[i\j]k^k^k^k^k^k^k^kd#a-p2 {8@I%Q.Y7|a@viHpsOlUhZd^aa_d]f[hZjYkYkYk[l]m^n_n`o`o`o`o`o`o`oe#d+s0 ~6?H$O-W6^>|fFvpNq{UmZi_ecbf`i^k]l\m\n]n^o_qaqbrcrcrcrcrcrcrcrf#g)w. 5>G"N+U3\_JeUl^sfzlrw|{wtrƒrڃsށt߀uuuuuuuo#+,,16ɻCM.V<]IdTj]qexkqvyzu~qnlkՂmށo߀pppppppq!)'&*5ĿAL-T;[GbRi[ocvj~|oxtsyo|khfeрfh~j~j~j~j~j~j~j~u % "3 @J+S9ZEaPgYm`~tgxzmrrmvhyd|a~_~_~_}b}c|c|c|c|c|c|c|x0 >H(Q6XB_MeVk]xrdryilngrbu_x\zZzYzXz[z]y]y]y]y]y]y]y} . ;F%O3V?]IcRxjYqp_kwdfiam]pYrVtTtStStTuVuVuVuVuVuVuVuٸ +9D"M/T;[DxbMqiSkoYev^`~b\‡fXhUkRlPmOmOlOnPoPoPoPoPoPoPoگͻ +9CK*S5yZ?qaFjhLeoR`vV[~ZWχ]Sϑ_PϜaNϩcLϸcKcLbJeKfKfKfKfKfKfKf ަδ¿ - 9B J*wP3oX;i_AcfF^nJZuNV}QR߆SOߐVMߛWKXIYHYHYGYF[F[F[F[F[F[F[ѭ¸ .:C!vJ*nP1fV7`\<[d@WkCSrFPzIMKJMHNEPCQBQARAR@Q@Q@Q@Q@Q@Q@QԥIJ$1~;tB lH'eO-^U1Y[5Ub8Qh;Mo=Jv?G~ADCBE@F>G4>3?3?3?3?3?3?3? v$n- f5_<XCSINO!JU$F[&C`'@f)>k*;r+9y-6.4/1001.2-3,3,3,3,3,3,3,3}rha'Z/ T7N>IDEJAO>U;Y9_6d4i2p /w!-"+#($'%&&%&%&%&%&%&%&%&xo d\T N'H/C6 ?< sHrQ&oZ.jc6enxqFs{MnSjXg]e`ccae`g_h_i`iajbjcjdieieieieieiei^#i"v#, 6>EL"S*Z2߅e;~mExvMtTpZl^ibgeehdjckclcldmflglhkhkhkhkhkhkhk_#k y"+4 <CJP&X.׊a:΄jE~sMy{Uu[q`ndlgjjhlgngogohoiojnkmkmkmkmkmkmkm_#n{!*2 :AGM!ږU-Ϗ^9ȉgDoM~wUy[v`sephnllnkpkqkrlqmpmpnonnnnnnnnnnnna!p~ )1 8 >DߠJӚR+ʓ\8dCmMtT~|[zawetirmpporosospsprqqqpqpqpqpqpqpqpc r'/6 ;@ڤFΞQ*ŗZ7bBjLrTy[`|eyjwmupssstsutttsuruqupupupupupupet&-4 7 =ԧDɡO)X6`BhKoSvZ~`e}j{nyqxswuwvxuxtxsxqxqxqxqxqxqxqgw$+03ܮ7 ϪCťN(W5_AfJmStZ{`ejn~q}t|u}|v|}v|}t}|s}|r}|q}|q}|q}|q}|q}|qiy#),/ײ4 ˭AL'U4]@dIkRrYy_dimq|tyvwvvvvtwsxrxqxqxqxqxqxqk{!&'ߴ)ҵ2 ǰ@K&S3[>cHiQpXw^~di~mzqvssuqvovptqsrrsqsqsqsqsqsqm~" ں!͸1 ´>I$R1Z=aGhOnWu]|c}hxltpprmtjuiuitksmqmqmqmqmqmqmqpӽȻ/<G#P0X;_EfNlUs[}zawfrjnnjqfsdscscreqgpgpgpgpgpgpgpsپ -:F!O-V9^CdLjS|qYvx_qclhhkdn`p^q]q]p^p`oaoaoaoaoaoaow׵ *8DM+U6\@bI|iPvoVpv[k}`fdbg^j[lXmWmWlWlZlZlZlZlZlZlZl| ح ͸ '6AK(S3Z<}aEvgKpmQjtVe|[`_\bXeUfSgRgRgQhShThThThThThTh ۥαŻ#3 ?H$Q.}X8v_?ofFilKdsP_{T[XW[T]Q_O`M`M_LaMbMbMbMbMbMbMb Ъŵ / <F~O)vV2o^9hd?ckD^sIZzLVʃORʍROʘTMʥVKʳWJWIVIXGYHZHZHZHZHZHZԢǯ !0 ;}DuM$nU+g\2bd7]k;Yr?UzCRڃENڍHLژJIڥKH۳LGLFLFLDOCOCOCOCOCOCOۚʩ %3 {<sDkK"dR(^Y-Y`2Uh5Ro8Ow;L=I?GADBBCAD@D@D@D@C@C@C@C@C@Cͣ (x2 p;iCbJ\P#VW'R^+Oe-Ll0Is2F{4C6A7>9=:;;:<9<8<8<8<8<8<8<8<|t&l0 e8^@XGSMOT KZ"Ha%Eg&Bm(@u*=}+:-8.6/40312212121212121212yog"`,Z4 T<OCJIGOCU@[>a;f9m6t 4}!1#/$-%,&+&*')')')')')')'~ukb[T&N.I5E< AC >H;N8S5X3^1d.j,r*z'%$#"!!!!!!~pg^ VOI C'?.:47:3?0D.I ,N )S 'X %^ #d !l t }L*H3O4T7ZA\JZTW`$Tk*Px/M3J6G9F;EC?B?B@AAAAABABABBADAFBGBGBGBGBGBGBM)J2Q2W6\?^I]SZ^$Wi*Su/P4M7J:HFNW&~a1xj:ssBo|HlMiQfUdXcZa\`^`_`_a_a_c_d_d^d^d^d^d^d^[ ht~#+4 ;CJڊT%Ѓ]0~g:xoBtxHqNnRkViZg\e_dadbdbdbebfag`h`h`h`h`h`h`]jw!)18 ?ݔGҎQ$ʈ[/ƒd9~lAytHu|NrSoWm[k^j`hchdhehdidjckbkakakakakaka_mz'.5; ֘C̓O"čX.a8iA~qHzyNwStXq[o_nbmdlflflfmendncnbnbnbnbnbnbao|$+1ݠ6 ќAǗM!V-_7g@nH~vN{}SxXv\t_rbqepgphpgqfrerdrcrcrcrcrcrccq!',ؤ2̟@ÚK U,]7e?lGsM{S}Wz\x`vcuftgththugvfueududududududet#ߦ&ҧ0ȣ>IS+[6c?jFqMxRW\}`{czf~yh{yizyiyzhzzfzyezydzydzydzydzydzydgv۫Ϊ/Ħ=HQ*Y4a>hEoLvR}W[_~czfw~hu}is~is~ht~ft}eu|du|du|du|du|du|dixծʭ-;FP)X3_bpC^wGZKVNSPPRMTLTKTKTJUJVJVJVJVJVJV֘ɥ(6 AyJrR&lZ-fa2ah7\oqHjPdX%__*[g/Wn3Sv6P9Lӈ;JӔ>GӠ?EԮ@DԿAC@D@BBADADADADADADјå }&u2n<gEaM\U W]$Td'Pk*Ms-J|0H2E4C5A6@7?7?7?6=8=8=8=8=8=8ơyq'j2d; ^CXKSRPYL` Ig#Go%Dw'A)?*=,;-9.8/7/7/6/6/6/6/6/6/{tmf&_/Z8 T@PGLNHUE[Bb@h=p:x8 6"4#2$1%0&/&.&.&.&.&.&.&yphaZ#T+O3J;FB CI @O=U:[8a5h3o0x.,*)('&&&&&&xlc\UOI&D.@4<;9A6F3L1Q .W ,] *d (l %u #! yk^VO IC> 9'5-23.8+=(B&G$L"Q W^enx        B-B2H2L6N<PGPRN_KkHw$E'B*A,?.?/>0=1=2<2<3;3;4;4;4<3<3=4?5?5?5?5?5?5C,D0J0N4Q:SFRQQ]Ni Kt$H(E+C-B/A0@1?2?3>4>4>5=5=5>5>5?4?6A7A7A7A7A7A7D,G.M.Q2T9WDVOTZQf Nr%K})H,F.E0D2C3B4B5A6A6@7@7@7@7A6A7A8C9D9D9D9D9D9E+I,P,U/Y7\B[MXWVc Ro%Oz*L-J0H2G4F5E6E7D8D8D9C9D9D9D9D:E;FH?J@J@J@J@J@J@G*P'X&^*c3f= fGdQ`[ \g&Yr+V}/S3Q5P7N9M;LK>L=K?KAJBLCMCNCNCNCNCNCJ(T$\#c(h0l; lDjNfXab%^m+[x0X4V7T9S;Q=Q>P?O@O@OAOAOCNENFPFQGQGQGQGQGQGM%W!` h&n.r8 rApKmTh^$di*at0^~4[8Y;W>U@TBSCRDRERFRFRHRIRJTJUJUJUJUJUJUJP#[dm$s+w5x>wGtPoZ"ke)go/cy5`:]>[AYCXEWGVIVJUKUKVLVMVMXMYMYMYMYMYMYMS ^hq"x(|1~: }CzLvWra(mk/it6e};b@`C^F]H[KZLYNYOYOZPZPZP[P\P]O]O]O]O]OValu |%.7 ?H}Sw]'rg0np7jxHQ%X._5f<}mAxtFs{KoOkRgUdXaY_Z_Y_Y_XaWaWaWaWaWaWo  ߍҘʢ© /<FO#V,]3}d9wk?rqDnyHiLePaS^U[WZXYWYWYV[U[U[U[U[U[Us ̜ؑå ,9DM T)}\0wb6qi|HuP!oX'j_-ee2`l6\t:X|>UAQDNFLHJHIHIHHIHJHJHJHJHJHJΔ¡ /{; tEnNhV!c]'^d+Zk/Vr3S{6O9LG?F@E@E?DACBCCCCCCCCCC֍ƛ y*r7lBfKaS\[Xb#Ti'Qq*Mz-J΃0HΎ2EΚ4CΨ5Bθ6A5A5@7?9>9>9>9>9>9ʖx sn&h3b> ]HYPUXQ`NgKo Hx#Fށ%Cތ'Aޘ)?ަ*>ߵ*=*=*<+;-:.:.:.:.:.vnic'^2X;TD OLLSI[FbDjAr?{<: 8!7"6#5#4#4#4#4#4#4#4#uid^Y&T0O8K@GG DN AU?\A;G8N5T 3Z 1a /i ,r *} (&%$#""""""sgYSMHC?&:-73390?.D+J)P'V$]"e ny         tgXMGB <840%,+)0%5#: ?DIOV^hr~      9/<0A1D4D:DEEQ C]Ai>v<:9 8!7#7#6$6%6%5&5&5&5&5&6&6&6&6'6(6(6(6(6(9/>/D/F2H8HCHO G[DgBs?=$=%=&<'<(;);););*;*;)<)<*;+;,;-;-;-;-;-<-D)J)N,Q4R>RJ PUMaJmHxE"C$B&A'@(@)?*?+?+?+?,?,?+?,?->/>0?0?0?0?0?0@*H&N&R)V2W<WG UQR]PiMt J#H&G(F)E*D+D,C-C-C.C.C.D-C0B1B2B3C4C4C4C4C4C'K#R"X'\/]9^C [NXXUdRo Pz$M'L)J+I-I.H/G/G0G0G0H0G2G4F5F6F7H7H7H7H7H7F$O V]$a,c5d@ bJ^T[_Xk Uu%S(Q+O-N/M0L1L2K3K4J5K5K6J8J:J:K;L;L;L;L;L;J!S[b"g)i2j< hFePa[^f [q%X{)V,T/R2Q4P5O7N8N9N:N:O;N=N=N>O>P>P>P>P>P>MV_g l&o.p8oB lKiWebal%]v*[~/Y2W5V7T9S;SR?R?R?RARASASATATATATATAPZdlq#u*v3v= sGoSk^fg&cq+`y0^4\7Z:YW@VBVCUCVDVDWDWDXDXDXDXDXDXDS]hpv z&|.|8zD uOpZlc&hl,fu1c}5a9_<]?\A[CZEZFYGZGZG[G[G\F\F\F\F\F\FU`ktz")ނ3@ zLvVq`%nh,kq2hy6f:d=b@`C_E^G^I]J]J^J_I_I`H`G`G`G`G`GXcnw~#և.̃= I{Sv]%se,om2mu7j|;h>fAeDcGbIbKaLaLbLcKcJdIdIdIdIdIdIZfqz݋Ћ,Lj; GQ{Z$wb+tj1qr6oy;m?kBiEhHfJfLeMeNfNgLgKhKhJhJhJhJhJ\ht}֏ˎ*Œ8 DOX#|`+xh1uo6sv;q}?oBmElHkKjMiNiOjOkNkLkKkKkKkKkKkK^kv ۏ Вǒ'6BMV"^*}e0zl5ws:u{>sBrFpIoLnN}nO{mPznPyoNyoMyoLyoKyoKyoKyoKyoK`m y ۋ ԑ ̕•%4AKT!\)c/~j5|q9zx=xBvEuI|sLyrNvrPurPsrPtsOtsMtsLtsLtsLtsLtsLtsLbo { ކՎϔ ǘ#2?IR Z(a.h4o9v=}~A}{EzyIvxLswNqwPovPnwPnwOnwNnwMowLowLowLowLowLd r ~ڈАʗ›!0=GPX'_-f3m8t={{AxEtHq}Km|Nk|Oi{Ph|Ph|Oi|Ni|Mj{Lj{Lj{Lj{Lj{Lf uԋ˓Ě.; ENV%],d2k7zrmBiFeIbK_M^N\N]M]L]K^K^K^K^K^Km|Ոʒ )6 AJR!~Z(y`.tg3on8kuQ@OBMCLCLCKCKDKDKDKDKDKD}ϋ–-}9 wCqLkSfZ"ba&^h+Zo.Vw2S5O8L:JE?E?E?E?E?ڃǑ {(u5o@ iIdQ_X[_ Wf$Tn'Qv*M-J0H2E4C4B5C4B5A7@7@7@7@7@7΋{tp"k0f<aE \NXVT]QdNlKt"H~$EȈ'Cȕ(AȢ*?ȱ+>+>*>+=-<.<.<.<.<.ē{pg d`*\6XATJ PR MZJbGiErB|@؇=ؓ<ء:ٰ 9 9 9 8"7#7#7#7#7#{pe]ZV'R2N<JDGMEU B\ @d>l;v9754221111111{ocXTQM&I/E8A?>G94 0,)&""',16<AHOW a l y 116.:/;2;9;C9O8\ 6h 4t2100//.........//......3/9,=->0?6?A=M<<;::9999999:9!9#9$9$9%9%9%9%<'C#H"L&O/P9NCLO J[HfEqC|BA@?? > >!>!>!>!>!?!>#=%='=(=(=(=(=(=(?#G LQ$U,V5U?SJ PVNbKmIwGFE D!C"C#C#B$B$C$C$C%B(B*B+A+A,A,A,A,A,C JPW![(\2[;YF VQT]QhOrM|K J!I#H$G&G'F(F(F)F*G*F,F.F/F/F/F/F/F/F/FNV\`%b-b7`A]L ZXXcUnRwP"O$M'L(L*K+J,J-J.J/K/J1J2J2K3K3K3K3K3K3JRZaf!h)h2g<dH aT^^[iXr V{$T'R*Q,P.O/O1N2N3N4N4N5O6O6O6O6O6O6O6O6MU_fkm$n,m6kCgOdZ`d]m"[v&Y~)W,V/U1T3S4R6R7R8R8R9S9S9S9T8T8T8T8T8OYcjort&t1q?mKiVf`ci"`q'^y+\.[1Y3X5W7W9V:V;VZ?Z?[>[>\=\<\<\<\<\`>`=`=`=`=Wb l t z ~ ҁȁ'6|B xMuVr_"of'ln,ju0h|3g6e9db@bBbBbCcBcAd@d?d?d?d?d?Yd n w}Ԃ ̄Å$4@ |KyTv\!sd&qk+or/my3k6j9h I}RzZ wa&uh+so/qw3o~6n:m=k?|kByjCxjDvjEvkCvkBvkAvl@vl@vl@vl@vl@] it|ЃɈÊ /< GP~X|_%yf*wm.ut2t|6r9|q=yp@voBtnDrnEpnEpoDpoCqoAqo@qp@qp@qp@qp@_kvˆŋ -: ENV]$~d)|k-zr2}xy5zw9wvf~Ac~Ca}D`}D_}C`}B`}Aa}@a}@a}@a}@a}@gtLj&3? HPX z_%ve*rl.ns2j{6f9c<`?]A[BZCZBZA[@[@[?[?[?[?jx̓Œ#1< FNzVu]#pc(lj,hq0ey4a7^:Z=X?V@T@T@T?U?U>U>U>U>U>o|ȇ .9 CyLtSoZ ja%fh)co-_w0[4X7U9R;P=O=O,=-=-=-=-=-ljsj gc(_5[?WH TP PXM_JfHnExBÂ@Î>Ü<ë ;ü!:!;!9"8$8$8$8$8$uj^YW!U.Q9NCKLISF[ Cc Ak>u<р:ь8њ6ѩ5ѻ45433333uj^TL JH&F2D<BE?M=U;]9f7o 5z 3 1 0..--,,,,,vj^SIEB@$=.:68>6F3M1U/]-e+p){(&%$#""""""wj]QF?<96 3(10.6+=)D'J%R#Z cn{xj]PD:52 .+(!&'#- 39?EMU_jx       yk^PC8/+'$!#(-28? F OYer,/0,2,30160A/M-Z+f)s(~ ' ' ' & &&&&&&&&&&''&&&&&&.,3)5*6-645?3K2W0d.p ,{ , + +****)))))**+***))))1)6&9&:);2;=9H7T5`3l 2w 0 0//.........//.......4&9#=#>&A/A9?E=P;\9h 7s 6~5443333333334332322228#= AE#G,G6F@DLAX?d >o>=========< qInRl[ibgj"fq%dx(c+a.`0_3_5^6^8^8_7~_6~`5~`4~`4~`4~`4~`4U`ipuxz{z/x<uF sPpXn`kg!jn%hu(g|+f.d1c4c6|b7zb9yb9xc8xc7xd6xd5xd5xd5xd5xd5Wblsx{} ~~,|9yD wNtVr]pd nk$lr(kz+j.~i1{h4xg6vf8tf9sf:rf9rg8rg7rh6rh5rh5rh5rh5Yenv{ *7}B {KxTv[tb ri$qp'~ow+{n.xm1vl4sk6pj8nj:mj:lj:mk8mk7mk6mk6mk6mk6mk6[gqy~ (5@ I}R{Yy`wg#|un'ytu*vs}.sr1pq4mp6ko8io:ho:go:go8ho7ho6ho6ho6ho6ho6^jt|%3> GPW~^{|e"xzl&tys*qx{-nw0kv3hu6ft8ds9bs:bs:bs8cs7cs6cs6cs6cs6cs6amw#0<ENU{\wc!sj%oq)l}y,i|/f{2cz5`y7^y8]y9\y9]y8]x7^x6^x5^x5^x5^x5dpz .9C LzSuZqa nh#jo'gw+c.`1]3[6Y7W8W7W7X~6X~5X~5X~5X~5X~5ht~+7A yItQpXl_hf!em%at(^},[/X1U3S5R5Q5Q5R4R4R3R3R3R3ly '~4y>sG oOjVf]cc_j"\r%Y{(U+R.P0N1L2L2L2L2L1L1L1L1L1q~|#w0r;mD hLdT`Z]aYhVp!Sy$P'M)J,H-G-F-F-F.F.F.F.F.F.w}wso,j7eAaI ]QZXW_SfPnMvJ!H$E&C'B(A'A'@(@)@)@)@)@)~ul ie'a3^=ZFVN SU P\McJkGtE~B@> < < < ;!:":#:#:#:#yma]Z X-T8QBNJLRIY F` DhAq?|<:8767554444{ocXP ML%J1G;EDCLAT>\=<&;19;8E6M5V3^1h0s.,ۍ*ܝ)ܭ(('&& & & & ~qeYMC:5 31 0*.3-<+D*L(T']%g#s" reYLA8/- +(&$$+"2!9AIQZersfYK@5,&$ !"(.5<CL V b ougZK?3)!  # (.5=FQ]k{',**+**.&4%?#K!X dp{     )*,'.'-*,2+=)I'U%a#m"x"!!!!!!!!!!!!!"" " ! ! ! ! ! ,&0$1#1&2/1:/F-R+^)i(u''&&&& & & & & & & & ' ' & & & &&&&/#3 57#8,876B4N2Z0e.p-{-, , , + + + + + + , , , , ,,,,,,,37:= ?(?2=>;I9U7a5l4v3 2 2 2 1 1 1 1 1 1 2 2 2111111117;?CF$F.D9BD?P=\FJDVCbAl @u ?~ >==<<<;;;<<<<<<<<<<>DJOQR#Q-O8MEKQI\Gf FpExDCBBAA@@@@AAAAAAAAABG OSVWV%U1S?RLPW Na LjJrIzHGGFFEEEEE F!F!F"F!F!F!F!F!EK S W Z[ZZ+Z;XHVS T\ RePmOuN|MLKJJ!I"I#I$J$J$J%K$K$K$K$K$K$H OV[ ^ ^ _`'_6^C[N YXWaUiTpSxRQP O"N#N%N&N'N'N'O'O'P&P&P&P&P&J SZ_bc ce#e2c@aK ^T\][eYlXsVzU T"T$S&R'R)R*R*S*S)T)T(T(T(T(T(LV]cghhj i/h<eG cQ aZ_a^i\p[wZ~!Y#X%W'W)V+V,V,W,W+X*X*X)X)X)X)OY`gjllmn,l9jDhN fWd^be`l_s^{!]$\&[([*Z,}Z-|Z.zZ.z[-z\,y\+z\*z\*z\*z\*Q[djnpp qq)p7nBlK jTh\fceicpbx!a$`&}_){_+x^-v^.u^/t^/t_.t_,t`+t`+t`+t`+t`+S^gmqss uu't4r?pI nRlYj`ighnfu!}e}$zd&wd)uc+rb-pb/ob/nb/nc.nc-nc,nc+nc+nc+nc+U`iptwwxy$x2v=tG rOpWo^md}lkzks wjz#ti&rh)og,mg.kf/if0if0ig/ig-ig,jg+jg+jg+jg+Xclsxzz{|"|/z;xE wMuUs\{rbxpiuop rnx#om&ml)jl+hk.fk/dj0ck0ck/dk-dk-ek,ek,ek,ek,[fov{~~-9}C {K ~zSzxZvwasugptnmsv"jr&hq(ep+bp-`o/_o/^o/^o/_o-_o,`o,`o,`o,`o,^iry+6@~I yQu}Xr|_n{ekzlhyt"ex}%bw'`v*]u,[u.Zt/Yu/Yt.Yt-Zt,Zt+Zt+Zt+Zt+amv} (4~>yG tOpVm]icfjcr `~z#]}&Z|)X{+V{,T{-S{-Tz-Tz,Ty+Uy*Uy*Uy*Uy*eqz $}1x;sD oL kTgZdaah^p[x!X$U&R)P*O+N+N+N*O*O)O)O)O)ju{!w-r8mBiJ eQbX^_[fXmUvR!O#M%K'I(H(H'I(I'I'I'I'I'o{~wso)k5f?bG_O \VX\UcSkPsM}JG!E#D#C#C#C$C$C$C$C$C$utn jf%c1_;[DXKUS RZ OaMhJqG{DB@>====<< < < |{oc_\Z+W6T@QHNOKW I^ Ff DnAx?<:988776666sgZS QO$M0J:HCFKDRAZ?b=k :u 8 64321100000ui^SGCB@'?2><5-% $#"%!. 7@JS^jx{naTH=3*" &-5=FP[i x }obUG;1'  # ) 08ALXfwqcVH:/% #*2<GTcs")#'#( +1=IVbnx$'&$&$$'"/ :FS_ju'#) ) (#)-'7%C#O![fq{+--. /)/4,?*K(W&b%m$w############$$$$$ $ $ $ $ .1256%6/4:1F/R-],h+r*{***)))))***** + * * * * * * 258;= <*;59A6M4X3c2m2v11000//// 0 0 1 1 111111169>ACB#A.>:=Ft ={ = < <<;;;;;;<<<<<<<<= BH K LLJJ,K;JHHSG]Ff Dn Cv C}BAA@@@@@@AAAAABBB@ FLOP O OQ'Q6PCONMXLa Ji IpHxGGFFEEEEEEFFFFGGGBJPTVU UV"W2V?TJSTQ] PdNlMsLzLKJJIIIIJJKKKKKKEMTY[[Z[\.[;ZFXPVY U`ShRoQvP}PONNNN N!N!O O OPPPPGQX]``^ `a*`7^C]M[U Y]XdWkVrUyTSSRR!R"R#}R#|S"|S!{T!{T {T {T {T JT\addc de'd4c@aJ_R ^Z]a[hZoYvX}XW}V {V"yV#wV$vV$uW$uW#uX"uX!uX!uX!uX!MW_dghghi$h2g=eGdO bW a^_e^l]s}]z{\y[v[!tZ#rZ$qZ%pZ%o[%o[#o["o["o[!o[!o[!OZbgkljkl!l/k:iDhM fU e\db}bizbpxaxu`s_p_!n^#l^%k^&j^&i^%j_$j_#j_"j_"j_"j_"R]eknonopp,o8mBlK jR ~iY{h`wffufnreupd~mckc"ib$gb%eb&db&db&eb$ec#ec"ec"ec"ec"U`hnqsqrst*s6r@pH}oP ymWvl^skdpjlmiski|hhfg!dg#bf%`f&_f&_f&`f$`f#`f#af"af"af"Xckquwuv wx'w3v=|uFxsN urUqq\npckojinqfnzcmal!_k#]k%[k&Zk&Zk%[k$[j#\j"\j"\j"\j"[fnty{yz {|$|1|{;wzDsyL pxS lwZivaguhdtoasx^r\q Zq"Xp$Vp%Up%Up%Up$Vo#Vo"Wo"Wo"Wo"_irx}~!{.w9rBnJk~Q h}Xd|_b{f_zm\yuYxWxTw!Rv"Qv#Pv$Pv#Pu#Qu"Qt!Qt!Qt!Qt!cmv}}yu+q6m?iGeO bV _\\cZkWsT}QO~M~ K}!J}"J}!K|!K{ K{ K{ K{ K{ gr{|vrn'j2f<cD`L\S ZZ WaThQqOzLJHFEEEEEEEEmxtn if"c.`8\AYIVPTW Q^ NfLnIxFDB@????????s~{le`][)X4U=REPMMTK[ Hc Fk CuA><:99998888zuh[V SQ#O/L8JAHIFPCXA_?h=r :} 8 6433322222ymaUKGED'B2A;?C=K;S9[7d5n3y1/.- ,, + + * * * }qdYMB; 875)423;2D1L/U.^,h*t)'&$###""""sg[OD:0* ('&'%0$9#B"K!U _lz͊͜ήuh\PD90(  "+4=HS_m~ߑ wj]PD8.%   ! ) 1 ;EQ^nyk^QC7-#  %.7BN]n{m`RD7+!  !)3>K[l&$%'.:G S _ k u           #!!$,7DP\gr{""! )4@LXcnw%&$%&%$0!;HT_is|)*),,!,+)7'C%O#Z"d!n!w!!!    !!!!""#######,.0332%00.<,I*U*_)i)r(z(((((((((()****** * * 02 6 8975(352B2O1Z1d0m0u0|/////////00 0 0 0 0 0 0 0 3 6< > =<99-:<:I9T9^8g7o7v6}6655 5 5 5 5 5 6 6 6777777;@BB ?>@'A6ADAO@Y?a>i=q=x< < ; ; ; ; :;;;<<<<<<<:@EHHF EG"H1H?GJFTE]DdClBs Bz A A @@@@@@@AAABBBB<DJNOMKMN-N:MFLOKXJ`Ig Hn Gu F|FEEEEEEEFFFGGGG?HOSUSQ RS)S6RBQKPTO\Nc Mj LqKxKJJIIIIJJ~K~K}K}K}K}KCLSXYXV WX%X2W>VHUQTXR_ Rf QmPtO{ONN}N{MzNxNwNwOvOvOvOvOvOFPW\^]Z[\"\/[;ZEYMXUW\ Vc UjTq~Tx|SzRxRvRtRrRqRpRpSpSpSpSpSpSISZ_ba^_``,`8^B]K\R[Y Z` }Yg{XnxXuvW}tWrVoVnVlVkVjVjWjWjWkWkWkWLV^beebbcd)c5b?aH`P}_W z^] w]d u\ks\rp[{n[lZjZhZfZeZeZeZeZeZeZeZeZOYafhief gh'g2f=eF{dMxcT ub[ raa paim`pk_yi_g^e^c^a^`^`^`^`^`^a^a^a^R\dillij jk$k0~j:ziCvhKsgRpgY mf` kefhdnfdvdcbc`b^b\b[b[b[b[b\b\b\b\bU_glpolmno!}o-yo8unArmInlPkkW ik^ fjedilait_h~]g[gYfWfVfVfVfWfWfWfWfWfYbjpsspqr|sxs*ts5ps?mrGjqNgqU dp\ boc_oj]nrZm|XmVlTlRkQkQkQkRkRjRjRjRj\fntwvuvzwvxry'oy2kx<hxDewLbwS_vZ ]ua ZuhXtpUsySsQrOrMqLqKqLqLpMpMoMoMo`jrx{zzz{t| o~l~$i/f9bB_~I]}PZ}W W|^ U|e R{nPzwNzKyIyHxFxFxFwGvGvGuGuGueow}~sl he b,_6\?YFWNTUR\ Oc Mk KtHFDBA@AA~A}A}A}A}ju}yjd`]['X2U;SCPJNRLYI`Gh Er B}@><;:;;;;;;q{se\W TR"P-M6K?IGGNEUC]Ae>o <:9)827;5C4K2S1\/f-q+*('&&%%%%%xk_SH=4/-, +)*2):(C'L&U$_#k"x {nbVJ?5,$ &/8AJUaoƑǤǹ~qdXK@5+#   ! * 4 > I U brԄԘԫsfYL?4*!    (1<GTctuhZM@3(  %.9ESdvwj\O@3'  *5CRcv#!! $ +7DQ]hr{ ) 4 AMYdnw%0=I U ` j s |   ",8DP[fow""!"" '2>KV`jrz&% ( )(& $+!8 DP[emu}   !"""#####) *./ -+("&/&='J'U(_(h(o'w'~''''''((())******-0342 .,.(/70D0O0Y0b0j/q/x///...///00011111058:95 46"818?8J8T7]7d6l6s6y55555555 5 6 6 7 7 7 7 7 3:?BB>;>?,?:?E?O>X=_=g^qF\pMYpTWp[UobSoj Pns Nn~LmJmIlHlGlGlHkHkHjHjHj^gnrrqzqqrktfucv`w(^w3[x<YwCVwKTwRRvYPv`NuhKuq It| GtEsCsBsAsBrBrBqCpCpCpclsvuvuvixcz^|\}Y~$W/U8S@PHN~OL~VJ~]H}eF}nC|y A| ?{ >{<{<{v;9 8 6 6 6 6 6 6 6 6 ox~wk^UNJHG%E/D8B@@G?O=V;_9h7s5310////// / v}peZOFA >=;(:19:7B6J5R3Z1d/o-{,*)(''''''~vj^TI@7210!.*-2,:+C*K)T(^&i%v#" }ocWMC80($#!! )1:BLVao~uh[PE;1' &.7ALW e t zl`SG<1' $,6@LYhy̌˟˳|obUH;0&  "*4?KZj}ݑݤ޶qdVI</$  '1=KZltfXK=/$  #.;J[m  (5ANZenw %1>JVaks{  "-9FQ\fow~( 4 ALWajrz   ".:F R \ e m u |   &3?KV_how}""%$! *8EPZbjqx~   !!""#####%(*+(! !$$%2&?'J'T']'d'l'r'y'''''(((()******(.353-*-.,/:/E0O/X/_/f/m/s.z.....///0011111-5:=<73 46'747@7J7S6Z6a6h5o5u5|555555566777772;ADC?; ;<"=0=;=E=Nk >k `inmmxmlnap[rVt RuPvNw'Lw1Kx9IxAHxIFxPDwWBw_@wh>ws<83245*555@5I5P5W5^5d4k4r4y4~4}4{5y5x5w6v6t7t7t7t7t75=BDB>98::&;1;;;D;L;S:Z~:`}:g{:ny:uw:~v:t:r:q:o;n;m;m<l<l<l<l<9BGHFC?> ??!@-@7@@}@H{@Oy@Vw?]u?cs?jq?rp?zn?l?k?i?h?g@f@f@e@e@e@e@>FKLJGCCCD~D){E4yE=vEEtDLrDSpDYnD`lCgkCoiCwgCfCdCbCaD`D`D_E_E`E`D`DAINOMKGGG|HxH&uI0sI:pIBnIIlHPjHVhH]fHdeHlcHuaG`G^H]H[H[H ZHZIZIZHZHZHELRQPNJJzKvLrL#oL-mM6jL?hLFfLMdLSbLZaLa_Li^Lr\L|ZLYLWLVLUL UL ULULULVLVLHPUTSQMzNuO pOmP jP*gP3eP<cPCaPJ_PQ]PX\P_ZPgYPpWPzUPTPRPQP PP PP PPQPQOQOQOKSWVUT|PuQpR kShTeT'bT1`T9^TA\THZTOYTVWT]VTeTTnRTxQTOTNTLTLT KT LTLSLSMSMSNVZYXWwTpUjVfWbW`X$]X.[Y7YY?WYFVYMTYTSY[QYcOXlNXvLXJXIXHXGXGXGXGWHWHWHWQY\[[}ZrXkYeZ`[]\Z\!X]+V]4T^<S^DQ^KP^RN^YL^aK]jI]tG]E]D]C]B]B]B\B\C[C[C[U]_^^x]m\e]__Z` WaUbRb(Qc1Oc9NcALcHKcOIcVGc^EcgDcqBc}@b?b>b=b`>`>`Yaaaataia_bYdTf QgNgLh$Ki-Ii6Hi>FjEEjLCjTBj\@ie>io=:731 12 3+353>}3F{3My3Tw3Zv3at3gr4oq4wo4n4l4j5i5h5g6f6f6f6f6f67>BA?<8677|8'z81w9:u9Bs9Iq9Pp9Wn9]l9dk9ki9th9~f9d9c:b:a:`;_;_;_;_;_;;BEDC@=;};y<u=#s=-p=6n=?l=Fk=Mi=Sg=Zf=ad=hc=qa>{_>^>\>[?Z?Z?Y?Y?Y?Y?Y??FHGFD@|?w@ s@oA lA*jA3hA;fBCdBJcAPaAW`B^^Be]Bn[BxZBXBWBVCUCTCTCTCTCTCTCBIKJIG}CvCqD mDjEgE'dE0bE8`E?_EG]EM[ETZF[YFcWFlVFvTFSFRGPGPGOGOGOGOGOGPGEMMLKJxFqGlGhHdHaI$_I-]I5[I=YIDWIJVIQUJYTJaRJiQJtOJNJMJLKKKJKJKKKKJKJKJHPOON{MsIlJgKbL_L\M!ZM*XM2VM:TMASNHRNOPNWON_NNgLNrKN}INHNGOFOFOFOFNFNGNGNLRQQQwPnLgNbO]P ZPWQUQ'SQ0QR8PR?NRFMRMLSUJS]ISeHSoFS{ESCSBSASASASARBRBRBQOTTT}SsSiQbR\SXT TURUOV$NV-LW5KW<JWDHWKGXRFXZDXcCXmAXy@X>X=Xc>=cEg4*!  "+5@N]nvgZNB7,"   )4BQbuɊɟʱn`SF:/$  (4CTg|fYL?2$ '5FXk,9EPZckrx~ (4ALV_fmtz "/;GQZbiouz )6AKT\cjpu{ "/;ENW^djpu{'3>HQX_ejpv|   ,7BJRY_ekqw~   $0;DLSZ`flry!%"*5>GNU[agmt|~}|zyxxx"),*'#$/9AIPV\bi} p| xz y!w!u"t"s#r#p$o$o$n$n$)020.*'# #$%*%4&=}&D|&Kz&Rx&Xw&^u&et'lr'tq'}o(n(l(k)j)i*g*g+f+f*f*/66540-*)*|+%y+/w,8u,@s,Gq,Mp,Tn,Zm,ak-hj-ph-zg.e.d.b/a/a0`0_0_0_0_04;::8520{/w0t0!q1+o14m1<k1Cj1Jh2Pg2We2]d2eb2ma3w_3^3]4[4Z5Z5Y5Y5X5X5Y58>>=<:}7x4t4 p5m5j5'h60f68d6?c6Fa6M`6S^7Z]7b\7jZ8tY8W8V9U9T9S:S:S:S:S9S9<A@@?~=x:s8n9j9g9d:$b:,`:4^:<];C[;JZ;PX;WW;_VN>N>M>N>N=N=?CCCBz@s=m<h=d=a>^>!\>)Z>1X>9W>@U?FT?MS?UR@\P@eO@oNAzMAKAJAIBIBIBIBIAIAIACEEEEvCo@h@cA_A \AYBWB&UB.SB6QB=OBCOCKNCRMDZLDcJDmIExHEGEEEEFDFDFDEDEEEEEFHHH{GrFjBcC^DZE VETFQF#OF+NF3LG:KGAJGIIHPHHXGHaFIkDIvCIBIAI@I?J?J?I@I@H@HIJJJwJnIeE^GYHUIQJOJLJ!JK)IK1GK8FL?ELFDLNCMVBM_AMh@Mt>M=MQS=R\U+=V24\F3]N1]W0]a/]l.]z,]+]*]*])]*\*[+[+ZUUUrUgV^VTWLYE[?]:_6` 4a2b1b#0b+/c2.c:-cB,cJ*dS)d](di'dv&d%d$d#d"d#c#b$a$aXXzYnYcYZZP\H^A`:c4f/h ,i*i)j(j&'j.&k5%k=$kF#kO"lY lelrlllkkjihh\\u\i]_]V^LaCdk7n0q)u"x{}}}~"~*~1~:~DNZh x  ~ ~ } } | { zewejeafVhLkBo9s1w*z#~    # + 3=HTaq~jqjgk[lPpFtQez)5AMV_fmty $1=HRZbiouz +7BLU]djpuz%1<GPW^ejpuz +6@JRY_ejouz$/:CLSY_djou{  (3=EMSY_djpv~   ,6? G N T Z _ e k r y  }|{{{ %/9AHOU[agnu}~|zxwutsqqqp%%#! )3<C~J|PzVy\wbvitqszqonlkjihhgg&***(%"|$z.w6v>tErKqQoXn^lek mi vh!f!e"c"b#a#`$`$_$_$_$,///-*(}$z" v#s# q$)o$2m$:k%Aj%Gh%Mf%Te%Zd&ab&ia&r_'}^']([)Z)Z*Y*X*X*X*X*13332/y-u*r( o(k)i)%g*-e*5c*=b*C`*J_+P^+W\+^[,fY,oX-zW-V.T.S/S/R/R/R/R/R/66665y3s1o/k.h-d.b.!`/*^/1\/9[/@Y/FX/MW0SV0[T1cS1lR2wQ2O3N3M3M4L4L4L4L4L39999|9t7n4i3e2a2 ^2\3Z3&X3.V35U4<S4CR4JQ4PP5XN5`M6jL6uK7J7I8H8G8G8G8G8G8G8;<<<x<p:j7d6`6\6 Y7V7T7#R7+P72O89M8@L8GK8NJ9UI9^H:hG:sF;E;D<C<B<B=B<B<B<B;=>>>u>l=f:`9[:W:S;Q;N; L;(K;/I<6G<=G\C>fB?qA?~@??@>@=@=@=@=@>?>?@@A|AqAh@a<[=V>R>N?L?I?G@%F@,D@3C@:BABAAI@AQ?BZ>Bc=CoE8=E?*VF)VO(WY'Wd&Wr%W$W#W"W"W"W#V#U$UMNuNiN_OVOMPER?S9V3X/Z+[*[(\'\$&\+%\3$]:#]C"]L!]V ^a^n^~^^^]]\[[Q~QpQdR[RRSJTAW;Y5[.^(`$b "c!cd d'd.d6e>eGeQe]ejezeeeedcbbTxUkU`VWVOWFY=\6_0b)d#gjllmm!m)m0m9nBnLnXnenu n n m m l k k jYrYfY\ZTZJ\A_9c1f*i$loru www w# w* w3 w< wGwRw_wowwvvuttt{]m]b^Y^N`EcM]pduWyK~?4)  &3ARdy\PD8,!  &5EWkӂӗөҸUI=0%  '8J]r &2=HRZbiouz !,8CMU]djpuz '2=GPX_ejpuz!-7AJRY_ejotz &1;DLSY_diotz  +5>FMTY_dinu{$.7@GNTY^diov~   '19AHNTY_dkrz~}{yxvuu t s s    * 3 ; B I~ O} T{ Zz `x gw nu vt r p omlkjiii~${-y6w=vDtJsPqVp\nbmjksi}hfecbba```"#$#" ~|z wtq(o0n8l?kEiKhQfXe^cfbo`y_]\[ZYXXXX'((('{%v#s q nki#g,e3c:bA`G_M^T\[[bY kX vV!U!T"S"R#Q#Q$Q$Q$Q#+,,-|,t*o(k%i"f!c"a"_#']#/\#6Z#=Y$CW$JV$PU$WS%_R%hQ&sO&N'M(L(K)K)J)J)K)K)./00w/o.j+e*c'_' \'Z'X($V(+U(2S(9R)@P)FO)MN)TM*\L*eJ+pI+|H,G-F-E.E.E.E.E.E-123|3r3k1e/`-],Y, V,T,R, P,(N-/M-6L-<J-CI-JH.QG.YF/cE0mC0zB1A1A2@2?2?2@2@2@2355y6n5f5a2\0W0T0Q0N0L1J1%H1,G12F19D1@C2GB2OA3W@3`?4k>5x=5<6;6;6:6:6;6;6;6678u8k8c7]6W3S4O4K4 I4F5E5"C5)A5/@56?6=>6D=7L<7U;8^:8i99v897:7:6:5:6:6:697989~:r;h;_:Y9S6N7J8F8 D9A9?9>9&<9-;:4::;9;B8;J7;S6<\52>1>1>1>1>2=2=;<{<n=d=\=U<N:I;E<A=>=<=:>9>#7>*6?15?84?@3@H2@P1@Z0Ae/Ar.B-B-B,B+B,B,B-A-A=>w?k?a@Y?R?I>D?@@K9L3N.P(S$T "U UVV$V,V3W;WDWNWYXfXuXXWWWVUUItJfK\KSKKLDM[6_.b&fjmps vx xyyyz&z/z9zDzPz_zpzzzyxxwj[_[V[L\B`9c0h(l ptw{ ~  (1<IWh{e`\`QaFdPdz͑ͤʹMA5) !1CVk !-8CMU]ciotz (3>HPX^djotz#.8BKRY_ejotz (2<EMSY_dintz",6?GMTY^chntz &08@GNSX]chnt| )2:AHMSX]ciow~}{zyxwxx  #,4;BHNS}X|^{dyjxrv{tsqpnmmlll  ~%|.z6x<wCuHtNsTqYp_nfmnkxjhg e d c c b b b }|| x u r (p 0o 7m >l Dk Ji Oh Ug \e cckbu`_]\[ZYYYY~xtqq oli"g*f2d9c?bE`K_Q]X\_ZhYrW}VTSRQQQQQ ""#w"p!ligfca_&]-\4Z;YAXGVMUTS\RdQnOzNMKJJIIIJ$%&{'q&j%f#b!`^ [YW"U)T0S7Q=PCOJMQLXKaIkH wG F!D"D"C"C#C#C#C"')*v*m*e)`'\%Y#W!U!R!P!N!%M",L"3J"9I"@H"FG#ME#UD$^C$iB%u@&?&>'>'='=(=(='>'*+-r-h-a,\+X(T&Q&N% L%J&H&"G&)E&/D&6C'<A'C@'K?(S>)\=)f<*r;*:+9+8,7,7,8,8,8,,.{/o0e0]/X.S+P*L*I* F*D*B*A*%?*,>+3=+9<+@;,H:,P9-Y8.d7.p6/5/4030202030304//1w2k2b2Z2T1O/K-G.D.A.?.=.;."9/)8//7/660>50F51N41W32b22n13}03/4.4-4-4.4/3/313t4h5^5W4Q4K2F1B2?2<2 938363 43&33-24414;05C05L/6U.6`-7l,7{+7*8)8(8(8)8*7*745q6e7[7T7M6G6B5=6:677 472718/8$.8+-92,99+9A*:I*:S);^(;j';y&<%<$<#<#<$<%;%;6|8m9b9X:Q9J9D9=99:5;2;/<-=,=*=!)=((>/'>6&>>%?G$?P#@["@h!@v @AAAA@@ ?9x:i;^<U<M<G<@<8=4>0@-A*B 'B&C$C#C%"C,!D3 D;DDENEYEeEtEFFFEEDD<s=f>[?R?J?D?=@6A1C,D'F$G !H III"I)J0J8JAJKKUKbKqKKKKKJJI?o@aAWBNBGBAB:C2E-G(I#KMO PPPP%P,Q4Q=QGQRQ_RmR~ Q Q Q Q P POyCjD]DSEKEDE>F6H/J)L$OQSV WXXX X( X0 X9 XC XN XZXhXyXXXWWWVsFdGYHPHHHAI:J2M+P%R UXZ] ` ` ```#`+`4`=`I`U`c`s`___^^^lJ_KUKLLEL=N5P.S'V Y\_b eg ghhhi&i.i8iCiOi]imiihhgfffOZOQOJOAQ8T0W([!^beh knp p qqrs!s(s1s<tHsVsfsyssrqqpaSVSOSEU;X2\*`"dhlo rvyzz {|}~"*5AO_q~~}\XTXIZ?]5a,e#josw { ",8FVh~Y]N_Cb8f.l$qw| #.<L^tSdGhHPW^dioty$.9BKRY_dinty )3=EMSY_dinsy #-7?GNSY^chmsz '09AHMSX]bgms{ !*3;AHMRW\agnu~~}}}} $-4;BGMRW\~b}h{pzyxvutrqpppp'}.|6z<yBwGvLuRsWr]qcokntl~kihgfeeee  ~| ywu!s)q0o6n<lBkGjMiRhXf_egcpbz`_^\\[[[[|vsr q nli#g*f1d7c=bCaI_N^U]\[ cZ mX xW V T S R R Q Q Q }tmjggf c a _ %] ,\ 3[ 9Z ?X EW KVQUYSaRkPvNMLKJIIIIvmfb_^^ [YW U'T.S4Q;PAOGNNLUK^IgHsFEDCBBBBB }!q"h"a!\YWUTQON#L*K0J7I=GCFJERCZBdAp?}>=<;;;;<!#x$l%c%\$W#S QOM KHG E&D-C3B9@@?G>O=X<b:m9{8 7!6!5!5!5!6!6!#&t'h(_(X'S&O$L"I G DB@ ? #> )< /;!6:!=9!D8"L7"U6#_4#k3$y2%1%0%0&/&0&0&1%&(q*e*\*U*O)K(H%D$A$?$ =$;$9$7$&6$,5%34%:3&A2&J1'S0']/(i.)w-),)+*****+*+*,)(|*m,b-Y-Q-L,G+C(?(<(9( 7(5(3(2(#0()/)0/*7.*?-+G,+Q+,[*,g)-u(-'-&.%.%.&.&.'-+x-j._/V/N/H.C-?,;,7,4, 2,0-.--- +-'*.-*.5)/=(/E'0N&0Y%1e$1s#1"2!2!2 2!2"1"1-u/g0\1S1K1E1@0;0603001-1 +1)2(2'2$%3+%32$3:#4C"4L!5W 5c5q666666650q2c3Y4P4I4B3=37314.5+5(6 %7$7"7!8" 8(80879@9I:T:`:n:;;;;::9}2m4`5U6M6F6@6:646.8*9&:#; <===>%>->4>=?G?Q?^?l@|@@@@??>y5i7\8R9J9C9=9791:+<'="?AB CCDD"D)D1D:ECENE[EiEy E E E E E D Dt9e:X;O;G<@<:<4<.>(@#BDFHJ JJKK% K- K6 K@ KJ KV KdKtKKKJJJIn<`=T>K>D>=>7?1@*B$EGILNQ Q Q QQ"Q)Q2R;RFRRR_RoRQQQPPPh@[APAHAAA;B4C-E&H KMPSU X XXYYY%Y-Y6YAYMZZZiY|YYXXWWcDVEMEEE?E7G/I(L"ORUX Z ]_ ` `aab b'b1b;bGbUcdbvbbaa``]HRIJHCH:J2M*P#SWZ] `cfgh ijklm"m*m4m@mNm]momllkkjXMNMHL>N5Q,T$X\`d gknprrs uvwxy#z-z9zGzVyhz|yxxwwTQLQBR8U/Y&^bgk oswz|~ %0>M_sRVGWr2x'  #5I^uیܟܫ $/9CKRY_dinsy*4=EMSY^chmsy $.7@GNSY^chmsy(1:AHNSX\aglsz "+3;BHMRW[afmt}%-5<BGLQV[`gn~w}{zxwvvvuu  '/5}<|A{FyKxPwUv[tasiqqp{nmkjjiiii{ ywv"t)s0q6p<oAmFlKkPjVh\gdeldvca`_^^^]] | wtq omki#h*g1e6d<cAbF`L_R^X]_[hZrX~WVUTTSTT zrli g f db`^%]+\1Z7Y<XBWGVNUTS\ReQoO{NMLKJJJJ~sjd`^] ] ZXV U'S-R3Q8P>O DN JL QK YJ bH mG zF D C B B B B B xlc]YVTTS Q O M "L (K .J 4I :GAFGEODWBaAl?y>=;;:::;sg^XSPNLL JHFE$D*B0A7@=?D=L<T;^9i8v76443344|nc Z S NJHFECA?> =';-:39:8A7I5Q4[3f2s0/.---..x j"_#V#O"J!F CA?= ;976#5)40361>0F/O.Y-d,q+*)( ' ' ( ) t#g$\%S%L%G$B#?!=:7 5310 /&.--3, ;+ C*!L)!V("b&"o%#$###"$"$"$#$$##q%c&Y'P(I'C'?&;$8"5"2"0" .","*")"#(#*'#1&$8%%A$%J#&T"&`!'m '}'((((('~%n'`)V)M*F*A)<(7'4&0&-&+' ('''%'$'!#('"(.!)6 )>*H*R+^+k+{,,,,,++z'j*]+S,J,C,>+9+4*0*+*)+&+#,", ,,-%-,-3.<.E/P/\/i0y000000/v*g,Z-P.H.A.;.6-1-,-'/$/!01 1222"2)31393C4M4Y4g5w5555444r,c.W0M0E0>08030/0)1$2!356 77888&8.969@9K9W:d :t : : 9 9 9 9 8n/_1S2J3B3;36312,3'4!689;= >>>># >* >3 >< ?G ?R?`?o???>>>>i3[4P5G5?59545.5)7#8;<?AC D D DD D'D/D8EBENE[EjE|EDDDDCd6W7L8C8<87818+9%; =@BDG I J KKKK#K+K4K>LILWLfLwKKKJJJ_:R;H;@;:;4;.<'>"ACFIK NPQ QRSSS&S/S9SESRSaSrSRRQQQY>N>E>>>8>0@)B#DGJMP SUWX YZZ[\!\*\4\?\M\[\l\[[ZZYTBJBBB^2c'jpx  &8Kaz7j+p x ,@WnԆԛӫ *4=FMSY^chnsy %.8@GNTY^cgmsz )2:BHNSX]bgls{ #,4<BHMRW[`flt}&.5<BGLQUZ`fmv}|||||  (/6<AFK}O|T{Zy`xgvpuzsqponnnnn~|{y"x)w0u6t;r@qEpJoOmTl[kbijhtfecbaaaaa~yuq omlk$k*i0h6f;e@dEcJaO`V_]]e\oZzYXWVVVVVzrligd ca`_%^+]0[6Z;Y@XEWKVQUXSaRjPvONMLLLLL | p h b _ ]\ ZXWV U&S+R1Q6P;OANGMMKUJ]IgGsFEDCCCCC ti`ZVT S S QONL!K'J,I2H7G=ECDJCQBZ@d?p>~=<;::::|nbZTPMKK J IGED#B(A .@ 3? 9> @= G< O: X9 c8 o6 ~5 4 3 2 2 2 2 wi^UOJGECCB @ ? = < $; *9 0877=6E5M3W2b1n/}.-,+++,rdYQKFB?><; :875!4'3-230:/B.K-T+_*l){('&%%%&~n`VMGB>:8754 20/-#,*+0*7)?(H'R&]$j#y"!   zj]S J D >:7420. ,*)' &&%-$5#="F!P [hwwg Z!P"H"A";"7!3 0-+(&%#!!$ *2:C M!Y!f!u"""""!!s d"W#M$E%>$9$4#0",")!&!$!"! !!""!"(#/#8$A$K%W%d&s&&&&&%%p"a$T&J&B'<&6&1%-%)$&$"%%& &''''%(-(5)>)I)U*b*q*** * * *)l$]&Q(H(@)9(4(/(+'''"()*++ ,,,-#-*-2.<.F .R ._ /n / / / .. . .h'Z)N*E+=+7+1*-*)*$* +-./1 222 2 2' 2/ 38 3B 3N3[4j4{333332d*V,K-B-:-4-/,+,&,"-/1246 8 8 888$8,848>9J9W9e9w988887_-R.H/?08/2/-/)/$013579 ;= >>>>!>(>1?;?F?S?a?s?>>===Z0N2D2<25201+1&2 468;= ?AC CDEEE$E-F6FBFNF]FnEEDDCCU4J5A59534.4(5"7:<?A DFHI J KLMN N(N2M=NJNXMiM}LLKKJP8F8=87817*9$;=@CF IKNPQR STUVW#W,W8WDWRVcVwVUTSSK<B<;;5;-<&?BEHK OQTWXZ[\ ]_`bb&b1b>aLa]ap``_^]G@??:?1@)C!FJNQ UX[^acdegh jlno o*o6nEnUnhmmlkjDD>C5D+G#KOTX\`dgkmoprtuw y|~".=~M}a}w|{zyCG9I/L%PU[`ejnrvy|~ %3DWm=N2Q(V\bhnty~ ):Mb{6W,\!bipw~ 0CXp0b%ipx  %8Ne~͖̩ %/8@HNTY^chmsz )3;BHNSX]bgmt{ $,5<CHNRW\agmt}'/6<BGLQUZ`fnv !(06<AFKOTZ`g~o|zzxwutsttt#*}0{6z;x@wEuItNsTqZpanimskihgfeffg|vt rqpp$n*m0k5j:i?hDgIeNdTc[ac`m^y][ZYYYZZ{snjgedccb%a*_0^5]:\>[DYIXOWVV^ThSsQPONNNNO{phb_][ YXWW V%U*S0R4Q9P?ODNKMRKZJcIoG|FEEDDDEq f ^ Y UTRP ONML K&J+I0H5G:F@EFCNBVA_@k>x=<<<;;; x j_WQM K JI H FEDC!B&A+?1>6=<<C;J:R9\8h6u5443333 qdYQKGDB A A ?><;:"9(8-72695?4G3P1Z0f/s.-,++++}l_TLFB><:: : 8 654 2 $1 )0 // 6. =- E, N+ Y) e( s' & % $ # # # xh[QHB=975332 0 / - , !+ '* -)4(;'D%N$Y#e!s sdWME?:520.-, +)(&%$$*#1"9!B KVcqp`TJB<62/,*(&% #" !'.6?ITapl]QG?94/+(&$"  $,4=GR_niZNE= 61-)%#  ")1:EP ] l | eWL!B!:!4!/!* &#    !!"""&#/#7 #A $M $Y $g $x$$$$##bT!I#@#8#2#,#("$!!!!!#$%& ' ' ' '# '+ (4(>(I(U)d)t))((('^"Q$F%=%5%/%*$&$"##$%&() , ,,,,!,(-0-:-E-R.`.q---,,,Z$M&C':'3'-'(&$&!&&')+, . 0 11222%2-263B3N3]3m322111V'J)?*7*0*+)'(#()*,.0 1 45 67888"8*939>9J9Y9i9}88776Q+F,<,4,.,*+%+ ,-/13 5 7:; < =>?@@%@/@:@F@T@e?x?>>==M.B/9/2/-.(."/0257 : <>ABC D FGHH!H*H5HAHOH`GsGFEEDH2>26201+1%2469< ?BDFHJKL NOQRR%R0R<QJQZQmPONMMC6;645/4'5!8;>A DGJMOQSTUW Y[]]]*]6\D\T[g[~ZYXW?98938+9#<?CG JNQTWZ\]_`bd fhkk#j.j<jMi_hugfed==7<.=%@DIM QUZ]`cfhjkmoqt vy{{'z5yExYxmwvut_C^H]N[UZ]XgWrUTSRQQRR|qid`^\ [[ZZY%W*V/U4T8S=RCPIOPNXMbKmJzIHGGFGG~pf^YVSRP OONN M%L*J.I3H8G>FDEKDSC]Ah@u?>====>uh]UPLJIG FEEDC B%A*@/?4>:=@;G:O9Y8d7q6544445~m ` V N H D B@?> =<;;:!9%7*60554<3C2L1U0`/m.}-,,,,,w g ZPIC> ; 9 8 76 54321"0'/,.2-8,@+I*R)](k'z&%%%%%r bVLD>9631 0 0 / .,+*)#()'/&5%=$F#P"\!i ym^RH@:51.,** ) ( ' %$# " &! , 3 ; D O [ i y      iZNE=71-*(&$## "     # * 2:DP\j{eWKB:4/*'$"   !(09CNZiy    bTI?71,($! &-6ALW e u    _QF=5/*%"  # * 3 < G S aq\NC:3,'#      '/9CP^nXKA80*%!   !!!$","5"@#M#Z#k#~#""!!UH> 5 . ( #   " $ % %&&&!')'2'='I(W(g'{''&&%Q E!;"2","&!"!   "# % &( ) +,,,,&-/-9-F-T-d-w,,++*M"A$8$0$)$$#!"""#$& ( *,. / 02333"3+363B3P3`3s22100I%>&4'-'(&#%$%&(* , .0245 7 8::::':2:>:L:\:o98876D):)1)+)&("'()+. 0 2579;<> ? ACCC#C.C9CGBWBjA@?>>?,6,/,*+%*+-/2 58:<?ACEFH JLMMM(M4LBLQKdK{JIHG;03/-/(-"/147 :=@CFHJLNOQS UXYX"X.W<WKV^VsUTRR8312,1%258< @DGJMPSUWYZ\^a dfgf'f4eDdWdkba`^5705(7 :=B FJOSVY\_adegilnq tww v-v=uOtcs{rpo5:+;"?CH MRW\`dhknqsuwz| $3E[r/@%DIN TZafkoty} );Pg)INT[bipw} 0E\t"T[bjs{ &:Qhˁʖ %.6>DJOTY^cipx  (07>DINSW]biqz "*18=CHLQV\bir}zx $+17<AFKPU[bk~u|zxwvurnl %~+|1z6y;w@vDuIsOrUp\odmnlzjhgfeda`}wspoooom%k*i0h4g9f>eCcHbNaU_^^g\s[YXWWWVTulhda` ____]%\*[/Y3X8W=VCUISPRXQaPmN{MLKJJJJrg_ZWUSR RRRQO$N)M.L3K8J=ICHJFRE\DgCuBA@@?@@tg]UOLJHG G FFFED$C)B-A3?8>>=E<N;W:b9o8766666|k^TMGCA?>= =<<<:9$8)7.635:4A3I2S1^0k/{.----.sdWMF@;87654 44321 0$/)./-6,=+E*O)Z(g'w&&%%%&m^ R H @ : 6 2 0..- , ,+*)( '%&+%2$9#B"K"W!d sh Y M C<61 - * ( ' && %$$"!!" (.6?ITapc UI@82-)&# "    %+3<FR_n_QF<5/*&"          " ) 1 : E Q _ n  \NC:2,'#        ( 0; F Q ^ m   XK@70)%!      % - 6 A MZj|UI>5-'"       "*3>JXgzRF;2+%!   '0;GUdwOC90)#    $-8DRbuL@6-&!      !!"!*!5"A"O"_"r!! H=3+$   !" $ &&&''''2'>'K'\'n&&%$#D90(#  !"$&(* + ----$...:.H-X-j-,+*)@ 6!-!&!! ! " $&(+-/0 2 4555 5*565C5S4f4|3210<#2$*$$# "!!#% ' )+.02468: < >>>>&>1>?=N=a@BD F IIH!H,G:GIF[EqDCBA4*,*'("'(*- 0 369<>ACFHJLNP STTS'S4SCRUQjPOML0-+,&+,.2 59=@CFILNQSUWY\_ bccb,a<`N_b^{\[Y/0*/"037;?DHLORUX[]`bdfimp tts%r4rEpYoqmkj.3%58<AGLQUY]aehkmortwz~ +=Rg~): =BHNTZ`dinrvz} !3G^w#CHN U\cjqv{ (<RjNT \dlt|1H_vȎ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗  9` ˻0ƸOg{ĵ˲ѯխ٫ܩާख़㡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘  9` ˼.ŹMfzŵ˱Ѯլ٪ܧޥ࢚➙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙  9` ˾,ŹLg{Ŵ̰ѭի٨ۥݣߟᛙ⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙  9 ` ˿+ĺLg{Ŵ̰Ѭթئۣݠޝᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚ  8 _ )¹Mh{Ƴ̯Ѫէؤڡܞݚޕ  8 _ )Ni|Ʋ̭ѩԥעٟڛܗݓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ  7 ^ ǿ+Pj|ư̫Чԣ֟؜٘ڔܐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ  7 ^ ľ-Qj|Ʈ̩ХӠ՝ّ֙ؕڎێێێێێێێێێێێێێێێێ  6 _ 0Sl}Ǭ˧ϢўӚՖ֓׏؋ًًًًًًًًًًًًًًًً  5 b 3Um}ƪˤΟЛҗӓԐՌ։׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉  7 e 8Xn}Ƨɡ̜ΗϓѐҍӊӇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇ  : h>[o}ģǝʘ˓͐΍ϊχЅхххххххххххххххх  > mD^p}ßřǔɐʍˊˈ̅̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓  B rI`p}ÕđƍNJLjȆȄɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂ H xGbq|ÊĈĆńŃŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁſ% N p9Xlz€€€€€€€€€€€€€€€€€1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ0 S'|̨Dƥ]¤pùǷʵγбӰկ׭٭ګګګګګګګګګګګګګګګ0S&|˩CƦ\¤o~ùȶ̳ϱҰծ׭٬ܫݧۧۧۧۧۧۧۧۧۧۧۧۧۧۧ0S%|˩BƧ[¥n~ĸɵͲѰԮ׭ګܩߨߣܣܣܣܣܣܣܣܣܣܣܣܣܣܣ0S$|˩AƧZ¥m}ķɴαӯ֭ګܩߧ⤑ࠎܠܠܠܠܠܠܠܠܠܠܠܠܠܠ0S#|˪AƨY¦m}ŷʳϰԮثܩߧ⥗栖ݜݜݜݜݜݜݜݜݜݜݜݜݜݜ 0S"|ʪ@ƨX¦l|Ŷ˳аխڪݧच⟘㝚ᙗݙݙݙݙݙݙݙݙݙݙݙݙݙݙ 0S!|ʫ?ƩW§k{Ŷ˲ѯ֫ڧݤߠ◚ᗜޗޗޗޗޗޗޗޗޗޗޗޗޗޗ /R |ʫ>ƪV¨kyŶ̲Ѭ֨٤ܡݜޗޒޒޒޒޒޒޒޒޒޒޒޒޒޒ /R|ʬ<ƫU¨jwŵ̯Ҫ֥ءڝۙݔސގݎݎݎݎݎݎݎݎݎݎݎݎݎݎ /R|˭:ƬT©is~Ų̬ѧբמؚږۑ܍܋܋܋܋܋܋܋܋܋܋܋܋܋܋܋ /R|˯8ƭR«fo~ưͪѤӟ՛ًُ֗ؓڈڈڈڈڈڈڈڈڈڈڈڈڈڈڈ .Q|˰5ǯOð`l~ǭ̧ϡҜӘԔՐ֍׉؇؇؇؇؇؇؇؇؇؇؇؇؇؇؇ .Q|̳0DZLĸVnǩˣΞϙѕґӎԋԈՅՅՅՅՅՅՅՅՅՅՅՅՅՅՅ  -P|̶*ȷDYpªǦʠ͖̚ΒϏЌщч҅҅҅҅҅҅҅҅҅҅҅҅҅҅҅  ,O{ͼ"¼<^r¦Ţǜɗʓː͈̍͋Ά΄ττττττττττττττ  + N zFbtÞřǔȐɎʋˉˇ̅̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃  ) L ~%OfuÖőƎNjljȇɆɄɂʂʂʂʂʂʂʂʂʂʂʂʂʂʂ ( R -WhuÌĊňņƄƃƁǁǁǁǁǁǁǁǁǁǁǁǁǁǁ - Y +Pgu~ˆ†…ÃÂÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ 4 [v%E]ny~~~~~~~~~~~~~~~:Uh-x@Vgs~x{|ywÂu„t…srrqqqqqqqqqqqqqqq'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~')F5iިAǜaĜq›~ĹǷʵ̴γвұӱԮԬҬҬҬҬҬҬҬҬҬҬҬҬ'(F4jݨ@ǝ`Ĝqœ|ºŸɶ̴ϲѱӰկ֯תէӧӧӧӧӧӧӧӧӧӧӧӧ'(F3jݩ?ǝ`ĝpž{¹Ƿʵγѱӯ֮ح٪٥դԤԤԤԤԤԤԤԤԤԤԤԤ''F2jݩ>Ǟ_ĝoyøȶ̳бӯ֮ج۫ܦڢ֠ԠԠԠԠԠԠԠԠԠԠԠԠ&&F1jݪ=Ǟ^ĝoxĸɵͲѰծج۪ިߢڞ֜ԜԜԜԜԜԜԜԜԜԜԜԜ&&F0jݪ<Ǟ]ĞnvķʴϱӮ׬۪ި⤐ۚיՙՙՙՙՙՙՙՙՙՙՙՙ&%F0jܫ;ǟ]ğlt~ŷʳаխ٪ި⥗柕ۗזՖՖՖՖՖՖՖՖՖՖՖՖ&%F/jܫ:ǟ\Ġjs|Ŷ˳ѯ֬ۨߤ៙㜚ᗖܔؓ֓֓֓֓֓֓֓֓֓֓֓֓ &$F.jܫ:Ǡ\ġhqzŶ̲Ѯשۤޠᖛᕛݒؑבבבבבבבבבבבב &#F-jܬ9Ǡ[ģfnxŶ̰Ҫצڡܛޖߑߑݏُ׏׏׏׏׏׏׏׏׏׏׏׏ &"E,jܭ7ǡZťc©kuų̭ҧ֢؝ژےݎ݌܍ٌ׌׌׌׌׌׌׌׌׌׌׌׌ %"E+jۭ6ǢYŧ_­fp~ưͪѤԞُ֙ؔڋۈۈ؈׈׈׈׈׈׈׈׈׈׈׈׈ % E*jۯ4ȤUƫXó_n~Ǭ̦РқԖՑ֍׉؆؄ׄքքքքքքքքքքքք %E'j۰1ȨMDzNXpǩˢΝЗђҎӋԈՄՂՁՁՁՁՁՁՁՁՁՁՁՁՁ $D%jڲ.ʯ@Ƚ=]r©ƥɟ˙͔ΐόЉц҄ҁҀҀҀҀҀҀҀҀҀҀҀҀҀ $D!jڴ)ͼ(CasšǛɖʑˎ͈̋Ά΃΁πππππππππππππ #Ci#LeuÝŗƓǏȌɉʇʅʃˁˀˀˀˀˀˀˀˀˀˀˀˀˀ "Bh /Thv”ÐčŊƈƇƅǃǁǀǀǀǀǀǀǀǀǀǀǀǀǀ @ _ 4Zkw‰ˆÆÅÃĂāāāāāāāāāāāāā  = c3Sgt}€€€€€€€€€€€€€  Aax2L_nx|}|{zyxxxxxxxxxxxxxx " BZ(j9wI[i|qyvvzt}rqȁpǃoDžnƆmƈlŊlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋ &=N/[?gNq{[yveqlnrkwizg~fՀeԂdԄcӆbӉaҋaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ "0:=YJy؛[Ǖrŗ{ØúŹǸɷʶ˶~̵}̳|ͯ|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯| !/:}֨DɨOǰSŸYm}Ƭ˥ϟјӒՌ׈ׅ׃քԄффффффффффф%91Z<~׬;ʭDɹEYo~ƨʡ͛ϕЏҊӆԃԁԀӀррррррррррр$9/Z9~ٴ/̸2½@]q~Ťȝʗ̒΍ωЅЂр~}}}}}}}}}}}}"9-Z0z!Hbs~àƙȔɏʋˈ̅͂̀~||||||||||||8)Z$t*Oet›ÖőƍNJȇɅɂʀ~|||||||||||| 7%Zh 2VhuÌĉņńƃƁ}}}}}}}}}}}}6P f6Vjv~†„ƒÁÀ~~~~~~~~~~~~ 4 Eh7Ser{~}||||||||||||  ' Ie%x9O`mux}{z}yĀwÁvƒu„tsrqqqqqqqqqqqq  ,H\1kBvP~~_{iwntsqwpzn}mĺk̓j̅i̇hˉgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌ -A(P9\Hf|Tnw^uqezmk~jphufxe{c~bځaك`م`؇^؊^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍ (7.C=N|KWwV_o]ehbjdinaoq_ss]wu\{v[~wZxYyXzXzW{V|V|V|V|V|V|V|V|V|V|V|V|'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'5/DJQe^~۔mϒwŒēÒ¼~¼}û{Ļzĺyĵyõyõyõyõyõyõyõyõyõyõy&4/CJPe]ڕi͔tŔ~ĕ•ûĺ~ź}ƺ{ƹzƵzƱzızızızızızızızızızız%4/BJOf\ږf̕qŕ|Ė—úŹƹǸ}ȸ|ɵzɰ{Ǭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{$3/AJOf[٘c̖oŖy׺ŹǸɷʶ}˶|˰{ʬ|Ȩ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}$2/AKNgYٙa˗mŗwÙĹǸɶ˵ʹ~α|ά}˨}ɥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~#2/@KMgWٚ^˘jřtÚ}ºŸȶ˴γвѬ~Ϩ~̤ɡơơơơơơơơơơ#1/?KMgUٜ\ʙhŚrÜzùǷ˴βѱӬӧФ͠ʞƞƞƞƞƞƞƞƞƞƞ"1/?KLgSٝYʛeŜoÝxĸɵͲѰծקԣџ͜ʚǚǚǚǚǚǚǚǚǚǚ"0/>KKhQٟVʜbŝlßu~Ʒ˳ϰԭ٨ڢ՞ћΙʗǗǗǗǗǗǗǗǗǗǗ"0/>KKhO٠Sʞ_Ɵiár|ǵͲҮتߢܜ֙җΕʔǔǔǔǔǔǔǔǔǔǔ!//=KJhM٢Pˠ\ơeänx¸ȴΰիݥ曑ݖהӒϑːȐȐȐȐȐȐȐȐȐȐ!//PUQhS{WԞ_ʛkśuÛ~ŷʴϲҨϣˠǝś™%4%C>NUNhPzRա[˞fƝqÞz¹ǵΰԩ֡Н˚șŗ–%4%B>LULgMyNդV̡aơlâv÷ʲҬؚ۠ї̕ȔœÒ$3%B>JTJfJxK֨Qͦ[ǥeħpzö˯֥族ړґ͐ɐƏÏ$3%A>HTGfGwG٭KϬTȬ^Ưh±s}˥Քޏڍӌ΋ʋNjČ$2%A>FSDdCuB۴DҵJ˷Sʾ_n|©˜ҍ؆هӇχˇȈňˆˆˆˆˆˆˆˆˆ#2%@>CRAc?s=޾;?J]o}ãɖΊӁՁ҂ς̃ɄƅÅÅÅÅÅÅÅÅÅ#1%?>@Q>;O7]3j1u)8Ocsďȇʀ|zyz|}}}}}}}}}}!.%<>6L0Y,b'm&jNCdTH^YL[_OXdRUiTSmURqWPtXOxYN{ZM[L\K]I^H_H_H_H_H_H_H_H_H_H_$y3"p;*hB1aJ6\Q;WW?S]BPbDNgFLlHJpIItJHwKF{LEMDNCNBOAPAPAPAPAPAPAPAPAPAP' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K0YCcTidprz~≂܅؂}{ywvtsrqqsttttttttt' ;K0YD`UfdmswጀۈՅ҂}{ywvutsuuvvvvvvvvv' ;K0YD^Udejts}ًԈЅ͂}{yxvuvwwxxxxxxxxx' ;J0XD\Uaegtpߏz؍ҋ·˄ȁ}{ywvxxxyyyyyyyyy' ;J1UDYU^edtlޑv؏э͊ɇƄā~{ywxxyyzzzzzzzzz& ;I1SDWU[eathޓr֑{ЏˍNJĆÃ{ywxyyz{{{{{{{{{& :I1QDTTXd]tcޖm֓wБʏƍɄ{yxyz{{|||||||||& 9H1ODRTUcZs_ޙi֖rϓ|ʑŐË{yz{{|}}}}}}}}}}& 9G1MCOSRcVr[ߝdךmЗwʔŒŽ{ijzī{¦|}~& 8G1KBMRPbSqW^؞gЛqʘ{ŕ’ŷ|ɫ|Ǥ}à~& 8F2IBJQM`PoT}Xڤbҡk˝uƚ˜¶ˬ}΢ɝĚ& 7F2GAHPJ_LmP{Tܫ\ԩeΦoȣzßİΠљʖŔ& 7E2E@FOG]IkLxOߴUٵ_ӵiεv|ġΔҐˏƎŽ& 6D1C?CND[EhHtL~Q[kƽqxÔ͉҇̈ljÉ& 6B1@>@L@YAdDoIwR|bhnvπ̂ǃĄ& 5?0==hOCbUG]ZKY`MVePSjQQnSOrTNvUL{VKWIXHYGZF[E\E\E\E\E\E\E\E\E\ ~)u5#l<*dC/^J4XP7TV:Q[Kd@JhAHlBFpCEtDDxEB}FAG@H?I=J=J=J=J=J=J=J=J=J| q$g,_5Y=!TE&OK)LR,HW/F]0Da2Bf3@j5?n6=s7KKPXUdZpa{iޚsו~Ўʅ}xy{}~ 4B$C0E=HILUQaWl]wcm֞y˕~|~ 4A#A/B;EGISN^ShZra{ۯn̦v~ 4?"?.@:BEFPKZRcYk߽drѶlĬsz4=!<-=8@BDLIUQ\Zaboɼipw4; 9+:5=?BGHNQR[Y`mgmt}x|386)82:;?AGETEWX^kd~krzvorwz}~353'4/65=8H8MEVV\ib{howxnhiosvxz{{{{{{{{300#/)2-;,@:HLN\Vl]zem}vsălgefknqstttttttt1-*)"-!3,XFeOpXzzdsmmvhdЈ`ϒ^Ν\ͩ[ιYȚZʜ\ɝ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ  "'-96J?XHcRmz\urd{mmhud~`؆]֏Z՘XԢWԮVԼV͐VђWѓWѓWѓWѓWѓWѓWѓWѓ   #*.;8IBUL_zVgs^mkdrflwbtz_|}\ZߋWޓUݜTܥRܯRܻQ̅RڅRڅRڅRڅRڅRڅRڅRڅ  $*09:EFOzQXrX^k^ceeh`lk]rnZypWrUtSvQwPxNyMzMzLzLzLzLzLzLzLzLzظ '(35??yJGpQNiWSb]W^d[Zj^Wp`TvbR|dPeNgLhKiJjIkHlGlGlGlGlGlGlGlGlݯż *#~6-vA6mHk2CE@K=P;U9Y7^!5b"4g#2l$1r%/w&.}'-(+)+)+)+)+)+)+)+)+)vs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvst1 rBtO'xX3y`?wiJsqTq|\nckiimgqetdvbxay`{_|^}]}]}_}`|b}b}b}b}b}b}b}b}wtu1 sBwM'{V4|_@zgKwoUsz^qenkkpisgweyd{b}a~`_ŀ^Ё_ڀaހb߀c߁d߁d߁d߁d߁d߁d߁d߁xuv1 tBzL'U4]@~eLznVvw_tfpmmrkviyg|e~cba`DŽ_ӄaڄc݃d܄e܄e܄e܄e܄e܄e܄e܄e܄yvw0 vB~K'S4\@dLlVzt`whsoptmyk|hfecbaɇaՇdڇeڈfوgوgوgوgوgوgوgوgوzxy0 xAI'R3Z@bLiW~qa{{iwqswp|mjhfdcb΋d֋f֋g֌h֌i֌i֌i֌i֌i֌i֌i֌i֌{yz0 |?H&P3X@_LgWnaxj{rwys~oljgedďdҏgӏhӐjӐkӐlӐlӏlӏlӏlӏlӏlӏlӏ|z{0 >F&N2V?]KdVkask~s{zvrnkhfeʓhѓjДkДlДmДnѓnѓnѓnѓnѓnѓnѓnѓ}{|/ <E%M1S>YJ`Uh`pjyt|zuqmiggΗk͘l͘n͘o͘pΗqΖqϖqϖqϖqϖqϖqϖqϖ~|~/ ;C$K0P(B2G;MDTM[UܰeaΨlqßt|§åţƢȟȟȟȟȟȟȟȟ- 49<&@/E8K?SF\MӶb`ƭipqy¨æŤƢȠȟȟȟȟȟȟȟ+ 279$=,B3I9R>XL̺`_gon~v~~¨æŤƢȠȟȟȟȟȟȟȟ* 146!:(@-H1Q7VK^]enl}s{ytwz§|å}ţ~ơȟȟȟȟȟȟȟȟ( 1236"=&G&L5TI\[cljzqywpln§ræuĤwƢxǡzȟzɞzɞzɞzɞzɞzɞzɞ& /./2:DJ3RGZYaigxnvyohdeŤjţmƢpǡrȟtɝuʝuʝuʝuʝuʝuʝuʝ$ + )),7AI0QDXV_fetl|tqib^]ɞbȟfȟiɞkʝn˛n˛n˛n˛n˛n˛n˛n˛#' " $ 0=$F4NDVR]acokztsk~bȌ\ȜYȱWΖ[͘^̙a̙d͙g͘g͗g͗g͗g͗g͗g͗g͗!  .:)C9JHPVWb_lvhulr}c~\،W؝TװT͌UӏWґZѓ\ѓ_ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ  ,7.@=HJOVV`v^ilepdpw^||YVޗSݦQܸQԄSڇT؉V׊X֋Y֋Y֋Y֋Y֋Y֋Y֋Y֋ ٿ ,!70@>HJPTwW]m]defj_pnZzrVvSyQ{O|M|M|P|QRށSށSށSށSށSށSށSށ ۷ ,#71A=IGxQPnWWe^\`fa[oeVxhSkPmNoLqJrIrHrKrNsNtNtNtNtNtNtNt ެ˺!.#9/B9wJBmPIeVN_^SZeVUmZRu\O~_LaJbHdFeEfDgCgEgFgFgFgFgFgFgFgʹ $0 ~;*tB2kH9cN?]UCX]GSdJPkMMrOJyQGSETCVAW@X?Y>Z>Z=Z=Z=Z=Z=Z=Z=Zҭ &|1q8"h>)`E/ZL3TS7PZ:L`Fm@DtBA{C?E=F;G:I9J8J7K7K7K7K7K7K7K7K w# m*d1\8U@"PH&LO)HU+D[-Ba/?g1=m2;s39z5765738291:0;0;0;0;0;0;0;0;| of^! V)P2K:FABH?N5D2I0N.S,X*])c'i%o$w"~!hd#_/^@cKgT%h]/fg9drAb}H`N]R[VZYX[W]V_U`TaTbScRcRcScTcVbWcWcWcWcWcWcWcie#`._@fIjS%k\0ie:gpBd{IbO_T]X[[Z]X_WaVbUdUeTeSfSfUfVeXeYfYfYfYfYfYfYfjf"a.`?iHmQ&n[0ld:inCgyKdQaV_Z]][`ZbYdXeWgVhUhTiUiWhYhZi[i[i[i[i[i[i[ijg"b.c>lFqP&rY1pb;lkDivLgRdXa\_`]b[eZgYhXiWjVkUlWlYk[k\l]l]l]l]l]l]l]lkh!c-g<pEtN&vW1t`;piEmsMj~TfZc^ab_e]h\jZlYmXnWoWoYo\n]o^p_p_p_p_p_p_p_pli!e-k:tCyL&zU1y]\IdSk]vfoxwr~mjhhЌkՍmՍo֌p֋q؊qىrڇrڇrڇrڇrڇrڇrڇspu&, 6@F'L1R;YE`OhYߎscՆ}nxxsomlȑnґpӐrԏsՍt֌t؊uىuىuىuىuىuىuىtqx$+ 5>C$I.P7VA]JߝgTԕobˍxnÅyyurqsДtђvґwӏwՍw֌x؊x؊x؊x؊x؊x؊x؊ur{#) 4<A"F*M3T<[DףcS̚lb“un~y{xvwϖyДzђzӐzԏzՍz׋z׋z׋z׋z׋z׋z׋us}!) 49>D&J.R5ܯYAϨaRŠiarnzy~|}͗~ϕ~Г~ґ~ӏ}Ս}֋}֋}֋}֋}֋}֋}֋vt ( 37;A"H(P.ԴV@ɭ_Qg`omwx˘ΖДҒӐԎ֌֌֌֌֌֌֌wt'2 48=F!ܿL,ιT?ñ]Pe_lltw|}zǘ|Ζ}Д~ҒӐԎ֌֌֌֌֌֌֌xu&/ 04:DH+ȽS=[Nc]jjqvzytqØsϖvДxґyӐzՎ{֌{֌{֌{֌{֌{֌{֌xv%+ , /6<G)Q;YLa[hhotw~yqlikДnђqґsԏuՍv֋v֋v֋v֋v֋v֋v֋yx#&%(07E'O9WJ_Xfemqu{z~qjebcґgӐjԏmՍn֌p؊p؊p؊p؊p؊p؊p؊{|! $5C$M6UG]Udbkm{svr|~jc^[[Ս_Սc֌f׋h؊jوjوjوjوjوjوjو|%6A!K3SCZQb]~igtqpk{xd~]XVUۆXڇ\ڇ_ڇaۆcۅcۅcۅcۅcۅcۅcۅ~ھ %5@!I/R>YK`Wvhampiezp^̆uX̕yȚ{Qͼ|P|SU߀XށZށ\߁\߁\߁\߁\߁\߁\߁ ۵ % 3>%G2N?UIv]Smf[eoa^zgX܆kSܕoPݦqM޻rMqNtPwRxSyUzUzUzUzUzUzUz ݫ͸ % 3='F3N>vUGl[NdcU]mZXw^SbNeJgGiFiHiKjLmNoOpOpOpOpOpOpOp б '4>'G2vN;lTBdZH]bMWkQRuUMXHZE\B^A_@`C`G_HaIcIcIcIcIcIcIcԩµ )5~@%tF-kL5cR:\Y?V`CPhGLqJG{LCN@P>R=T;U;UA;C9E8F6G5H5I4I7I7I7I7I7I7I7Iɫ~u' l/d7\>VE"PK%KR(FX+A_->g/;o18x364361708/:.;.;-<-<-<-<-<-<-<yne^' W0Q7K>FEAL=R9X6_!4f"1n$/w%-&+())(*'+&,&-&-&-&-&-&-&-}ui _WPI&D. ?6 ;= 7C3I0O.U,[*b'i%r#{!|peZQ IC=8&4-03-9*>'C%I #N !T Z a i r |  \W&Q2N<WE[N\X"[c+Yo2Wz8T=RAPEOGNIMKLLKMJNIOIPHPHPIPKPMOOPOPOPOPOPOPOP\X&R2Q:ZC_M_W#^a+\m3Yy:W?TCRGPIOKNMMOLPKQKRJRISJSKSMRORPSQSQSQSQSQSQS]Y&S1T9]BbKbU#`_,_k4\w;Y@VETHRKQNPOOQNRMSLTKUKULUMUPTQURVSVSVSVSVSVSV^Z%T1X7a@eIfS#d]-bh5_t<\BYGVKTNSPQRPTOUNVMWMXLXNXPXSXTYUYUYUYUYUYUYUY_[%U0\4e=jGkQ$iZ-fd6cp=_|C\IYMWPUSSURWQYPZO[N[O\Q[T[U\V]X]X]X]X]X]X]X]`\$V/`2j;oDpN#oW-ka6gl>cxE`K\OZSWVVYT[S\Q^P_P_R_U_W`XaYb[b[b[b[b[b[b[ba]#Z-e/o8tAvK#uT-q]6lg?hsFdL`R]VZYX\V_T`SbRcScUcXdZe\f]f^f^f^f^f^f^f^fb^#^*i-t5z>|H"{Q,xZ6sc?mmGizNdT`X]\Z`XbVeUfTgVgZg\i]j_j`jajajajajajajajc`"b'n*y2<F!O+X5{`>uiGotNjUf[b__c\fZiYjXkZk]m_naobocndndmdmdmdmdmdmda"f%r'~0 ;EM)U3^=}fFvpNr|Um\hbdfaj_m]o]p^p`rbsdsesfrgqgpgpgpgpgpgpeb!i#w%/ 9CL&S0[:cDlMywUt]nciifncqatauavdwfwhwivjujsksksksksksksfc!m {#. 8AJ#Q-Y7`AiJ߁tSz~]teolkqhufxeze{h{j{kzlxmwmvnunununununugd p~", 7@H N)U3]<ݏfGӈoSˁy^{funqtnxk|j~jl~m}o|pzpypwqwqwqwqwqwqwhd s +5>DK%R-ߝZ7ӕcFʎlSÇu^~g{owuszp~ooʂpށq߀r~s|szsysxsxsxsxsxsxifv*4 ;AH O'آV6̚`EÓiRr^zgo}vy|vttńu݃vށvw}w{vzvyvyvyvyvyvyiix(2 7=DݭK$ЦT5Ɵ^DfRo]wgow~}{zyz܄z݂z߀z~z|yzyyyyyyyyyyyyjk{&03 9AֱG#ʫR4\CdQl\tf}ov}ۅ݃ށ~}}}{|z|z|z|z|z|zkm~$,/4 ݺ:еF!ůQ2ZBbOj[reznv||ywׅx݃zށz{}|{|z|z|z|z|z|zkp"&)/ֿ6ʺD O1X@`NgZodwmu{ztqoхq݃s߁u~v}w{wzwzwzwzwzwzls !&4 ľBM/V>^LeWmbuk~ryyr~mig̓iނl߀o~p|rzryryryryryrymv2 @K,T<\IcUk_rhy{orvk{fb`ʀbe~h|j{lymxmxmxmxmxmxn{ڻ / =I)R8ZFaQh[zpdrykkqdv_z[|Y|Z{^{azcyfwfwfwfwfwfwfwp ٳ Ͼ ,;F&P5XA_M|gVso^kwedk^pYsUuTuSvWvZv\u_t`t`t`t`t`t`tr ٩ε )7D!M0U<}]GtePlmWev^^ācYÎhTÝkQîlOmNmPoSpUpXpYpYpYpYpYpYpwޠϮĹ )7BL)T5u\?mdHelO_vTYҁYTю]Pѝ`MҰbKbJbKfMhOiQiRiRiRiRiRiRi ҦIJ * 7B}J)tQ3kY:daA^kGXuKSOOSKUIWGWFWFYG\I^J`K`K`K`K`K`K`ٞǬ , 9|AsI'jP/bW5\_:Vh?RqBM|FIIFKCM@N?O>NBOCQDSETETETETETET˦ . y7p?hF"`M(ZT-T\1Oe5Km8Gw;C=??D>F>F>F>F>F>FП{t* l3d;]CWJ QQ$LX'H`*Dh,@q.<{192543617/8.9-919393939393939}vme$^- X6R=LEHLCS?Z>>>=>=?>>@>C=D>F?F?F?F?F?F?P K*E5J8M=QHRRQ^Oj%Mw+J/H3F6D8C:B@?@@?@?@>A@@B@E@FAHAHAHAHAHAHAQL)G4M6Q;UFVPU\Rh&Pt,M1J5H8F;EC?CABAABAC@C@CCCFBHCIDJEJEJEJEJEJERM)J2P3U9YCZMYX Vd'Sq-P}3M7K:I=G?FAEBDDDECEBFBFCFFFIFKGLHMHMHMHMHMHMHSN(N/T0Z6^@`J^U [`(Xm/Ty4Q9N=L@JBIDHFGGFHEIDJEJGJJIMKNLOLQLQLQLQLQLQLTP'R,Y-_2d<fGdR a\(]h0Zu6V;R?OCMELHJIIKHLHMHMHNKMNOPPRPSQTQTQTQTQTQTQUQ'V)^*d/j:lElO hY(dc0`p7\|=XBUFSIQKOMNOMPMQLQMQPRRTTUVUWUXUXUXUXUXUXUWR&Z&b&j,q7sBsLpV(k`0fk8cw>_D[HXLVOUQSSRTQUQURVTXVYXZZZ[Y\Y\Y\Y\Y\Y\YXS%^#g#p*w5 z@zJxS&s\/nf7ir?e~EaJ^N\RYUXWWXVYVYV[X]Z^\^]^^]_\_\_\_\_\_\YV#b l u(}3 =GP${Y-vb6qm>lyEhKdQaU^Y\[[^Z_Z`Za\b^b`baabac_c_c_c_c_c_ZY!fpz&1 ;DM!V+~^4yi=ttEoLjSfXc]a`_c^d^e_f`fbfdeedecfbfbfbfbfbfb[\iu~$.8BJR'[0݁f:zpEuzNpUl[i`fddgcibjcjdjfighhgifidididididid[_ly!,6 ?GO"܎X-҇b:ʁlE{uNvVr]nbkfijglgngnimjlkjlilglflflflflflf\bp|)3 <DߚKӔU,ʍ_9‡iEqO|{Wx^tcqhnllolplqmonnolojoiogogogogogog]dr&08 ?؟G͙R+Ē]9fDnNwW}^ydvismqqqrqsrqsosmsksjrhrhrhrhrhrh^gu#,3ݨ9 ѣEǝP*Z8cDlNtW|^d|jynwrvtvtwrwpwnvlvjvivivivivivi^ix',֬4 ˧CN)X6aCiMqVy^djo}r|t}|u|}s||q|{o}zm}yk}yi}yi}yi}yi}yi}yi_k{ ݰ$а2 ƬAL'V5_AgLoUw]din|rwtuutsuqvow~mx}kx|ix|ix|ix|ix|ix|i`n~ֶ˴0?K%T3]@eJlSt[}bhymtqptmtmsoqpormsktitititititiaq ٵ ϹŸ.=I#R1[>cHjQrYz`xfrlmoirfserhpjnllmkninininininicu ܢԭ ϸ ɽ+;G!P/Y;aFhOpWxx^rdkifmbo_p^o`ncmfkgjihihihihihihgy ߚӦ̱ǻ(8DN,W8^BfKxmSqvZk`ed`h[kYlXkYk\j_iahcfcfcfcfcfcfk~ ̪֞Ĵ$5 BL(T3\>ydFqkNktTd~Z__ZbVeSfReRfUfXfZe\d\d\d\d\d\dp ݖΣĮ 1 >I#R.zZ8rb@kjGdsM^|SYWT[P]N^M]K_N`Q`S`U`U`U`U`U`U`wӛƨ ,:FzO'rX1j`8dh?^rEX|ITɈMOɕQLɥSJɹTISGUHXJYLZNZNZNZNZNZNZܓʢ ,9yCqM jV(c_/]g5Xq:S{>OوBKٖEH٦GFںHEGDIBMDOEPGRGRGRGRGRGRϛ~-v8nAfJ_R#Y[)Ud-Pm1Lx5I8F:C<@>?>>>=?=B?D@F@F@F@F@F@F֓ģyq+j6 c?]GWORW!M`$Ii(Fs*B~-?/<1:38465655476989898989898Ȟyskd'^1X; SCMKISEZAc>l;v!7#4%2'0(.)-*,*,*/*/*/*/*/*/*um e^W#R,L4H< CD ?L94%0,,2(8%>"DJQYcn|  rdTKD=7 1,($" ',16<BI Q Z fsD$?.<6@8A=AEAQ @]?j4B6D;DCEO D[Ah?u4@4A4A4A4A4A4G"A,E/I0L5M=NHMTKaHn E{%B(?+>.=/<1<2;3:4:5:5:5:5:5>5A7B8D8E8E8E8E8E8H"C,H,N-Q1S9UESQQ]Nj!Kw&H+E.D0B3A4A6@7?8?8?9?9?9@8C:EH@JAKAMAMAMAMAMAMAJ H'Q%X%]*`3c?bJ`U\a#Ym)Uy.R3P6N9L;K=J?J@I@IAJAJBJDLEOFPFQFQFQFQFQFQFL L$U!]!c'g1j< jGgRc\#_h*\t0Y5V9TeDbI`M^P]S[U[V[V\W]W^V`U`TaSaSaSaSaSaSPZepx$.8 BKW#yb/tl8ov@lFhKfPcSaV`Y_Z_[`[aZcYdXdWeUeUeUeUeUeUP]it}!*4= ܋HхT#^.zh8uq@qzGnMkRhVfYe\d^d^d^f]g\hZhYhWhVhVhVhVhVR_lx%/ޕ8 ӐEʋQ"…[.e8{nAwwHtNpSnWk[j^i`hai`j_k]k\lZlXkXkXkXkXkXTbo{(ؙ3̕BĐN!Y-b7k@|sHy|NvTsXq\o`nbmcnboao_o]o[oYoXoXoXoXoXVdr~ݞ ў1ǚ@L V,`7h@pH~yN{TxYv]tascrdsdtbt`s^~s\~rZ~rY~rY~rY~rY~rYXgu֣ˡ/ž>JT+]6f?nGvNT~Y{]ya}xdzxeyxexybyx`yw^yv\yuZyuZyuZyuZyuZyuZZix ݚ ٢ Цƥ,<HR)[4c>kFsM|SX]zav~ds}eq~eq~cr}`s{^tz\ty[uyZuyZuyZuyZuyZ]l { ܓ՝ ѥ ʪ*:FP(Y3a]xCXGTKPNMPKPKPJQLRNRPRQQQQQQQQQQv݉ʗ%4 |@uJmS#g\*ad0\m6Wv:S?OBKEHFGFGFDIEJGKILJLJLJLJLJLѐž y.r< lGeP_Y!Zb'Uk,Qu0Mρ4Iώ7Fϝ9DЮ;B;C:@>>@@BACBDBDBDBDBD݈ǘx tn+h7aB\MWVS_Oi"Ks%G~(D+B-?/>/>/<19496:8;9;9;9;9;9͒~tnhb*]5W? RHMQJZFcCm@x=!:#8$6&5&4&4&2(2+3,3,3,3,3,}qgb\W'R1M:HB DK AT>\;e8o5{20.,+********{oc[UPK#F,B4><:C7K4S1[ .d +o (| &$"! {n`TNIC?:%6,23/:+A(H%O"W `ly         |m_QGA< 72.*#&)"/5;BIQZf t   }m_PB:5/* &"#(-3 9 AIS^l|9'3254868;6C3N1[ /h -v+))((('''''''''(+-/////:'4181;4;9:A7K5X 3e1s/--,,++++* * * * + +,/!1"3"3"3"3"3";&50;/>1?6>=k;x977 6!5"5#4$4%4%4&4&4&5%5&6(8):)<*<*<*<*<*=%=*C(G)I-J6JAIM GZEgBt@> ="<$;&;':(:(:):):):);):+;-=.?.A.A.A.A.A.>%A&H$L%O)R3Q>QI OVLbJoG{ E#C%B'A)A*@+@,?-?-@-@-@/?1A2C3D3F3F3F3F3F3@$E#L R!V&Y/Y:YF VQT]QjNu!L%J(I+G,G.F/E0E1E1F1F2E5D6G7H8J8K7K7K7K7K7A#IQW\#`,`6`A ^M[XXdUp#S|'P+O.M0L2L3K4K5K5K6J8J:JO@OAQAR@S@T?T?T?T?T?FPYbhl$o.o8nDkNh[dg#`q*]{/[4X8W;U=T?SASBSCSDSETEVDWDXCXBXBXBXBXBHS]fmr!u)v3v> sJoWkb#gl+dv1a7^;\>[AYDXFWGWHXHXIYHZH[G\F\E\E\E\E\EKWakrx{$}-~9{FvSq^$mh,jq3g{8d=bA`E^G]J\K\L\M]L^L_J`I`H`G`G`G`G`GNZdov}'ۄ4ЁC|OxZ#sd,pm3lv:j?gCeGcJbMaO`P`PaObNcLdKdJdHdHdHdHdHP\h rzފ Ҋ0Ɇ@M}W#ya,uj4rr:o{@lDjHhLgOfQeReSfQgPgNhLhKgIgIgIgIgIR_k u ~ ֏̎.Ë= JU"~^+{g3wo:tx@rEoImMlPjSjTjTkSlQlOkMkLkJkJkJkJkJTa n x ܉ ؏ ГƓ+; HR!\+d3|m:yu@w}EuJrNqQoToU}oV|oT|pR{pP{oN{oM{nK{nK{nK{nK{nKWc p|܅ԌГ ʖ)9 FP Z*b2j9r?|zEzJxNvQ{uTxtVvtVutUuuSutQusOvrMvqLvqLvqLvqLvqLYfsֈϐʖĚ&7 DNW(`1h8p?xDI}}Mx{QtzTqyVoyVnzUnzSoyQpwOqvMquLquLquLquLquL[iw݂Ћɓę$4ALU'^/e7m=uC{~HvLrPnSkUhVgUhSi~Qj|Ok{MlyLlyLlyLlyLlyL^ lzֆˏė!2?JS%\-c5k;zsAu|FpKkOgRdTbUaTaRcPeOfMg~Lg~Lg~Lg~Lg~La o~ЉƓ /=HQ"Y+a2yi9tq?oyDjHeLaO^R[RZR[P\O^N`LaKaKaKaKaKdtڂˎ,: EOW(y_/sf5mn;hw@cE_I[LWNUOTNTNUMXLYK[J[J[J[J[JhyчŒ(6 BLxT#r\*ld1gl6bu;]@YCUGQIOJNININIPIRHTGTGTGTGTGnʍ#2~>wIqRkZ%eb+`j0[s5W}9S=O@LBJCIBHCGDIDKDMDMDMDMDMDu҆Ó {-u: oEiOcW^_#Yh(Uq-Q{0M4J7G9E:D9C;B=B>D>E>E>E>E>E>}ɍytp&k5e@ `K[TW]ReNo#Kz&GȆ)DȔ,BȤ.@ȸ/?/?0=3;5<6=7=7=7=7=7цxne c`-[:WF SP OYKbGlDwAׄ>ؓ <أ!;ٷ":":#7'6)4+6-6-6-6-6-ŐwlbZXT)P5L?HIES B\ ?fC;K8T6]3h 0t . ,*(''&&%%%%%vi]QIFB>!;*734:0B-J+S(\%f"s         vi[NC>: 62/#+*(1$7!?FNXcpwhZL@72.*&# &+28@H R ]k}xi[K>2+&!  $ *07@JVdu/++2/104/9+A'L#X!f t    !""""/+.02/3126/>+I)V'c%q$~ # #"""""""""""###$&''''0*1-5+7-624:2E/R-`,m *z )(((''''''''(((')+,,,,1)4)9(;*<.:69B7O5\3i 1v0/..--------..--/122223)8&=$@%A)B3A>?J=W ;d 9p7}655443333345433 6!7!8!8!8!8!5'="B F H%J/I:GFER C_ Ak?w=<<;;:::::;:!:#:%:%<&=&>&>&>&>&9$AGKO"Q+Q6OALM KZIfGrE}CBBA A!@"@"@#A#A$@'@)?*@*B*C*C*C*C*C*< EKQVX'X1W<UH RTPaNmLxJI H"G$G%F&E'E(E)F*E-E.E/F/H/I.I.I.I.I.@IPV\_#`,_7]BZO X\VhSrQ} O$N'M)L+K-J.J/J0K0K2J3K3L3M3N2N2N2N2N2CLT\aef'f1e=cJ `W]bZmWw#U'T+R.Q0P2O4O5O6O6O7P8P8Q7R6S5S5S5S5S5FPX `fjl!m+l7jE gRc^`h ^r&\{*Z.X1W4U6T8T:S;S;TX?X@Y?Y?Z>[<[;[:[:[:[:[:LV ` h o swyy.w> tKpVm`!ji(gr-ez2c6a9`<^?]A]B]C]C^A_@_>_=_<_;_;_;_;NX clsx{ ~~+|;yHvSr]!of(mn.jw3h7f;e>cAbCaEaEbEbCcBc@c>c=c|g=|g=|g=|g=R]irzʃņ&6CN|X y`'wi-tp3ry7pwj>wj>wj>T _lv}Ƀć#4ALU^&|f-yn2wv7u;t?|rCxqFupHsoIqpIqpGqqDrpBroArn?rn>rn>rn>rn>V boýŇ 1? JS\%d,k1}s6~{|;zy?vwBrvEouHluIkuIkuGkuEluCmsAmr?mr?mr?mr?mr?Yer|DŽ /< HQZ$b*i0|q5xz:t>p}Bl|Ei{GfzHd{Hd{Ge{DfzCgxAhv?hv?hv?hv?hv?[iv̀È ,: EOW"_({g.vo3rw8m_A\DZEXEXDXCYA[@]>]>]>]>]>bq~È%4@ JyStZ#ob(jj.fr2a|7]:Y>V@SARBRAR@R?U>V=W=W=W=W=gvɃ!0< xGsPmXh`$dg)_p.[y2W6S9P;N=L=L2@2A2A2A2A2|Š|phfc-^9ZDVN RWO_KiHsE~B ?"=#<#<#:&8(7)8*8+8+8+8+Ʌ|qf[WV#S2P>MHIRF[ Ce@o>{;ω9ϙ7ϫ664210!/!/!/!/!}qf[PG FE'D5A@?K=U:_8i5v 3 1 / .--+*)((((~qeYND? =;#9.684B1K/U-_*k(x&%#""!!     qdXLA85 30.'+0(8&@#I!R]iyrdVI>4.+ (%"&-4<DNYg w   sdVH;0'#  !' . 6>HTbsteVG9-#   &.7AM\m$/%/(/'1$6 >IVdr    %.)-+,+.)3$;FSan{       &-,).(/*-/)7'C$P"] jw             !!!!**/&2$3%2*14/?-L*Y(f&r%~%% % % % $ $ % % % % & & &%%&''''.&4"7 9!8%9/8;5G3T1a/m.y - - , , ,,,,,,---,,,-....2#8<>@"A+@6>B xJuSs\qd"ol'mt+l|/j2i5|h8yg:vf;tf#="=#<%;&;&;&;&;&;&zui^[Y$V1S=PGMPJY Gb DlAw><98775433 3 3 3 vk_TL KI(H5E@CJ@S>];g9s 7ǀ 4ǐ 2ǡ1ȵ00.-,++++xk`TJ@:98(756@4K3U1`/l-z+؋*؝(ٱ''& % $ # # # # yl`TH>5- ,+)*(5'?&J$U#a!n ~zl_SG<2*% #!"+4>HR_n      |m_RE9/&!(0 9 C N\l}n`RC7+"  "*3=IWi~paRC5)  #+6CSez/ ,!,.3<F T a o {                      -#)$)"+08CP^kw#*&&(%''#+3@MZgs~&&*", +"(&'0$<"IUbnz     *".000"0,.7+D(Q&]$i#u#########$$%%$ % % $ $ $ $ $ .35588'734?2K/X.d-o,z,,,,,,,, , -- , -,,,,---27:<?@">-<9:E8R7^6j5t5~44 4 4 3 3 3 3 4 44444344446;> CFFF&D2B?@L?Y>d=o}H |Q{zYwy`swhovp!lux%it(fs+cr.`q/^q0]q0]q.^q,^p+_p)`o(`n(`n(`n(Ubmu{.;~E zNuVq^n}fj|m g{v#cz'`y*]x,Zw.Xw/Ww/Ww.Xv,Xv*Yu)Zt(Zt'Zt'Zt'Yfqz +}8xBtL oTl[hcdkat!]}$Z(W*U~,R~-Q~-Q},R}+R|)S{(Tz'Tz'Tz'Tz'^kv~~{'v4r?mI iQeYb`^hW{!T$Q'O)M*K*K)L)L(L'M&N&N&N&cp{zur"o0j;fEbN _V[]XeUnQxN K#I$G&E&E%E%E%F$F$F$F$F$iv~pkhf*b7_A[JXR TZQbNkKuHEB@ ? ?? >!>!?!?!?!?!p}wi`][$Y1V<SEPNMW J_ GhDsA><:998777777xznbUPNM(K5I?FIDRA[?d+<6;A9K7T5_3j1w/-+**) ( ' ''''rfZOD:0.-,)+5+@*J(V'a&o$#ϑ!ϥ н tg[NC9/' &1<HUbrvh[NB7-$&0: F S b txi[M@4*!  $,7BPauyj\N?2'  '1>M_u|l]N?1%  !+9J]s,)(+0 8DQ^lx)&%',4 @N[ht&!" !#'0<J W c o z                ""$$"",8ER^ju&((&&&(#4 @MYepz*---.-",.):&G$T#`"k"u"~""""""###$$%%%%$$$$.12 4553'14/A-N,Z,e,p+y++++++++,-- - - - - , , , , 15 6: <;97+695G5T5`5j4s4|4433 3 3 3 3 4 4 4444444458<@A A?<"=1>A>O>Z=d=nCKQTTRQS"U3TATLSVQ_ PgOoNwNMLLKKKKLLLMLLLL@GPVYZXWYZ/Z=YIXS W[ VdUkTsS{RQQPP P!P!~Q }Q}Q}Q}Q}Q}Q}QBJTZ^_^\ ^`+`:_E^P \X [`ZhYpXwWVV~U!{U"yT#xU#wU"vV vVvVvVvVvVvVENX^bdcacd(e7dCcMaU `]_e^l]t~\}|[yZ wZ"tY$rY%qY%pZ#oZ"oZ pZpZpZpZpZHR[bfhhfgi%i4h@gJfS e[db~cj{brxazv`s_!p^#n^%l]%j^&i^$i^"j^ j^j^j^j^j^JU_ejlljkm"n1m=lGkP jX|h`xggvgosfxpemd!jc#hb%fb&db&db%db#db!ebebebebebLXbinppnprr.r;qE}pN znVvm^slepkmmjujigi!eh#bg%`g&_g&^g%^g#_g!_f`f`f`f`fO\emrutst vw+w8|vCxuL ttT qs[nrckqkhpseo|bn _m"]l$Zl%Yl%Xl%Yl#Yk!Zk[k[j[j[jS`iqvyywy {|({|5w{@szIoyQ lxYhwaevhbup_tz\tZs!Wr#Ur$Sr$Sr$Sq"Tq TpUpUoUoUoWdmu{~}}|x$u2q=mFiO fV c~^`}f]|nZ{wWzTzQy!Oy"Ny"Mx"Mw!NwNvOuOuOuOu\hrzytq n.j9gCcL`S ][ZcWkTuQNKIH GGH~H}I|I|I|I|anx{pk hf)b5_?\HYPVX S`PhMrJ}HECBAAAABBBBgt~uga^\#Z/W:TDRLOTL\ Ie GoDzA?=;;:::::::n{{nbWRQO(M4K>IGGPDXBa?k =w : 86544333333wsg[OGDCA+@7?A=J;S9\7g5s20.- ,, + * * * * * xk_SH=6 43!2,170A/K.U,`*m){'%$##"!!!!!{naUJ?4+$ ""!* 4?JVcsDžǙȮ}pbVJ>4*" %0<H V e x ֍ ؤ ؾ   rdWI=2(  $.:GVg{teWI<0%  !+7EVh~vfXJ;.#  '4CUixhYK;-! "0@Si(%% '-5AO\it~%"!# (0=KXdpz"" ,9FS`kv(4 A N[fqz     !! $/<IUaku~%%$ ##")5CO[fpy() (+ +)&"#.!; I U `!j!t!|!""""###$%%%%%%%%%, -.11 /+)%(3(B*O+Z+e+n,v,~,,,,,,,--....----/15763/.1,3<4I5U5_5h5p4x444444 4 4 5 5 5 5 5 5 5 5 5 35:>@=7 8:&=6>D>P=Z=c=kGPVXYVSTV%W4W@WJVSU[ Tc TjSrRz}R{QxPvPtPsPqPpQpQpQpQqPqPqP@KTZ]^[XY["\1\=\G[PZX Y` ~Yg{XoyWwvVtVrUoUmTlTjUjUjUjUjUkUkUkUCOX]ab`\^`a.a:`E`N~_V {^] x]ev\ls\tp[}nZkZiYgYeYdYdYdYdYeYeYeYeYFR[aefcabde+e7eB|dKxcSuc[ sbbpajm`rk`{h_f^c^a]`]_]_]_]_]`]`]`]`]JV^eiigef hi(~j5zi?viIshQpgY mg` kfghepedycd`c^b\bZbYbYbZbZa[a[a[a[aMYbhmmkik m|n%xn2un=qnFnmOklV hl^ ekecjm`iv]i[hXgVgUgTgTgTfUfUeVeVeVeQ]flqpon}pxrus!rs/os:lsDirLfrTcq[ `pc ]pk[otXnUnSmQmOmNmNlOkOkPjPjPjPjUajqutt|svuqwoxly+iy7fy@cyI`xQ]wX [w` XvhUuqRu|PtMtKsIsHsIrIqJqJpKpKpKpZfovyxxwyo|j} g~d&b2_=\FZNWUT~] R}e O}oL|yJ|G{E{D{C{CzCyCxDwDvDvDv_kt|~}~rfa^\!Z.X8UBSJPRNZKb Il Fw CA?=<<<===~=~=~fq{ym_XTRP'O3M=KEINFVD_Bh?s = : 8 766555666myrfZPI GE D+C6A@@H>QKZj~̫̔|n`RE9.#  '1>K[nބߛߴpaSE8,!  $/<K]qrcTF7*  +9J^tteVG8*  (7J^v$" !$)2>LYepz! #-:HUalv )6CP\gqz $0>KWblu~ + 8EQ\fpx   $0> J V a j s { " ! ! (6COZdmu}&%&'%! -<I U!_"h"p#x###$$$$%%&&&&&&&&)(-0/+" #&'(6*D+O,Y,b,j-r-z--------..//....,.5996/-0!214>5J5T5]5e5m5t5|554445556666555/4<AB@:69;,<:=F=P=Y=a=h @B'C5DBDLDUC]CdCkBsB{B A A A A~A|AzB yB xB xB xB xA xA 6@HMNMIEFH#I2J>JHJQIYI`IhHoHw G }G zGxFvFuFsFrGqGqG qG qG qF qF 9DLQSRNJKM O.O:OEONOVN]~Nd|Ml yMt wL} uLsLqKoKmKlKkLjLjLjK jK jK jK =HPUXVSOPRT+T7TBTK|TSzSZxSbuRi sRq qQz nQlPjPhPfPePdPdPdPdPeO eO eO ALTY\ZWTU WX'Y4}Y?zYHwXPtXXrW_oWf mVn kVw hUfUdTbT`T_T^T^T_T_T_S _S _S DPX]_][XZ [}\$z]1w]<t]Fq]No\Ul\]j\d h[l eZu cZaY^Y\X[XYYYXYXZXZXZW ZW ZW HS[aba_\^{_xa!ub.rb9obClaKjaSgaZe`b c`j `_s ^^}[^Y]W]U]T]T]T]U\U\U[V[ V[ LV_dedcaybudreof+lg7jg@gfIefQbeX`e`]dg [dp Yc{VcTbRbPbObObOaOaP`P`P` P` OZcihggyesgoiljik(gl4dl=blF_kN]kVZj]Xje Vin Six QhNhLgKgIgIgIfJfJeKe Kd Kd T^gmlkkskmmhn epbq$`q0^q:\qCYqKWqSUpZRpbPpk Nou Ko InGnEnDnCmDlDkEk Ej Ej Ej Xclqpozonpes`u]v[wYx+Wx6Ux?SxHQxOOwWLw_JwhHvs Ev Cu Au?u>u=u>s >r >q ?q ?p ?p ^iquttutiv^yX|T}R~Q&O1M;LCJKHTF\CeAp?~|<~ :~ 9~ 7~ 7} 7{ 7z 7y 8x 8x 8x doxyy{ypzd|XPK HG E+D5C>AG@O>X4*!! + 6 A N \ l teWK@5*!  "+6BP_qćĝĵxj\OA5)  !*5CRcxՏէ{l^PB4(  '3BTg~}n_QB4'  $1AUjqaRD4&!/AVm  %.;IVbmv  *7EQ^hrz%2@LYcmu}  ,:GS^gpx  &3@MXajrz  +9FQ[dlt{   " 0 > J U ^ gov~ (7DOYaiqx"!'*)$"1 >!I"S#\$d$l$s$z%%%%&&&''((''''&)1440)#&(+*8+D,N-W-_-g-n.u.}......////////)18<<92- /1&344@5J5S5[5b5i5q5y5555556}6{6{6z6z6z5z5-7?CD@:679":/<;h >g >f?e?e?d?dWaihg{gqgeh\jXlTnRoPo$Np.Mp8KqAJqIHqQFqYDpbBpl@px>p0$  !,:J]rzk\M?0# +:Maym^O@1"  );Of"+8FS^irz&4BNZdmu} ".<IT_hpx   (6CNYbkry "/<HS\elsz  (5ALV_fnt{  -:EPYahov}   $ 2 >IS[cjqx#%$+8CMV]els{       &-0.(" &!3">#H$Q$Y%`%g&n&v&&''''((~)})|(|(|(|($.5861,&&(!*.+9,D-L-T.\.c.j.r.z//}/{/z/x/v0u0s0s0s/s/s/*5;?<83/.02)354?5I5Q5X~5_}5f{6ny5vx5v5t5r6p6o6m6l6k6k6j6j5j50:ACA>:65 78%:1;<|;Ez"z?.x@8uABsAJrAQpAYnA`lAgjAphAygAeAcAaA`A^A^A]A]@]@]@]@9CJKIGDA~AzBvCtE*qE5oF?mFGkFOjFVhF]fFedFmbFv`F^F\E[EYFXFXFWEWEWDXDXD=GNNLKI}ExFtGpHnI'kJ2jK<hKDfKLdKSbKZ`Kb_Kj]Kt[JYJWJUJTJSJRJRJRIRIRHSHAKQPON~LxHrJnK kMhN$fN/dO9bOBaPI_PQ]PX[O`YOhWOrUO}SORNPNNNMNMNMNMMMMNLNLDNTSRQzPrMlOhP eQcR!aS,_S6]T?[TGZTNXTVVT]TTfRSoPS{NSLSKSISHSHRHRHQIQIPIPHRWVUTvSlQgSbT_V]W[W)YX3XX<VYDUYLSYSQY[OXdMXmKXxIXGWEWDWCXCWCVCUDUDTDTLVZYX{XqWfVaX]YYZW[U\&S]0R]9Q^AO^IM^QL^XJ^aH]kF]vD]B]@]?]>]=\>[>Z>Z>Y?YPZ]\[v[m[a[[]V^R` PaNb"Mb,Lc5Jc>IcFGcNFcVDc^Bch@cs>co=o"JV`hpx~ +8EPZckry  %2?JT]elsz  ,8CNW_gmtz  $1<GQY`gnt{  )5@JS[bhou}  !.:DMU \ c j q x  ! &3>GPW^els|#)*&"!-8BKRY`gow~ } { y!w"v"u"t!t!t!!+11.*&! !(#3$=$F%N&U&\~&c|'k{'sy'|x(v(t(r(q)o)m)l)k)k)k(k((28752-)' (*#+/~,9|,Bz-Jx.Qw.Xu.`s/gr/op/yo/m/k/i/h0g0e0d0c0c/c/c/.8=<:730. /{0x2+v35t3>r4Fp4No5Um5\l5dj5lh5ug5e5c5a6`6_6]6]6\6\5\5\43<A@><96{4w5t7q8'o92m9;k:Cj:Kh;Rg;Ye;ac;ib;r`;}^;\;[;Y;X;W;V;V;V:V:V97ADCB@~>y;t:q:m<k=$i>/g?8e?@d@Hb@Oa@W_@^]@f\@oZ@zX@V@T@S@R@Q@P@P?P?Q>Q>;EGFEDyBt>o?k@ gAeB!cC+aC5_D>^DE]EM[ETYE\XEdVEmTExREQDODMELEKEKDKDKCLBLB?HJIH}GuEnBiCeD bE_F]G(\H2ZH;YICWIJVIRTIYSIaQIkOIvMIKIJIHIGIFIFHFHGGGFGFCLLLKyJpIiFdG_I\JZKXL%VL/UM8SM@RMHQNOONWNN_LNiJNsHMFMEMCMBMAMALALBKBJBJGOONNuMlLcJ^LZMVNTORP"QQ,OQ5NR=MRELRMJRTIR]GRfERqCR~AR?R>R=RW{?\F>]O=]W;]a:]l8]y6]4]3]1]1\1[1Z1Y2Y2XTYXXsWiW`XTYN[H]C_@`>a=a ;b):b29b:8cB7cK6cT4c]3ch1cv/c.c,c+c*c*b*`+_+_+^Y\\{[o[e[\\Q^I`CbKYi{w}uptbuUxI|?4+" "+5BP_q}x|i|[NA6,#  "+7ETf{qaSF9.#  !+8HZnyhYK=1%  +:L`wؒجp`QC5(  *<QggXI:* ,?Un%2?KV`hpx -:FQ[cksy  (5@KU^fmtz ".:EOX`gmtz'3>IRYagmsz !,8BKSZagmtz%1;EMU[bhnu|   )4>GOV\cipx   " . 8 A J Q X ^ e lt}~}zxwwww!$# '2<DLSZ`~h}o{xyxvtsronmmmm )+*($  "-~7|@zHyOwUv\tcskq tp n!l!k!i"h"f"e#d#d"d"d!&/10.+($ ~ {"x#)u$3s%<q%Cp&Kn&Rm'Yk'`j'hi(qg({e(d)b)`)_)^*\*\)\)\)\(,55431-|+y(v'r)p*%m+/k,8j,@h-Gg-Ne.Ud.]c.ea/n_/x^/\/Z/Y/X0V0U0U/U/U.U.1:9876z2u0r.n. k/i0!f1+d24c2=a3D`3K_4R]4Z\4bZ4kY5uW5U5T5R5Q5P5O5O5O4O4O36=<<;{:t7o5l3h4 e5b6`7(^71]8:[8AZ9HY9PW9WV:_T:hS:sQ:O:N:L:K:J:I:I9I9I8J8:@??>w=p;j8f8b9_:\;Z;%Y<.W=7V=>T>FS>MR>UQ>]O?fM?pL?}J?H?G?E?D?D>D>D=D=E<>CBB}As@k?e<`<\>Y>W?U@"SA+RA4PB<OBCNBKMCRKCZJCdHCnGC{ECCCBC@C?C?C?B?A@A@@AEEEyDoDgB`?[AWBTC QDOENE(LF1KF9JGAIGHHGPFGXEGaCHlBHx@H>HCKFBLMALV@L_>LjPC%cG#cQ"d\!didyddddca``_YX{XmXbXYXPYG[>^7`1c*f$i !j jj k(k0k9kBlLlXleltllllkihhg]]u\h\^\U\K^Ba9d2g+j$mps ttt!u)u2u;uFuRu_ un u u ut t s q q pbapadaZaObEe2' $1@Re}o_QC6*  $3DXnшФgWI;.! $6I_x_PB4& %9Og"/;GR[dlsz *6ALV_fmtz $0;FPY`gntz *5@JRZagmsz#.9CLT[agmsz (3=FMU[agmsz!,6?GOU[agnu}   %09AIPV\bipx~}|{{{{  )3<CKQW^dl}t|~z x w u s r p p o o o    # - 6~>|F{MySxZvauhsqq{pnlkihfeeee$$#!|y(v1t:rAqHoOnVl]kdimhwfdca`^]\\\\%*))(%}"yxvro#m-k5i=hDfKeRc Yb aa i_!s]!\!Z"Y"W"V#U#T#T"T"T"+...-|+v(r&o#m! j"g#e$)c$1b%9`&A_&H]&O\'V[']Y'fX(pV(|T(S)Q)P)O)N)M)M)M(N(02221v0p-k+h)f( c(`)^*%\+.[+6Y,=X,DW-LU-ST-[S-cQ.nP.zN.L/K/I/H/H/G/G.G-H-4555{5r4k2f/b._-\.Z/X0"V0+U13S1:R2BQ2IP2PN3XM3aK3kJ3wH4G4E4C4B4B4B4B3B2B28888w8m7f6a3]2Y2W3 T4R5Q5(O60N68L7?K7FJ7NI8VG8_F8iD8uC8A9@9>9=9<9<8=7=7=6;;;;s;j:b9]7X6T7Q8 O9M9K:%J:-H;5G;<F=<=:=9=8=7=7<8;8;8:=>>|>o>f=^=X;S:O;L<I=G>F?"D?*C?2B@:A@A@@I>AQ=AZ@@@xAlAb@[@T?N?J@FADBBC@C?D'>D/:EF9EN8FX6Fb5Fn3F|1F0F.F-F-F-E.D.C.CCCCtChC_CWCPCHCDEAF>G nJnWnenvnmmllkjjZtZfZ\YSYHZ?]6`.c&gjmqt w wwww$x-x7xCxPx^xoxxwvuutt~_n_b^Y^M_Bb9e0h'lptw {~ &0;HWh|weid_cRdGgGNU[agmsz#.7@HOU[`fls{ '1:BIOU[`gmu~ !*3<CIPU[ahp~y|{yxvusssss   $.6>}D|KzQyWw]vdtlsuqonlkihhggg  |y(w0u8s @r Fp Lo Sm Yl aj ii rg ~f d b a ` ^]]]]{xxw sp"n+l3j;iBgIfOdVc]af`o^{\[YWVUTTTT""##"y!sonm jge'c/a7`>^E]K\RZZYbWlVwTRQONMLLMM&''({'r&l$h!fdb_]#[+Z3X:WAV HT OS WQ!_P!iN!tM!K"I"H"G"F#E#E"F"F!*++,v+m*f)b&_$]"[!X"V#T$(S$0R%7P%>O&EN&LL&TK'\I'fH'qF'E(C(A(@(?(?(?(@'@'-./}/q/h.a-]+Z(W'T' R(P)N)%M*,K*4J+;I+BH,IF,QE,ZD,dB-o@-}?-=-<-:-:-:-:-:,:,012y2m2d2]1X/U,Q,O- L-J.I/"G/*F01E08C0?B1GA1O@1W>1a=2m;2{928262524242515150345u5i5`5Y4T3P0L1I1G2E3C3B4'@4.?56>5==5D<6L:6U96_76k66x472717/7/7/6050504667r8f8]7V7P6K4G5D6A7 ?8>8<9$;9,:939::8:B6:J5:S4;]2;h0;v/;-;,;*;);*:*:+9,889|:n:c:Z:S:M:F8B:?;<< :<8=7=!6>)4>03>72??1?G0?P.?Z-@f+@t)@(@&@%@$@$?%>&=&=;<x=j=_=V=O=I=B=<>9?6A4A2B1B/C%.C--C4,D<+DD*DM(DX'Ec%Eq#E"E EEDDC B!A>?t@g@\@S@L@F@>A8C4E0F-G +H*H)H"(I)'I1%I9$IA#JJ"JU JaJoJJJJJIHGGBBpCcCXCPCICBD;E5G0I+K&M $N"N!O O%O,O5O=PGPQP]PkP|PPPPONMME{FkF_GUGMGFG?G7J1L+N&P SU VVV V'V0V9WBWMWYWhWyW W W V V U TSIvJgJ[JQJJJCJ;L3N,Q&T!VY\^ ^^^"^* ^3 ^= ^H ^T^b^s^^^]]\[[NpNbNWNNNGN>O6Q.T'W!Z]`c f gggg$g-g7gBgNg\gmgffeeddczRjS]RTRKRBS9U0X([!_beh kn ooopp'q0q;qHqVqfqyqpoonmmsXeWZWQVFWHRZbiou{ !,8CLT\ciou{ '2<FNV\chnt{!+6?HOV\agmsz %/8AHOU[afls{)2:BIOUZ`flt} #,4<CIOTZ`fnw~|{zxxxxx &.6=C~I}O|Uz[yawiuqt|rqonmlkkkk  | z(x0v8t>sDqJpPnVm]ldjmhwgedca`````| y x usp#n+l3j9i@gFfLeRcYba`j_t]\ZYWV V U U V vqnm m j g e &c .b 5` <_ B^ H\ O[ VY ^XhVsUSQPNMMMMMwoifddb_]![)Z1X8W>VETLSSQ[PeNpL}KIGFEEEEE!"|"q"h!b_\[Z WUT%R-Q4O;NBMHKPJXHbGmEzCB@?>=>>>#$%w&l&c%]$Y"VTS QNM"K)J1I7G>F EE MC UB _@!j?!w=!;!9!8"7"7"7"8!8!&')s)g)_)X(T&Q#O"L"J"H"G#E$&D$.B$4A%;@%C?%J=&S<&\:&g9&u7'5'4'2'1'1'2&2&3%)*},o,d-[,U+P*L(J&G'D' B(A(?)#>)+=)2<*9;*@9*H8+P6+Z5+e3+r1+0,.,,,+,,,,+-*-*,-y.k/`/X/Q.L.H,E+A+?, =,;-:.!9.(7./6/65/>4/E3/N10X00c.0p,0*0)0'0&0&0'/(/(..0v1h2]2U2N1H1D0@/<0:1 71625233%23,13304;/4C-4L,4V*5a)5n'5~%5#5"5!5!4"4#3#213r4e4Z5Q5K4E4@4:374452607/7.7"-8)+81*88)9@(9I&9S%9_#9l!:| :::9988746n7a7W7N7H7B7<75829/:,; *<)<(=&=&%=.$=5#>=">F >P>\?i?y???>>=<<7z8j9^:S:K:E:?:9:2<.>)@&A$B"B!B C#C*C2C:DCDMDYDgDwDDDDCBBA;v<f=Z=P=H=B=<=6>/@*B%D!FH IIII&I.J6J@JJJVJdJtJ J J J I H G G>q?b@V@M@E@?@9A2B+E&G!IKNPPPP!P)P1 P; QF QQ Q_ QoPPPPOONM}BkC]DRDJDCCGOW]ciou|"-7@IPW]chnu| &0:BJPV\agmt| *3;CIOUZ`fmt} $,5<CIOTZ_fmv~&.6=CINTY~`|gzoyzwutrrqpppq !})|0y7x=vCtIsNrTpZobmjktjhgeeddccd~{wurq#o+m2l8j>iDgIfOeVc]be`o_{]\[YYXXXY }v q om kige&c-a3`9_?]E\K[RZYXbWlUxSRQPONNNNtlgec c a^\![(Y/X5V;UBTHSOQVP _N iM vK I H G F E E E E xme_\ZZZ W U S $R +P 1O8N>MEKMJUH^GhEuCA@>====>rg_YUSRR PNL J'I.H4G;EBDICRA[?e>r<:8755667{ m!b!Z!TPMLKIGED$B*A1@8??=F<O:X9c7o5~320///00"w#i$^$V$P#K"H FEC A?>!<';.:59<7D6L4 V3 `1 m/ |-!,!*!)!)!)!* + "%s&e'['S'L&G%D$B!?!=! ;!9"8"6#%5#+4$23$92$A0$J/%S-%^+%k*%z(%&%$%#%#%$%%$%$%'o)b*W*O*I)D(@'=&:%7&5&4'2'1("0()/(0-)7,)?+)G))Q(*\&*i$*x#*!****) )!((|*l+_,T,L,F,A+<+8*5*2+0+ .,-,,,*-&)--(-4'.<&.E$.O#.Z!/g/v////..--+x-h.[/Q/I/C/>.9.4.0.-/+0 )1'1&1%2#$2*#21!39 3B3L3W3d4t44333321.t/e1X1N2F2@1;16111+3(4%5#6 !6 77 7'8.868?8I9U9b9q999888761p2a4U4K4D4=48434-5(7$9 :; <===#=+>3><>F>R>_>o> > > > = = < ;}4k6]7Q7H7A7;75707*9%; =?AC CCCD'D/D9 DC DN D[ DjD|DCCCCBAx8g9Y:N:E:>:8:3:-;'=!@BDFI J J J J#J+J4J>JIJVJeJwJJIIIHHr<b=U>J>B=<=6=/>)@#BEGJL O P QQQQ&Q/Q9QDRQR`QrQQQPPOOl@]AQAGA@@9@2A*C$FHKNQ SVW XXYZ!Z)Z3Z?ZLZZZlZYYXXWWeEXEMEED>D5E-G%JMPSV Y\^_ ` abcd#d-d8dEdTdfd{ccbaa`_JSJJICH9I/L'ORUY ]`cfhij k mnpq&q1p>pNp_psoonmllZOPNHM=N3Q)T X\` dhkortuwx z |}(5EVk~}|{zVTNSBT7V,Z"_ch mrvz} ,;MbzUYHZ;]/a$flr w} !1CWpNa@d3i'nu| %7LdFk9p+w +@XtӒҰ>y1# 3Kd )4?HPX^ekqw~ #.9BJRX^djpv} (2;DKQX]chov~"+4=DKQV\agnv %.6=DJOUZ`fnw'/7=CINTY`goz~|zyxwxxwu !)07}=|CzHyMwSvYtariqsomljihiiii|ywvt#s+q1o7n=lCkHjNhTg[eccmbx`_]]\\\\\xtpm kihf%e,c2b8`=_C^I\O[VZ^XhWsUTRQQQQQR ~ s l heca _]\!['Y-X3V9U?TESKQRPZOdMoL}JIHGGFGG ukc^[ Z Y WUSR#Q)O/N5M;LAJHIOHWFaEmCzB@?>===>|nd\VSQP P OMKI%H +G 1F 8D >C EB M@ U? _= k< y: 8 7 5 5 5 5 6 vi^VPMJIIH F D C!B(@.?5><=C;K:T8^6k4y21/---./qdYQLGDCBA @><;%:+82796@4H3Q1\0h.w,*('&'()}m`VNHC@>=;9865"3(2/160=.F-O+Y*f(t&$"! !"#yi!\"R"J"D!?!< 9854 20/.%-,+3*;)C'M&W$d"r  u"e#Y$O%G%A$<#8#5"3 0 .! ,!+!*"("#'")�%#8##A"$J!$U$a$p$$$$$$##"q$b&V'L'D'>'9&5&1%.$+%)%'&%&$'#' "''!(. (6(>(H)S)_)n))))((('%n'_(S)I*B);)6)2(.(*(&)$*"+ +,,,$-+-3-<-E.P.].l.~.. - - -,,|(j*[+P,F,?,9,4+/+++&,"./0 1112!2(20293C3N3[3i 3z 3 3222 1 1w+f-X.M/C/<.6.1.-.).#02356 7778$8,85 8? 8J 8W 8e8v8877766s.b0T1I1A19141/0+0%2 368:< = = = =! =)=1>;>F>R>a>r>===<<<m2]3P4F4>47423-3'4"68:=? A C DDDD$D-D6DADND\DmDDCCBBBh6X7L8C8;75606)7#9;=@B EGI IJKK K(K2K=LILWKhK}KJJIIIb:T;I;@;9:39,:%<?ADG ILOP P QRTT#T,T7TDTRTcTwTSRRQQ\?O?E?>>7=/>'@ CFIL ORTWXY Z[]^_&_1^=^L^]^q]]\[ZZVDKCCBFLRX]cipx &/7?EKQV\ahpy  (08>DJOUZahq{|{y "*18>CHNT~Z|azixsvusqpoooml ~}|$z+w1u7t=rBqHoMnSlZkbilgxfdba`aaa`|wrp nllk%i,g1f7d=cBbH`N_U]]\fZrYWVUTTTUUunifc a`_^ ]&[,Z2X7W=VCUISPRXQaOlNzLKJIIIIJtjc^[YW VTSR"Q(P-N3M8L>KEJLHTG]FhDuCA@@??@@ y l a Z U R PON LKJI#G)F/E4D:BAAH@P>Z=d<r:9876667 re[SNJH G G EDBA @%>+=1<7;>:E9N7W6b4p210/..-.}l_UNHDA@@ @ > < ; 9 "8 (7 .6 55 ;3 C2 L0 V/ a- o+ * ( ' % % & ' wg[QIC?<:998 7542%1,02/:-B,K*U(a&o$#! scWME@;85432 1/-,"+)*0(7'?&H$S"_ m~o_SJB<741/.,+)(' %&$-#4"= FQ]k|}k\P G ? 941-+)'% $"! #*2:DN[izzgY!M"D"<"6"2!.!* ' $"  !!!"!"'"/"8#A#L#X#g#x# # # # " " !vd"V#K$A$:$4$/#+#(#$# #$%& &&''%','5(?(J(V (d (t ( ('''&&q"`$S&H'?'7&1&-&)%%%"%'(*+ ,,,,",)-2 -; -F -R-`-p--,,,++m%]'O(E)<)5)/(+(''#'(*,.01 1 1 1 1&2.272B2N2\2l2211000h)X*L+A,9,2+-+)*%* +,.024 7 7777"7*838>8J8X8h8|776665c,T.H/>/6.0.+-'-"-/1357 :; <=>>>&>/>:>F>T>d>w>==<<;^0P1D2;241.0)/$02469 ; =@A B CDEF"F+F5FAFOF_FsEEDCCBX4K5A59524-3&4 58:= @ BEGHJ KLNOO%O/O<OJOZNmNMLKKJS9G9>97817)7!9<?B EHJMOQRT UWYZY)Y6YDYTXgXWVUTTN=C=<<5;,<$>ADH KNQTWY[]^` bdgg"f.f<fMe`ewdca`_IBAA:?0@&CFJN RVZ]`cegikmo ruwv&v5uFtYtosrponFF@E5F*H LQV Z_chkoruwy{} +<OfFK:L.O#SX^ diotx| !1D[v?R2U&Z`g mt{ &9Pj7\+ahp x.E_~ɞȾ/i#py #:Tr !+5>GNU[afms{ $.8@HNTZ_ekr{(19@GMSX^dks| !*2:@FLQV\cjs~}| #+29?DJOU[ckv~|zywrpo %,28}={CyHxNvTu[scqnozmljihgedc{xv utsr%p,n2l7j<iBhHfNeUc]bf`r^][ZYYYXXyqmif edcc a&`,^1\7[<ZBXHWOVWT`SlQyPONMMMMMukd`]ZX WVVU!S'R,Q1O7N=MCLJJRI[HfFsEDCBBBCCxjaZURPN M LKJI"H'G-E2D8C>BEAM?V>a=n;~:988899o b X Q LIGFD CBAA?#>)=.;4::9A8I7R6]4j3z210///0 x h \RKE A ? >=< ;:98 6%5+40372>1F/P.Z-g+w*)('''' rcVME@<97 6 6 54210"/(..-4+<*D)N'Y&e$u#"  m^RHA;74200 0 / - , * ) %( +' 2& :$ C# M! X e u       {iZNE=830-+**) (&%$##)!1 9BLXfvweWKB:40,)'&%# "!  '.6@JVdt  saSH?72-)&$"  $+4=HTbr       o^PE<5/*&#! ")1;E Q ^ m k[MB:2-($! !!!!"& ". "7 "A "M"Z"i"|""!! gWJ!@!7"0!*!& "  !#$& & & & &"&*'3'='I'V'f'y'&&%%$c T"G#=$4$.#(#$"!"!"#$&( * ++++,',0,:,E,S,c,v,++**)_#P%D&:&2&+&&%#$$$%')+ -/ 00111#2,262B2O2_2r1100//Z'L(@)7)/))(%'!&'(*,. 024 5 6788 8(829=9K9[8n877655U*H,=,4,-+(*$)*+-/ 1 468:; = >@@@$@.@9@G@V@i@?>=<<P/C/9/2/,-', -/13 6 8;=@ACE FHJJJ(J4IBIQIdH{HGFEDJ3?36301*0#1358 ;>ACFHJLNO QTUU"T.T<TKS^StRQPONE7<756/4&57:= ADHJMPSUWX[] _bbb'b4aE`W`m_]\ZYA<:;49*:!<@C GKOSVY\_acegjm psr r-q=pOoenmkih?@9>.?$BFJ OTX]aehknqsux{~ $4F]v~|z?D3E(HLR W]chmqvz~ )<Rl8K,N SY `gntz 0F`~1U$[aiqy %;TqȒų)biq{ /Ie&0:BIPV\bhov  *3;CIOU[`gnv #,4;BHNSY_fnw~%-4;AFLQW^eny|vsr &-4:?EJPV^f~q|}ywusrnige  }&z-w3u8t>rCpIoOmVl^jhhugedba`\[Z~xsom lkkj h&f,e2c7b<`B_H]O\WZaYmW{VUSRRPOOxngc`]\ [[[Z!X&V,T1S6R<QBOINQM[KfJtIHGFFEEExlb[VSQOO NNML!J&I,H1G7E=DDCLBU@`?n>~=<;;;;<~naXQLIGED CCCB@"?'>,=2;8:?9G8P7[5h4x3211123vfYPIC@><;: :9976#5(4.342;0C/L.W-d,s+*))))*n_ S J B = 9 6543 2110/.$,*+0*7)?(I'T&`$o#"!!!!"{ h Z NE=8 3 0 . - -, +*)('!&'%-$4#="F!Q]lu dUJ@93/,)' ' ' & %$"! $+2:DO\k}q_QF=60+(%#"! !     " ) 1 9 C O \ k ~  m\NC:2-(%"  !(09DP] k |  iXK@70*&" %.7 @ K X gxeUH=4-(#   " ) 2 <GTcuaRE;2+%!   &/8DQ`r^OB8/)#     !#!+!5!@!N!]!o! ZK?5-'" ! " # $%%& &(&2&=&J&Z&l&%%$##UG ;N;`:w98765G);*2*+)%'!&'(*, /1468;=?A CEEE!E,D9DHD[CqBA@?>B-8./-)+$**,. 1 47:<?ADFHJL NPPP'O4OCOUNjMLJIH>251./). .137 :=@DGILOQSUXZ ]_^ ^,]<\N[cZ~XWUT:634-2$369=AEILPSVY[]`behk oon%m4mFk[juhfdb8927(9;?DIMRVZ^behkmpsvy} ,>~T~k{zwu8=,>"AFKQW\bfkotx{~ !3Ib1D%HMSZahnty (>Vs*OT[ bjs{2KfƇ©"[b kt}'?[z ",5=ELRX^djrz %.7>EKPV\bjr|'/7=DIOU[ais{vt  (/6<BGMSYaju|smjh !(/5:@E~K|RzYxbvltyrqomle`^\|zx wxwt!r'p-n3l8k>iDhJfQdZcdap_^]\[WTRQtnjfec ccca!_'],\2Z7Y=WCVKUSS\RhPwONMLKIGG|ne^YWUTS STRQ!O&N+L1K7J=IDGLFVDaCpBA@??>=>ocYQMJHGG FFGED!B&A+@1>7=><G:P9[8i7z6554445teXOHC?=<<; ;;:97!6&5,42391A0K/V.c-s,,++++,l]QH@;74322 2 110/-",(+.*5)=(F'Q&^%n$##""#$weVKB:50-,+*) ))('&%$$*#1"9!C NZi|p_Q F = 5 0 + ( %$## " "!  &.6?JWfxk[ M B 9 1 , ' # !     #+3<GTcug W I>5.($           ! ( 0 : E R a s      c SF;2+%!        ' / 9 E Q ` q      _PC8/(#      $ , 6AN]o\M@6-&!      !)3>KZlXI=3+$     '0;HXjUF:0("     $-8FUg}QC7.&         !!*!5!B!R d zM?4+$  !# %&&&'''2'?&N&`&w%$#"!H<1("  !#%') , ....#...;.J-\-r,+*)(D 8!.!&!  !#%'),.03 5 6666)666E5W5m4210/?$4$+$$#!  !# %(*-/2479;> @AA@%@1@@?R>g=<:98:(0()'#%#$%( *-0368;>@BEGJ MMLL+K:JLIaH|GECB6,-+')#'(*- 037:=@CFHKMPSVY [[Z%Y4XFWZUtTRPO30,.',-/2 6:?BFILORUXZ]`cgk lkk,i=gRfjda_]13,1"259 =BGLPTX[_behknquy} $~5|I{axvsp16&8;@ EKQV[`einrvy|~+@Ys+> AG MT[ahnsy~!5Mi#HNT\dmu| )A\|U\enw6Qn߱  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C"K2TE]Zdqjo˸r±twĴ{ͫԢۙᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚ%0:C"K1TE\[cqimɿpruëxʢ|љؐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ%0:C"K1SE[[argknqsvȚyΒ~ԉ؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉%0:C!K1RDZZ`rejmprtĔwʋ{τԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄ%0:B!J0RDXZ^rdiloprvƆz%09B J/QCWZ\qdiknoqtx{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}$0 9BJ/PBUY[pchkmoqt}ww|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|$0 9BJ-O@SY[ocgjmoqszwt{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{$/ 8AI+M@RXZmbgjmoq{tvwq{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{$/ 8AI(L@QWYkazgknp}sxusxn|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|$/ 8AF(LAPUXfatg~korzuuxq{l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~#- 6 =F*K@OQX`akhtm{qytuxr{n~kւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւ#,/;E+I=NLWXaaiionytruwuqzwn}yk{i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|""':B*F9MEVObV~j\wp`sucoxem|gjhhjfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfk& :>'D3K=UE|aKujOppRluTjyVh|WfXdZc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[ & 6;#A,J4xS:q_?liChoEetGcwHb{Ia~J_J^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8@I+R<\Oedmxsըy̟}ŗŶ̲ү֧~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~"- 7@I+R<[Pddlyrӭwʤzœ~÷ʲҮئڡաաաաաաաաաաաաաա"- 7@H+QG(N9TNYe`{fjmoruxz}tqqqqqqqqqqqqqqq!, 5>G'M8RLWd_zfjloqt|wv|qnnnnnnnnnnnnnnn!, 5>F%M6OLUc_xeiloq~txws{nkkkkkkkkkkkkkkk!, 5>F"K4OLTb^tdimorzttxp{khhhhhhhhhhhhhhh!+ 4 =EI5NLS_]pd}inq{tvwqym}iŁfąfąfąfąfąfąfąfąfąfąfąfąfąfąfą *3 <BI5MJR[]ietj}o|swwszo}lрhЄeχeχeχeχeχeχeχeχeχeχeχeχeχeχeχ )13 B!H5LFQU]`ejlq}qvwvzsy}o|l߀iރg݇e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉%"2A"E3JAQM]Vf^}ndvshrxkn|mlojpgresctctctctctctctctctctctctctctct1>"B/H:PD\K{gQtnVosYlx[i|]g^f_d`baababababababababababababababab 2:?*F3O:x[@qfElmHhsJfwLd{MbNaO`P^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q  05<$|D+sM1lX5gc9ck;aq=_u>]y?\|@[AZAYBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>F%P4ZEdWmiw{}ٖюˈǂ~zwuµqórrrrrrrrrrrrr* 5=F%O4YFcXlku}ߣ{՛͒Nj…|ùyǵvʭuƫvīvīvīvīvīvīvīvīvīvīvīvīv* 4=F%N4XFaYjlsݨxӟ~ʖĎŷ˴|ϫxϥyȤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤy* 4=E%N4WF`YimqܬvФ{Țŷ˴βѤ|џ}ʞ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}* 4<E$M4WF_YgnoڱtϨyş}Ƶ˯ϪҞә̘ʘʘʘʘʘʘʘʘʘʘʘʘ* 4<E$M3VF^Zfomٶsͭwĥ{Ʈ̨ϢҙӔ͓˓˓˓˓˓˓˓˓˓˓˓˓* 3<E$L3UF]Zeolػq̲uí|ƨˡЛӔԏΏˏˏˏˏˏˏˏˏˏˏˏˏ* 3<D#L3UE\ZdojoʹtzƢ˛ϕҏԊΊ̊̊̊̊̊̊̊̊̊̊̊̊* 3<D#L2TE\Zbphmżsx}ŝ˕ϏҋӆΆ̆̆̆̆̆̆̆̆̆̆̆̆) 3;D#L2SEZZ`pflqw|ŗʐΊхҁ΁́́́́́́́́́́́́) 3;D"K1RDYY_pdjoty}Ðȉ̃~}|||||||||||||) 2;D!K1QCWY]ocimptx†}ƀzvvwwwwwwwwwwwww) 2;C K/PBVW[nchlnqt~xw|rmmnnnnnnnnnnnnn) 2:CJ.O@RWZmbgknqtywt{njgfffffffffffff) 1 :BJ+L?QVYka|gknq{tuxp{lhdccccccccccccc(0 9BG(L@QUXhawglo~sxvryn|ifbaaaaaaaaaaaaa'/ 8 AF*L@PSWcapg{mqzutyp|lh̃dˈaʍ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ&-4<F+J>OOW\ahhqnx{s}uxq{mjڃgنd׋a֐`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց#&)<D+H;MIWTa]je|pjvvnqzqm~tkvhwfycza|`|`|`|`|`|`|`|`|`|`|`|`|`|( ;A)F6LAVKaR{kWtq\ov_l{aicgdefcgah_i_j_j_j_j_j_j_j_j_j_j_j_j_j ) 9>&D0K9T@xaFrjJlpMivPf{QdScTaU`V^W]X\X\X\X\X\X\X\X\X\X\X\X\X\X )4:!A)zI0rR6l^:hh=do@atA_yC^}D]E\E[FZGXGXHXHXHXHXHXHXHXHXHXHXHXHXH* 06w>"nG(fP,aZ/]d1[l3Yq5Xu6Vy6V|7U7T8S9R9R9R9R9R9R9R9R9R9R9R9R9R9R9) 5;D!N-YFI3NIT]\nc}imq{usxn|ieb_^^^^^^^^^^^^$,4 =BI3NHRZ[icvio~swwq{lhʃdɈaǎ^ƕ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ#*25 BH4LFQU[bdmkvp}yuszn~kׂgՆdԋaӐ^і\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ!&%3B!G3KBPO[Zecljzrptxto|wlzh|f}c`^ߖ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ3@"D0I=PH[PeWzm]tsaoydk~ghifjdlbm`n]p\q\q\q\q\q\q\q\q\q\q\q\q 3< B,H6O?ZFxeKqmOlsRiyUf~WdXbYaZ_[^\\][^[^[^[^[^[^[^[^[^[^[^[^  39?&F.zN5sX:mc?ilBerDbwF`|G_H]I\J[KZLXMWMWMWMWMWMWMWMWMWMWMWMWM! .4; vC'mL,fT0b`3^i5\o7Zt8Yy9X}:W;V;UR>R>R>R>R>R>R>R>R>R>R>" )~0s8i@bI#[Q&WZ(Ub*Ri+Qo,Ps-Ow.Nz.N}/M/L0K0K0K0K0K0K0K0K0K0K0K0K0K0(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(39BK'V4aBmPw]hr냒{}xtronlk›iʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜ'28AJ'T4_CjQt_~l펈x燏―{wtqomlægæiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡ'1 7@I'S4]ChSrb|pꔅ}㋋݄~zuromikmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥ'0 7@H&R4\DfTpdys瘂ߏوҁ{vspmknppppppppppp&0 6?H&Q4[DdUnewvܔԌ΄}xutpoqsssssssssss&/ 6?G&P4YDcUlgux|٘ѐʇł|ztrtvvvvvvvvvvv&. 6>G%O4XDaVjhszz͔֝ƍ}yvxyyyyyyyyyyy&. 5>F%N3WD`Vhip{ުwП|Ǘ~y{}}}}}}}}}}}&- 5>F$M3VD_Vgin}֬sʣz~&- 5=F$M3UD]Vej߸k~ЯqŦx~%, 5=E#L2TC\Vcjڻi~̲pv|‹Š%, 4=E#L2SC[VajԿh~Ƕntz†„%, 4<D"K1RBYU`jf}¹lrx~€%, 4<D!K0QAXT^ie|kpv|}{yzzzzzzzzzzz%+ 3<D J.P?VS]hc{iotzzwtsttttttttttt$+ 3 ;CJ,O=UQ[gbzgmrx~ytpnmnnnnnnnnnnn$*2 :BI)L;SQZe`xfkpv|xrmjgghhhhhhhhhhh#)1 :BG%K;QPYc_tejosuxn}iea__bbbbbbbbbbb!(08 @E&K;OOW`_of|lqzuszlgDŽcƊ_đ\ęZäZİZİZİZİZİZİZİZİZİZİZİ &.3<E(J;NLV[_hgsm|~rvxp}kԂf҇cь_ϒ\ΙY΢XͫXͫXͫXͫXͫXͫXͫXͫXͫXͫXͫ#&);D)I:MHUU_`hhopxuurzym}ie߉bݎ_ܓ]ۙZڡX٨X٨X٨X٨X٨X٨X٨X٨X٨X٨X٨) ;C(G6LCUM_Vi]ypbsvgn|jjmgodqar_t]uZwXxXxXxXxXxXxXxXxXxXxXx ) ;@&E2KG"R-]:iGtS~_ir}yxtpmkjiȓfϕdѓeԎeԎeԎeԎeԎeԎeԎeԎeԎeԎ&0 5=F!P-[;fHqV|bmw耕zuromkiɞeɞg͘iѓiѓiѓiѓiѓiѓiѓiѓiѓiѓ&/ 4=F!O-Z;dIoXyeqꋌ|䃒}xtpmkf§hƢj˛lΖlΖlΖlΖlΖlΖlΖlΖlΖlΖ&. 4<E M-X;bJlYvhu珉ڀzupmkhkæmȟo̙o̙o̙o̙o̙o̙o̙o̙o̙o̙%- 3<D L-W;`KjZtj~y䓆܋Ճ|wtspknpƢrʜrʜrʜrʜrʜrʜrʜrʜrʜrʜ%, 3;DK,U;_Kh\qlz|ߗՎͅǀ{xvupqtĤuɞuɞuɞuɞuɞuɞuɞuɞuɞuɞ%+ 2;CK,T;]Kf\onvՙ}̑Ŋ|zytuwæyǠyǠyǠyǠyǠyǠyǠyǠyǠyǠ%* 2:BJ+S;\Kd]loۥsΝzŕ~}zy{|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ%* 1 :BJ+R:ZKb^jpөpȠw~}ţţţţţţţţţţ$) 1 9BI*P:YKa^ܵgqάoäu|ĥĥĥĥĥĥĥĥĥĥ$) 1 9AI)O9WJ_]ֹfpɰmszææææææææææ$) 0 9AH(N8VJ^]Ѽeoijkqw~ææææææææææ$(0 8@H'N7UH\\̿coipu{~{}}§}§}§}§}§}§}§}§}§}§$(/ 8@G&M5TF[[bnh~nsz~zxuwx§x§x§x§x§x§x§x§x§x§#'/ 7?F#L2REYZ`lf|lrx~}xtqopr§r§r§r§r§r§r§r§r§r§"'. 6>F K.PDXX^kezjpu|}vqmjijkækækækækækækækækækæ &-5 =DH-OBVV]hcxhnt}zvpkgecdeŤeŤeŤeŤeŤeŤeŤeŤeŤeŤ%,3 <@H.MBUT[eatfl~rvyoƁjʼneŒbĝ_ħ]Ĵ^Ĥ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ#)14 AG.LASRZaanhynzur|k҂eψ`͏\̗ZˠX˫W˺Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙ %$2 @G/K?QNZZbejn}ruux{o~i݄dۊ`ّ]ؘZ֠X֨VմTTTTTTTTTT1@E.JC+H7OAYI}cPwmVptZkz^hadcae_g]hZiXkVlTmTmTmTmTmTmTmTmTmTm 2;A'G1N9zX?sbEnlIisLfzOcQ`S^T\UZWYXWYUZT[T[T[T[T[T[T[T[T[T[Ϳ!17>"}E)uM0nU5i`9ej_w@\~BZCYDWEVFUGSHRIQJQJQJQJQJQJQJQJQJQJϸ#-3y;pC"iJ'bR*]\-Ze0Xm1Vs3Ty4S~5R6P7O8N8M9L:K:K:K:K:K:K:K:K:K:K:"( v/m7e?^GXN!TW#Q_%Ne&Ml'Kq(Jv)I{*H*G+F+E,D,C-C-C-C-C-C-C-C-C-C-t# i*`2Y:SBNIKQHXF]DcCgAl@p?t >x =| qJ}U^g{nvsrxo}ligƆeψb׊aوb݂ccccccccc}y&|. 2:CL'X3c?nLzWbk~syztpljhƏfђbђdՌeۆf݂f݂f݂f݂f݂f݂f݂f݂f݂}z&, 1 :BK&V3a@lMvZfp삔y{uqmkișd˛eΗgґh؊iۆiۆiۆiۆiۆiۆiۆiۆiۆ~{&+ 1 9BJ&T3_AiOs]~j쌈u煑~xrmlkŠgǠh˛jДlՍlىlىlىlىlىlىlىlىlى~{%* 0 8AI&R3]AgPq_{m參zއ~xtqonkţkȟm͘oґp֌p֌p֌p֌p֌p֌p֌p֌p֌|%)/ 8@H%Q2[AdQnavpܑ~҉˂}xusrpæoƢq˛sГtԎtԎtԎtԎtԎtԎtԎtԎtԎ|%(/ 7?G$O2YAbRkbޞrsҕzʍÇ}ywvvsåuɞwϖwґwґwґwґwґwґwґwґwґ}%'. 6?G#N1WA`Rhd֢pt̙wÒ~{zywyǠz͘{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ~$&. 6>F#M0V@^RݮfdХnsƝu|~}{}Ƣ~̙ДДДДДДДДД~$&- 5=E"L0T@]Qײdc˩lsszŤ˛ϕϕϕϕϕϕϕϕϕ$%- 5=E!K.R?[Qѵccƭjrqw~ĥʜΗΗΗΗΗΗΗΗΗ#%, 4 <DK-Q=ZP͸abhqo~u|æɝ͘͘͘͘͘͘͘͘͘"$,3 <CJ+Q;XOȼ`agpm}sy|zzæ{ɞ|͘|͘|͘|͘|͘|͘|͘|͘|͘!$+3 ;BI(O9WN^`eok|qx~}xussæuɞv͙v͙v͙v͙v͙v͙v͙v͙v͙ #*2 :AH%M8UL]^cnj{ov|{vqnlmæoɞp͘p͘p͘p͘p͘p͘p͘p͘p͘")08@F K6TK[\blhxnsz{uokhffŤhʜi͗i͗i͗i͗i͗i͗i͗i͗i͗!'/6 >CJ4RHZZ`ifvlr{xtnieb`_Ša̚bϕbϕbϕbϕbϕbϕbϕbϕbϕ %+18C I3QFXW^edrj||ptwn~hÇc_\[³ZŚ[ϕ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ!"%7C"H3ODVS]`ck~juup}nwgbЇ^БZМXЧVеUǑVԎV֋V֋V֋V֋V֋V֋V֋V֋V֋&7B#G2L@UM]Xeaylirtol|tgxb{^~[XߧUޱS޾R҃Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂ &8@"F0K!D,J5S>y]ErfJmoNhvRd~UaW_Z\[Z]W^U`SaRaPbPbPbPbPbPbPbPbPb ָ ) 5;B&}I.uQ4o[:ie>enAbuD_|F\HZIXKVLUMSNQOPPOQOQOQOQOQOQOQOQOQگƼ+ 18y@ pG&iO+cX/_b2\k4Zr6Xx8V9T;RN>M?K@JAJAJAJAJAJAJAJAJAȵ & -u5l=eD^L"XT%U]'Re)Pl*Ns+My,L-J.I/H0G0E1D2C2C2C2C2C2C2C2C2C2 }!r( h0`8Z@THOOLWI]Gc Ei Do!Bt"Az"@#?$>$=%<%;&;&;&;&;&;&;&;&;&znd# \+ U3O;IBFIBO@U>Z<_;d9h8m7r6w5|43222222222pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl(k1 u6 {<FP!^*~k3{x;xBuHrMpQmTkWiZg\e^b_`a^b\c[dZdZbZbZbZbZbZbZbZbqm(n0 x4 ;DN![+h4u=|EyLvRrVoZm^jahcfecgai_k]l[m\h\g\g\g\g\g\g\g\grn(q. {2 :CL!Y+e5r?~H|PyVu\r`ndlhikgmdpar_s\t\q^l^k^k^k^k^k^k^k^kso't-~1 9BK!V+c6oA{KS|[xatgpkmojshvexbz_|]{_v`p`n`n`n`n`n`n`n`ntp'v+/ 8@I!T,`7lCwMW`zgvnrsnxk|hf͂b؄_܅`azctcrcrcrcrcrcrcrcrtp&y*. 7?H R,^8iDtP[e}nwur|njgeʍbԎb؊c܄e~fxfvfvfvfvfvfvfvfvuq&|(- 6>G P+[8fEpR{_ꅅj~tx}rmjhhÑgђeԏgىh݂i|jyjyjyjyjyjyjyjyvr&', 5=FN+Y8cFmTwboڀ{zuqnlkk˕iДkՍlۆmm|m|m|m|m|m|m|m|vs%&, 4<DL*W8aGjVre،{sυ|zvspooĘm͘oӐp؉qނqqqqqqqqwt%%+ 3 ;CK)T8^GgWڙogϑxsNJ}zwtsrr˚sГt֌u܄uށuށuށuށuށuށuށuށxv$#*2 :BJ(R7\GޥdXѝmfȕus|}{ywvwʜwϖxԎxۆx݃x݃x݃x݃x݃x݃x݃x݃xx##*1 :BI'P6ZFةcW̡kfšrrz|}{{{ƞ{͘|Ӑ|و|܅|܅|܅|܅|܅|܅|܅|܅yz"")1 9AH&O4ߴYEҭaVǥieprw|~ž̚Ғ؉ۆۆۆۆۆۆۆۆy{!"(0 8@G$N3۸WDͰ`V©gdnqu{|˛ѓ؊ڇڇڇڇڇڇڇڇz} !(/ 7?F"N0ռVCȴ^Ufclps{z~~ʜД֋ووووووووz!'.6 >EL/пTBķ]Sdbjoqzw~}zxwʝyϕy֌y؉y؉y؉y؉y؉y؉y؉y؉{ &-5 =DI.SA[Rbainoxu|{wsqpȝrϕsՌt؉t؉t؉t؉t؉t؉t؉t؉|%,3 ;BH,R@ZQa_glmwtzzupljiślДm֌m؉m؉m؉m؉m؉m؉m؉m؉}#)18 :F*P>XO_]ejktq}xztnifcbØeѓf֋gىgىgىgىgىgىgىgى~!&,19D(N;VL]Zcgiqoyzvs}mhc`^\”^Ӑ_ى`چ`چ`چ`چ`چ`چ`چ`چ  ,;D%L8TI[Wachl{nusu{l|gb^ZXWX׋Y܅Y݃Y݃Y݃Y݃Y݃Y݃Y݃Y݃,;D%K5RDYR`]|fftmnlttf|yaͅ}\̎Y̙V̥T̳SąS݃S~T}T}T}T}T}T}T}T} , <C%H3P@YK~`Tvh\oobhwhcl^ވpZޑsWޛuTާwRߴxPxOxOuOtOtOtOtOtOtOtOt۸ - ;A$G/N:~XCwaJpiPjqUeyYa\]_ZaWcUeRfQgOhNhMhMhMhMhMhMhMhMh ݮ̼ / 9?!F*|M2uW9n`?iiCdqGayJ]LZOXQVRSTQUPVNWMWLWLWLWLWLWLWLWLWδ / 6=xD$pL*jT/e^3ag7]o9ZvV?SAQBPCNEMEKFJGIGIGIGIGIGIGIGIGѮ"+ ~2u:lBeI"_Q%ZZ(Wc+Tk-Rr/Py0O1M2K4J5H5G6F7D8D8D8D8D8D8D8D8D8{' q.h6a>ZFUMQUN] Kd"Ik#Gq$Fx%D&C'A(@(?)=)<*<*<*<*<*<*<*<*<*wm"d* \2U9PAKHHOEVB\@a>guEqKoPlTjXh[f]d`ab^c\e[fZc[`][][][][][][][][ie(n+x. 6?HS%`/l8|yAxItPqVnZk_hbfedhbk_m]n[m\h^d________________jf(q){, 5 >GP%]/i:uD|MxUs\oblgikfocrau`w\x^r_m`hbcbcbcbcbcbcbcbckg't'+3 <EN%Z0f;qF|Q|Zvbqilphudzb~aa_~awbrcmdgdgdgdgdgdgdgdglj&w&*2 ;CL$W0bF M-X<٠aL͘jYőreznv}}ywuttƏu֋v݃v|vtvtvtvtvtvtvtvtou%-5 =EL+߫W;Ҥ_KȜhYodwnv}~{yxxzՍzۅz~zvzvzvzvzvzvzvzvpv%,4 <CK)گU:ͨ^J fXmdun|v}~}}ӏ~ڇ~~w~w~w~w~w~w~w~wpx$+2 :BJ'ԳS9ȫ\IdWkcrmyu|Αو߁yxxxxxxxqz#)1 9@ݼH%϶R8ï[HbVjbplwu~||{ˑ|؉}ނ}z}y}y}y}y}y}y}yq|"(/7 ?F$ʺP7YGaUhankut|{|xvtȑv؊w݂wzwzwzwzwzwzwzwzr &-5 <D#ŽO5XF_Tf`mjsszzzuromŐp؊p݃q{q{q{q{q{q{q{q{s$*15B!M4VD^Rd^khqqxx~ytokhgŽi؊j݂k{k{k{k{k{k{k{k{t %*2 AL1TB\Pb\ifonvuy}{smheb`bوcށezezezezezezezezv0 ?J/R?ZMaXgbmkytqr{wl|gb^\Z[ڄ]^x^x^x^x^x^x^x^xz / =H,P;XI_Te^ylfrrlkzrfvaz\}YWUUVzXuXtXtXtXtXtXtXt 1 =F'N7VD]OzdXrj_kreeyj`ɂo[ɋrWȖuTȢwRȯxQxPwQsRoRoRoRoRoRoRoRo ߮м 1 =D&L3T>{\GscOkjVer\`z`[كdWٌgSٗjP٣lNٱmMmLlMjNgNgNgNgNgNgNgNg Ѵſ"3;B$I.{S6s\>ldDglIbtM^|QZTVVSYQZN\M\L]K]J\J\J\J\J\J\J\J\Ԭŷ$2:A xH'pP.jZ4ec8`k<]t?Y|BWDTFQHOJMKKLJMIMHMHMHMHMHMHMHMHMڣDZ'/ }7t?lG fN%`W)\`-Yi0Vq2Sx4Q6O7M9K:I;HD>D>D>D>D>D>D>ˬ$z, p4h<aD[KVS S["Pc$Mk&Ks'Iz)H*F+D,B-A.@.?/>0>0>0>0>0>0>0>0 v l( d0 ]8W@QGMNJVG\DcBi@p?x=; :!8"7"6#5#5#5#5#5#5#5#5#} rh_#X+ Q3 L: GACH@N=T;Z9_7e5k3r1z/.,+********xn cZRK$F,A3 <: 9@ 5E 2J 0P .T,Y*^(d&j%q#x" \"W-X3_6 c= eFfPe^dn"a|'_+^.\1[3Z5Y6X7X9W9V:U;TU>T?S?R@R@R>R>R>R>R>R>R>]!X,\0d3 h: kClNlZjj$gx)d.b2a6_8^:]<\>[?ZAYBWCVDUDTETETDTBTBTBTBTBTBTB^!Y,_.f2 l8 oAoLqWng%ku+h0e5d9b<`>_A^B]D\FZGYHWIVJUJUJVGVEVEVEVEVEVEVE^!Y+b-j0o6 r@tJuUrd&or-l3i8fxHyRw`'tn.p{5m;jAgEeIcLaN`Q^S]U[VZXXYYVZS[O[M[M[M[M[M[M[M` ])h)q+x3 |<}F~P}](yj0uv8q?mEjKgOeSbV`Y_\]^\`ZaZ`[[\W]S^Q^Q^Q^Q^Q^Q^Qa`'k&u)|1 :DMY(f2zr;u~CqKmQiVf[c_`c^f\i[kZk\f^a_\`XaUaUaUaUaUaUaUbc%o$y(0 9BKV(b3n=zyGuPpXk^fdci`m_o^p^q]q_kafbac\cXcXcXcXcXcXcXcf#r"}'. 7@IS(_4j?tKx~Ur^mejjgmepcsbtauavcqdjeef`g\g\g\g\g\g\g\ch!u %-5 >GO([4fAoN}yXw`sgollpisgvfxeyeyfvhoiiicj_j_j_j_j_j_j_dk x$,4 <EM'Y4bB׉lN΃uX}~axhtmprnulxj{i|i}jzlrllmfnbnbnbnbnbnbnbem{#*2 ;CK%V3ږ`AώiNLjrXza}hynusrwpzn}m~mn~pupoqhqdqdqdqdqdqdqdeo~")1 9AI#ޡT1Қ^@ȓgMoXwah}nzswxt{s~qqr؁txtqukufufufufufufuffq!(/7 ?H ئR0̞\@×eMmWta|hn~t{xy|wvuvтxzxsxlxhxhxhxhxhxhxhgs &.5 =߯FҩQ/ǢZ?cLjWr`yhntx}||zzz̓|||u|n|i|i|i|i|i|i|igu%,4 ;۳DͭO.æY>aKhVp_wg~nsx|ʄ}vojjjjjjjhx#*19 շBɰN-W=_JgUn_uf|msx|}{yDŽz{w{p{k{k{k{k{k{k{kiz!'.޽5 к@ĴL,V;^IeTl]sfylrw|{wtrăttxuqvlvlvlvlvlvlvlk}#)0 ˽?J*T:\GcRj\qdwkq~vy{t~pmkmnxoqplplplplplplpln!-=I(R8ZEaQhZobui~|oxtsyn|jgeehxiqjljljljljljljlq+;G&Q6XC`NfXm`~sgwzlrrlvhyd|`}_~^}avbpclclclclclclclt (9E#O3W@^KdT~k\wqcqxikmfrau]x[yYyXyZs\n]j]j]j]j]j]j]jy ܮһ %6B L/T<\GbPwiWpp^jwceh`l\oXqUsSsRsToVjWgWgWgWgWgWgWg ҳɾ#3 @J*R7ZAxaJphQjoWdv\_`ZňdVĒgSĞiPĬjOļkNjOhPdQaQaQaQaQaQaQa Ԫȶ %5 >H%P0xX:p_BigIcnO^vSYWUӉZRӓ]OӠ_Mӭ`KԾ`J`K^L\LZLZLZLZLZLZLZڢʯ (4=D"wN*oW2i_8cg=_oBZwEVISKPNMPKQIRHRHRHQHOHOHOHOHOHOHOͩ *3|;tClK#fT)a]-]f1Yn5Vv7S:PK@IAGBFCECDCDBDBDBDBDBDBDBѢ (y1 p9iAbI\P WY#Tb&Qj(Os*L{,J.H/F1D2C3A4@4?4?5?5?5?5?5?5?5Ī~u%l- d6]>XERMOUL\IdGkDs B|"A#?$=%;&:&9'8'8(8(8(8(8(8(8(zpg!_)X1 R9 MAIHEOBU@\=b;i9p7y5320//.......vlbZS$M+G3 C: ?A ;G 8M 5S3X1^/d-k+s)|'%$#"""""""~pg] TMGA$<+72480=-C*H (M &R $W "] c k s |          R%M/Q2W5Z< [EZOY]XmV{U"S%R'Q)P*P+O,O-N.N.N/N/M0M0L0L0L/L/L/L/L/L/L/S$M/T0Y4]: _C^N]Z[jZy!X$V'U)T+S-R.R/Q0Q1P2P2O3O3N4N4M4N2N2N2N2N2N2N2S$N.V/\2`8 bAbL`X_h]v"[&Y)X,V.U0U1T3S4S5R6R7Q7Q8P8O8O7P5P4P4P4P4P4P4T#P-Y-_0c6 f@fJeUceas#^(\,[/Y1X4W5V7U8U9T:T;SkHjShafp%c}*`/^3\6[8Z:XW?VAUBUCTDSDTAU?U\A[CYEXGWHVJVKULVJWFXCY@Y?Y?Y?Y?Y?Y?W"Y'c&k(q0t9 uCuMuY!qg)mt0j6fHR!~_+yk5su>nFiMeTaY_\]_\a[b[cZc\`_Z`UaQbMbKbKbKbKbKbKY!b nx#+3 <EN![+~f6xpArzKmRiXf\d_bb`d_f^g^h_fc_dYeUePeOeOeOeOeOeOZ eq|")1 :CL X+b7~lCxvLsSoYk^ibfeehcjbkblbkfdg]hXiSiRiRiRiRiRiR[ gt '/7 @IU*ۊ_7фiC}rLx{TtZq_ndkgijglfnfofojhkal[lVlUlUlUlUlUlU\jw%-5 >FޖR)Ґ\7ʉfBÃoL~wTy[u`rephmllnkpjqjqnkodo^pXpWpWpWpWpWpW^lz#+3 ;EכP(̔Z6čcBlLtT~|[z`wetirmppornsosrnsfs`sZsYsYsYsYsYsY_n}")09 ޥCџN'ǘX5aAiKqTy[`|eyjvmuqssstsuvpwhwbw\wZwZwZwZwZwZaq &.6 ة@̣L&œV4_@gJoSvZ~`e}j{nyqxtwuwvzr{j{d{]{\{\{\{\{\{\cs#*2Ҭ>ǦK$U3^?eJmRtY{`ejn~q}t|v}|v}~ske~^~]~]~]~]~]~]eu &۴.ί=êI#S1\>dIkQrYy_dinq|tyvwvvtylyfz_z^z^z^z^z^z^gw!շ*ɳ;H"R0Z=bGiPpXw^~di~myqvsrupvousmsft`t_t_t_t_t_t_izݹϺ(ķ9F P/X;`FgOnVu]|c}hxlsporltjuiulmmgn`n_n_n_n_n_n_l} տʾ&7DN-W9^DeMlUs[|zawfrjmniqfscsbsflgfh`h_h_h_h_h_h_o ڭ Ӹ #5BL*U7\AcJjR|qYvx^pckggkcn_p]p\p_kaeb`b^b^b^b^b^b^s ۥѱ˻ 2 @J'S4Z>aG|hOuoUovZj}_ecag]jYkWlVlXhZc[^\]\]\]\]\]\]x ߜҩɴ¾/ =H#Q/X:|_CufJomPitUd|Z_^[aWdTeRfQfRcT_U[VZVZVZVZVZVZ~ ֡ʭ +:EN*}V4u]=neDhlIcsN^{SYVUYR\O]M^L^L\NYOUPUPUPUPUPUPUݘͦ (7B}K$uT-m\5gc*=+;+;+:+:+:+:+:+:+:+~wog&`/Y7 T?OGKNGVD]Bd@l=u;~9765332 2 2 2 2 2 2 {r jaZ"T*N2I: EA AH >N;U8[6b4i2r/{-+*)('''''''zmd\TMH$B,>3:96@3E0K .Q +W )] 'd $l "v yk_VN GA<7$2*/0+6';%@"E JPV\dmw         I'D1K1P4R:RC QNO\MkLyKIHH G!G"F#F#F$F$F%F%F%F%F%F%F$F#F#F#F#F#F#I'F/M/R2U9UB TMRYPhOwNLK!J"J#I$I%H&H&H'H'H(H(H(H(H(H'H&H&H&H&H&H&J'H-P-U0X6Y@ XKUVTfRtQO!N#M%M&L'K(K)K*J*J+J+J,J,J,J+J)J(J(J(J(J(J(K&K+R+X.[4]> ]IZTYbWqU~ S#R&Q(P*O+N,N-M.M/L0L0L1L1L1M/M-M+M+M+M+M+M+K&N)V)\+`1b; bF`Q^_\mZz#X&V)U,S.R0Q1Q3P4O5O6N7N8N8O5P3Q1Q/Q/Q/Q/Q/Q/L%Q'Z&`(e/h9 hCgNeZbh _v%]*Z.X1W4U6T8S:R;Q=Q>P?P@Q>S;T8U5U3U3U3U3U3U3M$T$]#e%j-m6 n@mKkVhd!eq(b}-_2\6Z:X=W@UBTDSFRHQIRHTDV@X=Y:Y8Y8Y8Y8Y8Y8N$X!a j#p+s4 t>tHrRo_#kl*gw1c7`=]AZEXIVLTNTPTPSQTNWJZE\B\>\<\<\<\<\<\HT"~_.xi8ss@n|GkLhQeTcWbZ`\`^_^__bYeSgNgJgFgFgFgFgFgFWdp{"*2; DފQ!Ԅ\-~f8xoAtwHpMmRjVhYf\e_d`cacbe]iWjQkLkIkIkIkIkIkIYgs~ '/8 B֏N ̉Y-Ńc7}k@ytHu|NrSoWm[k^i`hcgdgdiamZnTnOnKnKnKnKnKnK[iv$,4ܚ?ϔLƎW,`7i@~qHzyNwStXq\o_mbldlfkfmdq\rVrQrMrMrMrMrMrM]ky!(0՞=ʘJT+^6f?nG~vN{}SxXv\t_rcqepgpgpft^vXvRvNvNvNvNvNvN_n{#ݥ+ϡ;ŜHS*\5d?lGsMzS}Wz\x`vcufthththx`zYyTyOyOyOyOyOyOap~ר(˥9FQ)Z4b>jFqLxRW\}`{czf}yh{yizyi||a~~Z~}U~}Q~}Q~}Q~}Q~}Q~}QcrߪѬ&Ǩ7 DO'X3`=hEoLvR}W[_~czfw~hu~is~ivbx[xVyQyQyQyQyQyQeuٯ̯$«5 CN&V1^;fDmKtQ{V[|_xbteqhnimiocr\sVsRsRsRsRsRsRhx ޠ ֩ Ҳ Dz"3 AL$U0]:dBkIrPyU{Zv^rbnekghhghicl\mWmRmRmRmRmRmRk{ ֣Ь ˵ 1 ?J"S.[8b@iHpNzwSu~Xp\l`hcdebf`fbbe\gWgRgRgRgRgRgRn ٛϦɯĹ/=H Q+Y5`>gEznKtuQo|UjYf]b`^b\cZc[`_[`VaRaRaRaRaRaRr ߓџɪ,:EO(W2^:yeBslHnsMizQdV_Y\\X^V_U_U]XXZT[P[P[P[P[P[Pw֘ˤ(7CL$U.y\6rc=mjCgqHbyL^PZTVVSXPYOYOXQTSPTMTMTMTMTMTM}ߏΝè#3 ?IyR(rZ0ka7fh.=.=.=.=-=-=-=-=-=-şztm f*_4Z= TEOLLUI]FeDnAw?=; 9!8"7"6"6"6"6"6"6"6"6"wo g`Z'T0O8J@ FH CO@V=^;e8n6w420/.-,,,,,,,uia [TN"I+D2@:+C(I%O#V!]eoz           ugXNHA ;61-")(%-"28=BHNU]g r }        ?*?0D0H3I9HBFM E[CiAw@?>>====<<<<<==========@*A.G.J1L7K@JK HYFgDuCBAA@@??????????@@@@@@@@*C,I,M/O5P>NI LVJdHrGFEDDCCBB B B!B!B!B!B!C CCCCCCCA)F*L)Q,S2T<TG QRO`MoL|JIHG!G"F#F#F$E%E%E&E&E&E&F$F#G!G!G!G!G!G!B(I'P&U(X/Z9ZD WOU\SjQwON!M#L%K&J'J)I*I*H+H,H,H,I*J(J'K%L%L%L%L%L%C(M$T#Z%^,`6`A ^L[WYfWrU~"S%Q(P*O,N.M/L0L2K3K4J4K3M0N-O+P)P)P)P)P)P)F%P!X _!d*f3f= eHbS`a]m Zy%X)V-T0R3Q5P7N9N;MR@QAPBPCPDPCR?U;W7X4Y2Y1Y1Y1Y1Y1M W`io%r-t7sAqKnXjd$en+ay3^8\IS'[0b8i>pDxI~MzQvUrXoZl\k\kYnRqMrHrGrGrGrGrGf u܏Ҙ̡Ȩ-<GQ%Y/`6g=nC}vHy}LtPpTlWiYf[e[eYhRkMlHlGlGlGlGlGi x֒͜Ƥ+:EO#W-_5f;}lAxsFs{KnOjRfUcX`Y_Z^XbRdMfHfGfGfGfGfGl|ފЖȟ(7 CM!U*\2|c9wj>rqDmyHhLdP`S]UZWYWXV[P]L_G`F`F`F`F`Fp֏ʚ$4 @JS'|Z.va5ph;ko@gwDbH^LZOWQTSSSRRUNWJYFYEYEYEYEYEuϓğ 1=H|P"uX*o_0jf6em;`u?\~CXGUJQLOMMMMMNIPFRCRBRBRBRBRB|׌ș ,: {DtNnV$h]*cd0_l4Zt9V|K=K=K=K=K=͒&z5sAlJfSa[#\b(Xj,Tr0P|3Mņ6JĒ9Gğ;EĮ#<$;$:$9$9#9$9$9$9$9$9$~si d_ Y+T5O>KF GN DWB_?g=p:{8653211111111~qe^ YSN'J0E9A@>H;O 8W 6^ 3g 1p .|,+)(''&&&&&&~pdXR MGC">*:2793?0F-M+T([&c#m!y            ~pcUKF@;73#/)+0(5%;"AGNU^htpbTF?94 /+'#!%*/4:@FN V `lx6-9.>.@2@8>A@J>W *C*F-G2F<EHCU Ab ?p=}<;;::::99999::::::::::9+A'F'J)K/L9KEHQ F^DlByA@@??>>>>==>>>>???????=(E$J#N%Q,R6QAOM LZJgHtGFEDCCBB B B!A!B"B"B CCDDDDDD@%H!O S!W)Y3X>VI RUQcOoM{KJI!H"G$G%F&F'E(E)E)F(G&H$I"I IIIIIC"LSY]&_0_:]E ZPX^UjSvQ!O$M&L)K+J,I.H/H1H1H1I.K+L)M&N%N#N#N#N#N#GPW^c#f,f6dA bL_Y\eYp V{%T)Q-P0O2N3M5M6L7L8L8M5O1Q.R+S)S'S'S'S'S'JT\ci l)m2l= iGfTc`_k"\u(Y-W0U3T6S8R:Q;PU?UATBTBUAW[AZCYDYEXFXF[@^;_7`3a1a1a1a1a1S]hpw|$-;zIuTq_$mh+jp1gy6e:c=a@`C^E^G]H]I\I_Db>c9e6e3e3e3e3e3U`kt{އ'ф7F{Qv[#re+om1lu6j|:h>fAdDcGbIaKaLaLcGeAgm:n7n7n7n7n7Ye q z ݎϏ ƍ2AMV"|_*xg0uo6sv:q}?oBmFlIjKjMiOiOjLmEo?p;q8q8q8q8q8[gs}ކٌ Ց ʒ0?JT!])}e0zl5ws:u{>sBrFpIoLnN|mO{mPznM|qF~sAt=u:u:u:u:u:]jvىҏϔ Ŗ.= HR [(c/~j5|q9zx=xBvEuI|sLyrNvrPtrPtrOvuGxwBzx>{y:{y:{y:{y:{y:_ lyރӋ͒ɗ,; GPY'a.h4o9v=}~A}{EyzIvxLswNpwPnwPmwOpyHr{Ct|>u};u};u};u};u};a o|نώȕÚ*9 ENW&_-f3m8t={{AwEtHp}Km|Nj|Oh|Pg|Pj~ImCn?olBhFeIaK^M]N\M^H`Cb?cHQ ~Y'x`-sg2on7ju];];];];];n~΋ĕ .; F~NxV#r]*md/ik4ds8`{<\?YBUESGQGPGQDS@UΨ&<κ&<&<%;%;%;%;%;%;%;%Óyod ^[ W-S:PDLN IW F_ChAq>|<߉:87665444444ymbXUQ M+I5E>BG?O=X :` 8j 6t 320.--,,,,,,,yl`UN JFC'?0;88@5G3O0W._+i)t' % $ # " ! ! yl_RHC?;7!4)00-7*>'D%K"S \frzl^PD<73 /+(!%'!-28?FMV`l {    {l^OB61,'# !&,1 7 >FOYft./3,7-80764?1K/X,f*t ) ( ( ( ( ' ' ' ' ' ( ( ( ( ( ) ) ) ( ( ( ( ( 0-6*9*;.:48<6I3V1c /q -~ - , , , , , , + , , , , , , - - - , , , , , 2+9(=(?*>0=:}==<<;;;;;;;;;<<======="DIMP&Q0P;NFKS H`FlExDCBAA@@????@@ABBBBBBB@HNRV#X,W7UBRM PZMgLrJ}HGFE D"D#C$C%C&C&D$E"F GGHHHHHDLRX]_(^2]=ZI WUUbRmPwNL"K$J&I(I)H*H+H,H,H+J(K%L"M MMMMMGOV^be$e-d8aC _Q\]XhVrT{"R&P(O*N,N.M/L0L1L2L1N-P*Q'R$R"R"R"R"R"JS[bhjk(k2i>fL bX_c\m Zv$X~(V+U.S0R2R3Q5Q6P7P7R3T.V+W(W%W%W%W%W%MV_ glpq"q,p:lH hTe_bh!_q&]y*[-Z0X3W5V7V8U:U;U;V7X2Z.[+\(\(\(\(\(PY c k ptvw%v6rD nPk[gd!em'bu+`|/_2]4\7[9Z;Y=Y>Y>Z;]5^1_-`*`*`*`*`*R\ f n t x{| {3wA tMpXla!ji'gq+ex/d3b6a8_;^=^?]@]A^?a8b3d0d,e,e,e,e,U_irx|  ́0|? xKuUq^!nf&ln+ju/h}3g6e9db@aBaBbAd;f5g1h.i-i-i-i-W alu{ӀЃ Dž-< }HyRv[ sc&pk+nr/my3k6i:hyn8zo4{p0|p0|p0|p0|p0[fr{ςɇĊ(8DNW|_$yf*wm.ut2t|6r9|q=yp@voBsnDqnEpnErp?sr9us5vt1vt1vt1vt1vt1]it}˅Ċ&5BLU]$~d)|k-zr2}xy5zw9vv HQY!`'{g+wn0su4o}7k;h>eAb~C`~D_~D`@b:d6e3f2f2f2f2dr~LJ .; FOWz^%ue*ql.ms2i{6f9b=_?\AZBYBZ?\:^6_2_2_2_2_2hv͂Œ +8CLyTt\"pc'kj,gq0dy3`7\:Y=W?T@S@T=V9W5Y2Y1Y1Y1Y1m{ȇ'5@ yJsRnYi`$eg(ao,^w0Z3V6S9Q;O&=&=&=%=$=#=#=#=#=#Ljsh`^[,W8TCPLMU J]GfDoAy?ȅ<ȓ:Ȣ9ɳ887766666th]S OM"K0I<FFDOAX?a5;>9G7P4Y2b0m.y,+ ) ( ' ' ' & & & & & th[OE> <96%4.17.?,G)O'W%a#l!zugZMB851.+)&%-#4 ;CKS]jxvgZL?5-*& # #)/5=E N XetwhZK>2'#   "(.5=GR^m~*-.+0+0..5)=%I#W!dr,+0(3(3+11-:+G(T&a$o"|""!!!!!!!!!""""""""""".(3%6%7'5-482D/Q,^*k)w('' ' ' ' ' ' ' ' ' ' '(((((((((2%7":!;#;);49@6M4Z1f0s. . . - - - - - - - - - . . . . . . . . . . 5";?@B&B1@<>H;U9b7n 6y 5 4 4 43333333444455 5 5 5 5 9?CFI#I-H8EDCP@] >i =t <;;::9999999::;;;;;;;=CHLOP(O3M?JJGW Fd DoCyBA@??>>>>>>?@@AAAAAAAGLRVW$V.T9QEOR M^ KiItH}FEEDDCC C!C!C!DEFGGGGGGDKQW[]]([3Y?WMTY RdPnNwLKJ J!I#H$H%H&H'G'I%J"KLLMMMMGO V \`bc!b,`:^H[T X_ViTrRzQ!P#O%N'M(M*L+L,L,M*O&P#Q RRRRRJR Z ` eghg$f5dDaP ^[\dZmXu W}#U%T(S*R,R-Q/Q0Q0Q/S*U&V#V!WWWWM U]di k lml1j@gL dWa`_i]q!\x$Z'Y*X,W.V0U2U3U3U3W-Y)Z%[#[![![![!O Wahmpp rq.o=lI iTg]debm!at%_|(^+]-[0[2Z4Y5Y6Y6\0]+^(_%_#_#_#_#Q Zdlqtu vv*t:qF nQkZibgi!eq%dx(b+a.`1_3^5^7^7^8_3a-b)c&d%d%d%d%S]gotxyzz(x7vD sNpWm_kg!jn%hu(g}+e.d1c4b6|b8zb9yb9yc4ze/{f+|g(|g&|g&|g&|g&U`jrx{}~~%}5zA wLtUr]pd nk$lr(kz+j.~i1{g4xg6vf8tf9sf:sg6ti0uj,vk)wk'wk'wk'wk'Wcmu{#2~? {JySv[tb ri$qp'~ow+{n.xm1ul4sk7pj9nj:mj:mk7om1pn-qn*qo(qo(qo(qo(Yepx~ 0=H}Q{Yy`wg#|un'ytu*vs}.sr1pq4mp7jo9ho:go:gp7iq2kr-ls*ls(ls(ls(ls(\hs{ .;EOW~^{|e"x{l&tys*qx{-nw0kv3hu6et8ct9at:at8cv2ev.fw+gw)gw)gw)gw)_lv +8C LUz\vc!sj%oq)l~y,h}/e|2b{5_z7]z8\z9\z7^{2_{.`|+a|)a|)a|)a|)boz(6A JzRuZqamh#jo'fw+c.`1]4Z6X7V7V6X1Y-[*[)[)[)[)fs~$2> yHtPoWk^he!dm%`u(]~+Z.W1T3R4Q5P4R0S,T)U(U(U(U(kxƒ ~/x;sE nMiUe\ac^j![r%W|(T+Q.N0L1K1J1L-M*N(N&N&N&N&p}~ zu*p7lA gJ cR_Y[aXhTp Qz#N&K)H*F,E,E+E)F'G%G$G$G$G$w„tol$h2d=_F [O XVT^QfNnKxH E"C$A%@%?%?#@"@!@ @ @ @ ~wjca^,Z8WBSKPS M[JcGkDuB?=;:99999999ymbVSR#P0M;JEGNEWB_ @h =r ;~8Ì6Û5ë333221111{ncXMD CB%@2?==G;P9Y6c4n2z0҈.Ҙ -ө ,Ӿ , + * ) ) ) ) ) |ocWLB9 542'120=.G-P+Z*e(q&%#"!  }pcVK@6/-+)"'+%4#<!ENXdqqcVI=3*&$ !")19AJUa o   rcVH;0&  $ + 2;DO\k}sdVG:.# $+3=IVfx%+()))(,#2;GUbp|()+&,&+)(/"8 DR_ly*&.#/"/%,+*5'A$N"[ ht."243 2&22/>,J*W'd&p%{$$$$$$$$$$$$%%%%%%%%%2688:#9-8:5F2R0_.k-v,,+++++++++,,, , ,,,,,,5:=?AA)@4=A:M8Z6e5q4{3 3 2 2 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 9>AEHH$G/D;BG?T>`>>>>>>?@@AAAAA@F K Q STT"R-P;OIMUK` IjHsG{FEEDCCCCCCEEFFGGGGDJPU X YXW$W5UDTPR[ PeNmMvL}KJIIH H!H"H"H"IKKLLLLLG MTZ]] \]]0\?ZLXW V`TiSqQxPOO N!M#M$M%L&L&N"OPQQQQQIPX^bca bc,b;`H]S [\ZdXlWtU{T T"S$R%Q'Q(Q)Q*R&T"UVVVVVLS\bfhggh(g8eEcP aY_a]h\pZwY!X#W%W'V)V*U+V,W)X$Y ZZZZZNW_fjlklm%l5jBgM eVc^be`l_t^{!]$\&[(Z*Z,}Z-|Z.{[+|\&|]"}^}^}^}^}^PYcjnpppq"p2n?lJ jSh[fbeicpbx!a$`&}_){^+x^-v^.u^/t^-u`'va#wb wbwbwbwbR\fmrtttut/r=pG nQlYj`ighnfu!}e}$zd'wc)uc,rb.pb/ob/nb.od(pe$qf!qfqfqfqfT_ipuxxx yx-w:uE rNpVo^md}lkzks wj{#ti&rh)og,lf.jf/if0hf/jh)ki%li"lj lj lj lj Wblsx{|| }|*{8yC wLuTs[{rbxpiuop rnx#om&ll)jl,gk.ek/dk0bk/dl*fm&fm#gn gn gn gn Yeov|(5~A|J ~zRzxYvw`svgptnmsv#jr&gq)dq+bp-`p/^p/]p/_q*`q&ar#br br br br \irz%3>~H yPu~Wq}^n{ekzlhyt"ex}%bw(_v*\v,Zu.Yu.Xu.Yv*[v&\w#\w \w \w \w `lv~!0~;yE tNpUl\icfjbr _{#\~&Y})W|+U|,S|-R|-S|)U|%V|"W| W| W| W| dpz},x8sBnK jSgZca`h]pZy!V$T&Q(O*M*M*M'O$P"PPPPiu~ yu(q5l?hH dP aW]^ZfWnTwQ N#K%I&H'G'G$H"I JJJJn{upm#i0e;aE]M ZT W\TcQkNtKHE C!B"A"A BBCCCCuyjec`+]6Y@VISQ PY M`JiGrD}B?=<;;;;<<<<|}qdZWU#S0P;MDKMHUE] Ce @o >z;97655444444th\PI HF'E3C=AG?P=X:a8k6w4 2 0 / . . - , ,,,,vj^RG=876'534=3G1Q0[.e,q*)̐'̡&ʹ%%$#####xk_RG=4+ &%%%$0#;#E"P![ hvއߙ߬yl_RF;1)!'09CNZgw {m_RE9/% % - 5 ?JWfw}n`RD7,"  '0:ESbupaSC6*  !)4@N^r )"'"'*09E S ` m y             #&%$%$#',5BP]jv         &#( ( &""( 2?LYeq|*,,+)$(/%;"HTamw-0101 0*.6+C(O&\$g#r#|""""""""""###$$$$$$$146798%613=1J.V-b,m+w+*********++,,,,,,,,59: >@? =*;78D6Q5\4g3r3{222111 1 1 1 2 2 3 3 3 3 3 3 3 3 9= @ D FED#A/?<>J=W>>>>>>?@@@@AAA? DJNPO LLM0M?LLKWIa Hi GqFyFEDDCCCCCDEFFFFFFBGOSUUR ST+T;RHQRP\ Nd MlLtK{JJIIHHHHIJKKLLLLEKSX[[XXZ'Z7XDWOUX T` ShQoPvP~ONNMMM M MOPPPQQQGOW]``^]_#_3^@\KZT Y\XdVkUrTzTSRRQ!Q"Q"~R!~S~T~U~U~U~U~UJR[adecbc c0b=aH_Q ^Y \a[hZoYvX~WW}V!{V"yV#wV$vV$vWwXwYwYwYwYwYLV_ehihg hh-g:eEcN bW a^_e^l]s~\{{\y[vZ!tZ#rZ$qZ%oZ%p[ q\q]q]q]q]q]OYbhlmlk ll*k7iChL fT e[cb}bizapxaxu`s_p^"n^$l^%k^&i^&j_!k`kalalalalaQ\ekoqqoop'o5n@lIjR ~iY{h`wffufnrevpd~mckc"ib$fb%eb&db&dc"edfdgdgegegeS_hosuusst$s2r>pG}oO ymWvl^skdpjlmjski|hhfg"cg$af%`f&_g&_g"`hahbhbhbhbhWbkrwyywxx!x/w;|uExtM trUqq\npckojhnqfnzcm`l!^l#\k%Zk&Yl&Zl#[l\m]m]m]m]mZfov{~~||}}-||9wzCsyK pxS lwZivafuhctoasx^r[r Yq"Wq$Uq%Tq%Tq"VqWqWqXqXqXq^isz {)v6r@nIj~P g}Wd|^a{f^zm[zvYyVxSx!Qw"Pw#Ow#Ow!PwQwRwRwRwRwbnw} xt&p2l=hFeN aU ^\[cYkVtS~PNL J!I!I~J~K~K~L~L~L~gs||uom!i.e9bB^K[R XY VaShPqM{JHFDCCDDEEEEmxylfca)^5Z>WGUORV O^ LfJoGyDB@>===>>>>>ssd\ YW"U/R9PCMKJSHZEc Cl @v>;9877666777{wk_RMKJ'H3F=DFBN@V>_;h9s7 4 2 1 0 0 / / / / / / {ocWKA>=;):49>7G6P4Z2d0o.|,*)(('&&&&&~qeYMB8/ -,+)*3)=(G'Q&\%h#v"Ɔ ƘƫsgZNB8/& %/:DP]k|׏ؤٻuh[NB7-$ # - 7 B O ]mwi[NA5*!  "*4?L\myj\N@3(  &0<IZm{l]O@2&  !+7FXk&$$'- 6CP^kv#!!#)2 @ MZgs}""!$/<IV b n y         %&%! !+7EQ^it})*)'(''#3 ?LXdnx-.. //.!,-)9&F$S"^"i!s!|!!!!!!!!""##$$$$$$$02 36 652%02-?,L+X+c*m*v**********++,,,,,,,4 69<< ;85)473F4R3]3g3p2x222211122 2 3 3 3333337:>AA? <:;1<@DGHF@ BD+D;DHCSB\BeAl@t @{ ? ? >>>>>>??@@ A A A A =CINONIIJ&K6KCJNIWH`Gg Fo Fv E}EDDCCCCDEFFF F F F @GOSUTPOP"Q2Q?PJOSN\Mc Lj Kq JyJIIHHHHHJJKKKKKCKSXZZWTVV.V;UFTPSXR_ Qf PmOtO|NNM~M|MzMyMxNxOxOxPxPxPxPFOW\__\Y Z[*[8ZCYLXUW\ Vc UjTqSy}SzRxRvQtQsQqQqRqSqTrTrTrTrTHS[`cca^ __'_5^@]J\R[Y Z` }Yg{XnxXuvW~tVrVoVnUlUkVkVkWkXlXlXlXlXKV^dghfbcd$c2b=aG`O}_V z^] w]d u\ks\sp[{n[lZjZhYfZeZeZe[f[f\g\g\g\NYagjljggg!g/f;eD{dMxcT ub[ raa paim`pk_yi_f^d^b^a^_^_^`_a_a_b_b_b_Q\djnpnkjkk,~k8zjBviJshRpgY mf` keghdnfdwdcac_b]b[bZbZb[c\c\c]c]c]cU_hnrtsoo o}p)yo5un?rmHnlPklW ik^ fjedilaiu_h\hZgXgVgUgUgVgWgWhXgXgXgXckrvxwss |txt&tt2ps=msFjrNgqU dp\ apc_oj\nsZn|WmUlSlQlPlOlQlQlRlRlRlRl\gov{||xzyuyrz#nz/ky:hyCdxKawR_wY \v` YuhWtpTtzRsOsMrLrJrJrKrLrLrMrMrMr`kt{z~snkh,e7b@_H\~PY~WW}^ T|f Q|nO{xL{JzHzFzEzDzEyFyFxGxGxGxepywkf c`'^3[<XEVMSTP[Nc Kl IvFDB@?>??@@@@kvse] ZX!V-S8QANILPJXG`Ei Bs @ ><:98889999r}zm_TONL'J2H<FDDLBT@\>f;p9|7 5 3 2 2 1 1 1 1 1 1 zrfZNE B@?*>4<>;G9O7X5a3l1y/-,+**)))))vj^RF<5 32!1+/5.>-H,Q+[)g't&$#"!!  zm`UI>3*$ "! !* 3=GR^l|}obVJ>3*! %/:F R ` p ΃ Η ά qdWJ>2(  $.9ERbsވߝ߳seXJ=1&  "+6CRbvugYK</$  '3@QcwwhZL<."  #/>Obw#!!$*3AN\ht~  %0=KXdpz! , 9FS_ku~ (4 A N Zfpy ##!#/;IU`jt|'' % & %# (5BOZenw+ ++- ,)& #-!:HT _ h q!y!!!!!"""##$$$$$$$$//232/+'"'2)A*N*Y*b*k*s*z******+++,,,--,,,238995. /1,3;3H4S3\3e3m3t2{222222223344444458>BB?88:&;6EIJGA?A!B1C>CIBSA[Ab@j@q?x?? > > > > >?? @ @ @ AAA<CJOPNIFHI,I:IEHNGWG^FeFlEs E{ D D DCC~C|D{DzE zF zF zF zF zF >HOTUTPL MN(N6NAMKMSLZKaKhJo Jw ~I |IzHxHwHuHtIsIrJrJ rJ rJ rJ rJ BLSXZYVRRS$S2S>RGQPQWP^~Oe{Ol yNs wN{ uMsMqMoMnMlMlMlNlOlO lO lO lO EPW\^^[VVW!X/W;VDVM|UTzT[wTbuSh sSp qRx oRmQkQiQgQfQeReRfSfS fS fS fS ISZ_bb_ZZ[[,[8}[AzZJwYQtXXqX_oWf mWm kVv iVgUeUcUaU`U_U`V`VaWaW aW aW LV^cffd^^__)|_5x_?t^Gq]Oo\Vl\\j[c h[k fZs dZ}bZ_Y^Y\Y[YZY[Z[Z\Z\Z \Z \Z OYafijhbb ~czc&vc2sc<obElaLjaTg`Ze`ac_i a_q _^{]^Z^X]W]V^U^V^V^W^W^ W^ W^ S]djmnmg~g xgtg#qh/ng9kgBhfJefRceX`e_^dg \do ZcyXcUbSbRbQbPbQbQbRbRb Rb Rb V`hnqsqkxkrknlkl,hl7fl@ckH`kO^jV\j]Yie Wim Uiw ShPhNgMgKhKhKgLgLgMg Mg Mg Zdlrvwvyqqqkqhqfr(cr4`r=^rE[qMYqTWp[TpcRok Pot MnKnInGmFnEnFmFmGmGl Gl Gl _iqw{|{uxkwew ax_x$]y0Zy:XyBVxJSxQQwXOw`LvhJvr Hu} EuCuBu@u@u@t@tAs As As As dnv|re]YW U+S6Q>OFMNKUI]FfD~pB~{ ?~ =} <} :}:~ :| :{ :{ :z :z :z it|{n`UPNM&K0I:HBFJDRBZ@c=m;x97 5 4 3 3 3 3 3 3 3 pzuhZOG DCA*@4?==E;M:V8_6i4u20.-,,+++++xzmaUI?976"4,352>1G0P.Z-d+q)'&$###""""reYNB7.)('"&,%5$?#H"S!^ jyuh\PD9/&!*4>ITbq yk^RF:/%   (2=IWfwƋƠŶ{m`SF:.$ '1<IXi|ֿ֧֒~oaTF9-"  $.:IYkqcUG9,  !+8HZmteVH9+  (6GZn  !'0>LYepz!-:HUalv (6CP\gqz  $0>KWblu}  * 8EQ\fow !  #0>J V ` i q y %##$! '5COYcks{('**'" -< I S!]!e"m"t"|"""####$$%%%%%%%,-243.% %'')6*C+N+W+`+g+o+v+}++++++,,---.---03:=<91.0!203=3I3R3Z3b3i3p3w2222223344444443:ADDA;789+:8;D;M:V:]:d:k9r9z9999999:}:|;|;|;|;|;7@GJKIC> ?@&A4A?AIAQ@Y@`@g?m?u?}>}>{> z> x> w? u? t@t@t@s@s@s@;ELOPOJDEF"F0G<FEFNFUE\~Ec|DjzDqyDywDuC sC qC pC nD mD mE lElElElElE?IPTUTPJIJK,L8KBKJ|JRyJXwJ_uIfsImqIvoHmH lH jH hH gH fI fI fI fJfIfIfICMSXYXUNNOO)P5{P?xOGvOOsNUqN\oMcmMjkMriM|gL eL cL bLaM`M`M `N `N `N`N`NGPW[]]ZSR S|S%yT1uT<sSDpSLmRSkRYiR`gQheQpcQyaQ `P ^P \P[QZQZQ ZR [R [Q[Q[QJSZ_aa^WV zWvW"sX.pW9mWAjWIhVPfVWdV^bUe`Um^Uw\U ZU YU WUVUUUUU UU VU VU VUVUMW^beec\{[u[q[n\+k\6h[?e[Gc[NaZU_Z\]Zc[ZkYYuWY UY TY RYQYPYPY QY QY QY QYQYQZafhig}`u_o_k_h`(f`3c`<a`D__L\_S[_ZY_aW^iU^sS^~ Q] O] M] L^K^K^ L^ L] L] L]L]T^ejmmlxeodidedbd%`e0^e:\eBZeJXdQVdXTd_RdgPcqNc{ Lc Jc Hc Gc Fc Fc Fb Gb Gb GbGbXbinqrqtkiici _i\j!Zj-Xk6Vk?UkGSjNQjUOj]MjeJinHiyFi Di Ch Ai @i @h Ah Ag AgBgBg]fmsvwvpreq\pXpVpTq(Rq3Pq<OrDMqKKqSIqZGqbEplCpwAp?p=o ;p ;p :o ;n;n;m;m;mbksy{|{|mz`xVwPwNxLx$Ky.Iy7Hy@FyHDyOByWAy`?xiC=K;S9\7f5q310.----~-}-}-}nx}pcUKA;98"7,654=3F2O1X/b-n+{*(&%%%%%%%vvi\PD:1-,+$*-)6(?'H&R%\#h"w zmaUI=3*! $-6?JUapqdXL@5*" "+ 5 @ K X gxugZNA5+!  "+6AN\mxj\OB5*   "+5AP`rχϝϳzl^PB5) (4AQcw|n`QC5(  $1ASf|paSE6'  !.@Sh  $.<JVcmw *7ER^ir{ %3@MYdmv}  -:GS^hpx  &4AMXbjry  ,9FQ[dlsz   " 1 > J U^fmt{" #$! )7DNW`gnu|&'-/-'"1 =!H"R"Z#b#i#o#w#~#$$$$%%&'''''')06872+%')+*8*C+L+U+\+c+j+q,x,,,,,,-.....~.~..7=??<5/ /1&232>3H3P3X3^3e3l3s3|333}3|3z3y4w5v5u5u5u5u53=CEFC=668!9.999C9L9S9Z9a~9h|9oz9wy9w9u9t9r9q9o:n:n;m;m;m:m:9BHKKID><=>*?5??~?H|?Oz?Vx?]v>dt>kr>sp>|o>m>k>j>i?g?g?f@f@f@f?f?=FLOPOJDA BC&}D2zD<wDDuDLrDSpCYoC`mCgkCoiCyhCfCdCcCaC`D`D`D_D_D`D`DAJPSUSOIG }GyG"vH.sH8qHAnHIlHPjHVhH]fGdeGlcGvaG`G^G\G[HZHZHZIZIZHZHZHDMSWYXTN}KwKsLpL+mL5kL>hLFfLMdLSbLZaLb_Lj^Ls\K~ZKXKWLVL UL TLTMULULULULHQW[\\YSwOqOnPjP(hP2eP;cPCaPJ_PQ]PX\P_ZPgXPqWP{UPSPRPPP PP OPPPPPPPPPPPKTZ^``]|WrTlShTeT$bT/`T8^T@\THZTOYTVWT]UTeTTnRTyPTNTMTKTKT JTKTKTKTKTKTNW^bddbw[mXfX bX_X"]Y,[Y6YY>WYFVYMTYTRY[QYcOYlMYwKXIXHXGYFYEYFYFXFXGXGXR[afhigr`h^a] \]Z]W])V^3T^;R^CQ^JO^RN^YL^aJ^jH^uF^D]C^A^@^@^@]A]A]A\A\V_fjmmlogdd[bVbTbRc%Pc/Nd8Md@KdHJdOHdWFd_EdhCdsAc?c=cr@=rH;rP:rY8rc6rm4rz3r1r/r.r.r.q.p.o.o.ofovz|~}r}d|W{LzBy)G(P'Z&f$s#! t}~qeXL@6,% #"!% .6@IT`n~}wi]PE9.% $-7ALXg w {m`TH<0& $.8DP^nqcVJ=1&  %/9FTdvtfXK>1&  $.:GWi}ɔȪwhZM?1%  "-9IZn߅ߜ߲yk\N@1$   +:K^sm^PA2$ ):Mbx!+9GT_js{ '4BO[env~  "/=JU`iqy  )7DPZcksz "0=IT]emsz  (6BMW_fmtz -:FPX`gnu{   %2?IRZahov}#(*'!,8CLT\bipw     $,131-%  &!2"="G#O#V#]$d$k$r$z$%%%&~&}'{'y(x(x(x(x(+39;:6/('( )-*8+B+J+R+X,_,f,m},u{,~z,x,v-u-t-r.q.p/o/o/n/n/1:?AA>81./0(132=2F}2M{2Ty2[w2au2it2pr2yp3o3m3l3j4i4h5g5g5f5f5f46?DGGD?94 56$|7/y79w8Bt8Ir8Pq8Wo8^m8el8mj8uh8g8e8d9b9a:`:`:_:_:_:_:;CIKLJE?: {:w; t<+r<5o=>m=Fk=Mi=Sh=Zf=ad=ic=ra=}`=^=]>[>Z>Z?Y?Y?Y?Y?Y>?GLPPOKEz@u?q@m@(kA2iA;gABeAIcAPaAW`A^^Af]Bo[BzZBXBWBUCTCTCSCSCTCTCTCBJPSTSPJuEnCkDgE$eE.bE7aE?_EF]EM[ETZF[YFcWFlVFwTFSFQFPGOGNGNGNGNGOGOGFNTWXWT{NpJiH eHbI!_I+]I4[I<YICWIJVIRUJYTJaRJjQJuOJNJLKKKJKIKIKIKJKJKJKIQW[\\YvSkNdM _L\MZM(XM1VM:TMASNHRNOPNWON_MNhLNsJOIOGOFOEODPDOEOEOENENLU[^``^rWgS^QYQWQTQ%RR/QR7OR?NRFMSMLSUJS]ISfGSpES}DSBSAT@T?T?T@S@S@S@RPX^bee}bn\cYYVTVQVOV"MW,LW4JW<IXDHXKGXSEX[DXdBXn@X{?X=X^a<^l;^x9^7^6^5^4_4^5]5]5\5\Yaglnnvlgi\fQdHb DbBbAc$?c->c5=d=s4r 1s0s/s#.s+-t4,t<+tD)tM(uW'uc%uo$u"u!u uutsr q qksy|~tgZM~C~8}/}(} &}$}#~%"~-!~6!~?HR^kz~|{{{rz{m`TH<2( &.7ALXeu {seYLA4*!   & / 9 DP^nwj]PD8,"  '1<HVew{m`SF9-#   (2>L[lqcUG:-"  '2@O`tËáøseWI;-! &2ASf|ٔ٫vgYK<.!  $2CVkj[L>/   #3FZq(7DQ\fow~$2?LWajry ,:FR\eltz  &4@LV_gnt{  -:EOX`hnt{  %2>IRZahnt{  *7BKT[bhnu{  !.: D M U \ b i o v ~  $%" '3>GOV\cipx}||{{!)-/,' !-8AIPW^dks|}|zxwv t!r!q"q!q!q!(05751+# !'"2#<#D~#K|$R{$Yy$_w$fv%nt%ws%q&o&n&m'l'j(i)h)h)h(h(.6;==93-' '("|)-y*7w*?u*Gs+Nq+Tp+[n+bl+jk,ri,}h,f-e-d.c.a/`/`/`/`/`.4<ACC@:4.z-w.s/)q03o0;m0Ck1Ji1Qg1Wf1^d1fc2oa2y`2_2]3\3[4Z4Y5Y5Y4Y4Y48@EHHF@;y5s3o4l4%i5/g57e6?c6Fb6M`6T_6[]7c\7k[7vY7X8V8U8T9S9S:S9R9S9S9<DILLKF}@s;l8 h9e9"c:+`:4^:<]:C[:JZ;PX;XW;`V;hUM>M>M>M>M=M=@HMPQOKyEn@f= b=_=\>(Z>1X>8W>@U?FT?MS?UR@]P@fO@pN@|LAKAJAIBHBHBHBHBHAHADKPTTSPuJjFaB\AYBWB%UB.SB5QB=OBCOCKNCRMDZKDcJDnIEzGEFEEFDFCFCFCFCFCECEGOTWXX~UqOfJ\FWFTFQF"OF+NF3LG:KGAJGIIHPHHXGHaEIlDIxBIAI@J?J>K>J>J>I?I?IJRX[]\{YmSbOWLQJ NJLKJK(IK0GK8FL?ELFDLNCMVBM_@Mj?Mv=NRT2]F1^N0^W/^b-^n,_}*_)_(_'_'_'^'](](\\djnoyonn`kTiIg?e5c 2c0c/d!.d)-d1,d9+eB*eJ(eT'e_&fk$fz#f"f fff e d c!cbjpsuuuit\rOqDo:n0m)l 'l&l%m$$m,#m4"m=!nF nPn[ngnvnooonmlkkiqvy|{q{d{WzJy?x5x+w"vvwww&w.w7x@xJxVxcxrxxxxwvuutqx|wj]PD8.$ '0 9 D P ] l~y~}obUI=1&  )2=IVevtfYL@4(  "+5@N\nxj\OB6) "+6DScw{m_QD6*  !+8GXk~pbSF8*   +:K^sҋҤӻsdVG9* *<Od|fXI;+  +>Sj&4AMXbksz !.<HS]fmu{  )6BNW`hov| #0<GQZbiov|)5AKT\ciou{ ".:DMU\ciou{ '2=FOV\chou|  *5?HPV\ciov  !  # . 8 A I P W ] c jqz~|{zxvuttt&**(#'2;CKQ~W|^{eylwtv~trqonmkjjjj&-131,& "~,{6y>wEuLsSqYp`ngmpkzjhge d!c!b"a"a"a"a",48985/(!{ w!t"'q"1o#9m#Ak#Hi#Nh$Uf$[e$cc%kb%ua%_&^&]'[([(Z)Y)Y)Y)Y(29=??<60y*r&n'k(#i(,f)5e)<c)Ca*J`*Q^*W]*_\+hZ+rY,}X,V-U-T.S.R/R/R.R.R.6=BDDA<{7r1k, g-d-a.(_.1].9\/@Z/FX/MW/TV0\U0dS1nR1zQ1P2N2M3M4L4L4L4L3L3:BFIIGBw=m7d2 `2]2Z2%X3-V35U3<S4CR4JQ4QP4YO5aM5lL6wK6J7H7G8G8F8F8F8F8F7>EJMMK~GsBi=_7Z6W7T7"R7*P72O89M8@L8GK8NJ9VI9_H:iG:uE;D;C<B<A=A=A=A<A<A<BINPQP{LoFeBZ=T;Q;O;M;'K;/I<6G<=G\C>gB?s@???>@=@Ce=Cq;C:D9D8E7E7E7E7D8D8CIPUXYXvVhP]LSHJE FDDDBD"AE)?E1>E8=E?I=I;J&:J.9J58K=7KD6KM4LV3L`2Ll1Mz0M.M-N,N,N,M-M-L-LPX]ab{ap_b[XXNUCQ;O 8O6O5O#4P+3P22P:1PB0QJ.QS-R],Ri+Rx)R(S'S&S&S&S'R'Q'QU\bfgxfme`aU^J[?X5V1U0V.V-V',V/+W6*W>)WG(WP&XZ%Xg$Xu#Y!Y YYYX X W!WZbgkluljk]hQeFc;`1^*] (]&]%^#$^*#^2"^:!^C _L_W_c`q`````_^^]`hnp|rrrfqXnLlAk6i-g#fffff%f-g5g>gHgSh_hnhhhhhgfeegosvxxmx`wSvFt;s1r'qqp pppq'q/q8qBqN q[ qi qz qqqppo n nouy~|t~f~Y~M~@}5}*|!||| | | ||!|)|2|=|H|U|c|t|{{zyyyxw|yl^QE9-#  #,6BN]m~~qcVI<0$  $.9FUexugYL?2&  %/<K[nxj\NA3&  $0?Pbx{m_PB4&  $2CUj̜̃˵paRD6' $5H\scUF8(%8Mc|#0=IT^fnv|  +8DOYaipw}%2>IS\cjqw}  ,8CMV]dkqv|%1<FOW^djpv| *5?HPW^diou|#.8AJQW]ciov} &1:CJQW]cipw~}{zzyxx  )3<DKQW]c}j{rz|x v t s q p o nmmm#&&$   " ,~ 5|=zExKwQuXs^qepnnwlkihfedccbb$*./-("}yv's0q8o?mFlLjShYgaeidrb~a_^\\ZZYYY*15641+%ysol"i+g3e;dAbH`N_U]\\d[nYyXV U T!S!R"R#R#R"R"/6:<;82z-r&j f c!a!&_"/]"6["=Z#DX#JW#QU#XT$aS$jQ%vP%O&N'L'L(K(K)K(K(K(4;?A@>9u3l-c'^&\&Y'"W'+U(2T(9R(@Q(FP)MN)UM)]L*gK*sI+H+G,F-E-E.D.D.E-E-8?CEEC{>q9g4^.X+U+R,P,'O,/M-6L-<J-CI-JH.RG.ZF/dE/pC0~B0A1@2?2?3?3?2?2?2<CGIIHxDm>c9Z4R0 O0L0J0$I1+G12F19D1@C2GB2OA3X@3b?4m>4{=5<6;6:79797:7:6:6@FKMNLuHjC`>V9M5 I4G5E5!C5(A5/@56?6=>6E=7M<7U;8`:8k99y897:5:5;4;4;5;5:5:CJNQR~PsMgH\DR?H:D9A9?9>9&<9-;:4::;9;B8;J71>0?/?/?/?0?0>0>GMRUV|UqRdLYIOEE@?> <>:>9>#7>*6?15?84?@3@H2@Q1A[0Ag.Bu-B,C+C*C)D*C*C+B+BJQVYZyZnWaRWNMKCG:C 6C4C3C 2D'1D/0D6/E=-EF,EO+FY*Fd)Gr(G&G%H$H#H$H%G%G&GOUZ^_w^k\_XUUKQ@M5J0I.I-I,I$+J+*J3(J;'KC&KL%KV$Lb#Lp!L MMMNMLL KSZ_c~dtcia\^R[GXf3e)c a` ````&`.a7a@aKaX af bv b a aaa ` _ _fmq~suujt\sOrCp8o-n$lkkj j j j! j) j2j<kGkSkakqjjjiiihhmsw{zp{c{VzIz=y1x'wvvv v vvvv$u,u6uAuNu\ulu~ttssrrquz~vi[NA5)  &/;GUex~}}|{n`RE9,!  (2?M]prdVH;." )5CTf{ugYK=0# )8HZoxj\M?1# +<NbzƔƭl^OA2$  -@Tk`RC4%  1F\t ,9EPYbjqw~'3?JT]dkrx~ ".9ENW^elrw~ (3>HQX_ekqw} "-7AJRY_ejpv} &1:CKRX^dipv~  *4<DKRX]cipw  #,5>EKQW]cjqz}{ywutrrrqq  %/7>~E}K{QyWx]vdtkrtpnlkihgff e e  ##  |y(v0t8r ?p Eo Lm Rl Xj _h gg pe zc b ` _ ^ \\[[[!(++)${u q n!k*i2g9e@dFcMaS_Z^b\k[vYXVUTSRRRR(.221-'z!rk gda%_-]4\;[BYHXOVVU^SgRrPONLKKJJJJ-47874}/t)l#d^[Y!W)U0T7R=QDOKNRMZKcJnI|GF E!D!C"C"C"C"C"28<>=:y5o0f*^$W T Q O!%N!,L!3K":I"@H"GG"NF#WD#`C$kB$yA%?&>&='='=(=(='='6=@BB?v;l6b0Y*Q% M%K%I%!G&(E&/D&6C&=B'DA'K?(T>(]=)i<)v;*9+8+7,7,7,7,7,8,:@DFF}Ds@h;_6U1L+G)E*C*A*%?*,>+3=+9<+A;,H:,Q9-[8.f6.s5/4/30201111212030>DHJJ{IpEe@[;R6H1B. ?.=.;."9/)8//7/660>50F41O31Y22d12q03/4.4,5,5,5-5-4.4AHLNNyMnJbEX@N<E7=3 93736343&33-24414<05D/5L.6V-6b,7o+7*8(8'9&9'9(9(8)8EKORSwRlO_IVFLBB=88482818/8$.8+-92,99+:A*:J);T(;_'!>"=#=#<IOSVWuVjS]OSLJH@D6@/= -=+=*>!)>((>/'>7&??$?H#@R"@]!Aj AzABBBBBAAMSX[}\r[gX[TQRHN=J3G*C &C%C$C#D%"D,!D4 E<EEEOFZFhFxGGGHGGFFRX]`zap`e^YZOXDT9Q/N&K JJJJ!K(K0K8KBLLLWLeMuMMMNMMLLW]bewfmfcdVaJ^?[5X+V"TR RRRR$R,R4R>SHSTSb Tr T T TT T S R R]dh~ktlkl_jRgEd:b0`&^][Z ZZ [ [' [0 [: [E[Q[^[m[[[[ZZZYdkn{prrgqYpLn@l5k*i!gff e eedd#d,d5d@dLdZdid{dccbbbalquxwmx`wRvFu9t.t#rqq qqp ppoo&o0o;oGoTodounmmlkkksx}{s}e~X~K~>~2~&}|| |}}| ||||!|)|4{@{N{^{ozzyxwvvzxk]OB5)  ",8FVh|}oaSE8+  ".=M^srdVH:,  #1ASgugYJ<-   $5G[rj[M>/! '9Md~ܙܰ]O@2" *?Um  (4ALU]elrx~#/;FPX_flrx~ *5@JRY`flrx~$/9CLSZ`fkqw~ )3=EMTZ_ejpw",6>FMSY^djpw &/7?FLRX]cjqy~|zxxwww (19@FLRW}]{czkxsv}tqpnlkjjjj !~*{2y9w@uFsLrQpWn^mekniwgecb`__^^^  ~ yur#o+m3k:i@gFfLdRcYa`_i^s\ZYWVU T T T T %((%!{tn if d %b -` 4^ :] @[ GZ MX TW \U dT oR {PONLLKKKK&+//-)}$tle_\ZX'V.T5S;RBPHOPNWL`KkIxHFEDCCCCC+14541x+o&f ^W TQO#N*L1K7I>HDGLETD]CgAt@?=<;;<<<069;:~7s2j-a'Y!Q LJHF&E-C3B:AA@H>P=Y<d;q987 6 5!5!5"5!6!4:>??{<p8g2]-T(L"FCA?"> )= 0; 6:!=9!E8"M7"W6#b4#n3$~2$1%/%/&/&/&0&0&8>BCCxAn=c8Z3Q.H(@$ =#;$9$8$&6$,5%34%:3&B2&J1'T0'_/(l.({,)+***)*)+*+**+*<BFGGvElBa=W8N3D.<) 7(5(3(2(#0()/)0/*7.*?-+H,+R+,]*,j(-y'-&.%.$/$/%/%/&.?EIK~LtJjG^BT=K9A48/2- 0-.--- +-'*..).5)/=(/F'0O%0[$1h#1w"2!23333 3!2CIMO|PsOhL\FRCI??;66.2 +2)2(2&2$%3+$32#4:"4C!5M 5X6e6u77788877GMQS{TqSfPZLPIGE=A3=*9 %7#7"8!8" 8(80989A:K:V;c;r;<<==<<;KQUXyYnXdVXQNOEK:G0C'@ > >>>>%>-?5?>?H@S@`ApAAABBAA@PVZ]v^l]b[VWLUAQ6N,K#HE DDEE"E)E1E;FEFPG^ Gm G G GGG G F FU[`}bscjb`aS^GZUJVWVeUwUUUTTSSbhlwnoocnVlIj=h2f'ecba `` ____&_/_:_E_S_a^r^]]\\[[jo}rutju]tOsBr6p+o nml lkk jjjj!i*i4i@iNi\imhhgfeedqvzyp{b{U{Hz;z/z#yxw wwwwv vvvv#v.u:uGuVuht|tsrqppy}vhZL?2%  &2?O`u~~zl^PB5'  (6EWk~paSE7)  *:L`xsdVG9* .@TjgXJ;,  2F]vԒի[L=/ $8Ng $0<GQY`gmsy  +7BKS[agmsy&1;EMU[aglrx  *5>GNU[aflrx $.8@HNTZ_ekqx (19AHNSY^djqz~ "*2:AGMRX]dks}}{xvusqpppp  $,3:}A{GyLwRvWt]rdpmovljigedccbc ~zv%t-q4o:n@lFjLiRgXf_dgbq`|^\[YXXXWW~ w rnjh'e.d4b;`@_F]L\SZZXbWlUwSRPONMMMM"%%"}un g c_]![(Y/W5V;TASGQNPUN^MgKsI H G E D D C C D $),,*&w!nf_Y U S Q "O )M /L 6K <I BH IF QEZDdBp@?><;;;;<)/221|-r(i#aYQLJHF$E+C1B7A>@E>M=V<a:m9|76543444.4786x4n.e*\$TLF B@? ='<-;49:8B7J6S5^3j2y0/.---..28;<<v9k4b/Y*P%G@ <:86#5)40372>1G/P.[-g,v*)(' & ' ( ( 6<?A}@t>i:_5V0M+D%; 6320 /&.--4, ;+ D*!N)!X'"e&"t%###"$!$!%"%"$#$:?CE{DrCg?]:S6J1A,8&1# .","*")"#(#*'#1&$9%%A$%K#&V"&c!'r'(())))(>CGIzIpGfDZ?Q;G7>25-,( ('''%'$'!#('"(.!)6 )?*I*T+`+o,,------AGKMxMnLdIXDO@F==834*/$, !, ,--%-,.4.</F/Q0^0m11122211EKOQvRmPbNVIMFDC;?1:'62 2222"3)314:4D4O5\5k6}66 7 7 666IOS~VuVjU`SUOLLBI8E.A$=:88899&9.97:A:L ;Y ;h ;z ; <<<< ; ;NTX|[r[hZ^XSUIR>N4K*G!DB@ ??? @# @+ @4 @> AJAVAeAvAAAAAA@TY^y`p`f`]^Q[EW:T/Q%OLJH GGGG H(H1H;HGHSHbHsHHHGGGGZ`cwenfefYdL`@]5[*Y WUS RQ PPPP%P.P8PCPPP^PoPOONNMMaf}itllmakSiFg:d/c$a_^ \\[ ZZZY!Y)Y3Y?YLYZYkX~XWWVUUhmzprrgrZqLp?n3m(kjh ggff e eddd$d.d:cGcUcfczba`__^otxwnx`xRwEw8v+v tssrrrqq qpppp'p3o@oPo`ntnmlkjiw|{s}e~WI</"~~~~~~ ~ ~~~ ~+}9}H}Y|m|{zyxwwi[M?2$ "/?Pd{{m^PB4& $4FYppaSD6' '9Md~dUG8),@Vǫ͋XI:,2H`{ !,8CLT[bhntz '2=FOV\bhnsy",7@IPV\bgmsy &0:BJPV[aflrz *3;CIOUZ_ekr{ #,4<CINSY^dks}}{yxwwu&-5<BGMR}X{^yexmvvsqomljihhi  |'z.w5u;tArGpLoRmXk_ifgpe{cb`^]\\[[  { wso!l(j/h5g;eAcFbL`R_Y]a[jYuWUTSQPPPP wqkgda"^)]/[5Y;XAVFUMSTR\PeNpL}KIHGFFFE ""woh a ]YVT#R*P0O5N;LAKHIOGWFaDlCyA@>=<<<<"'))'{#qiaZ S OLJH$G*E0D6C=AC@K> S= ]; h: v8 7 5 4 3 3 3 4 ',//.w*m%d \TLF C A ? > %< +; 2: 88 ?7G6P4Z3f1t0.-,+,,-,145}4t1j+`'X!OG@ ;976!4'3-241;0C.M-W,c*q)'&%$%&&169:{9q6g1]-T(L"C;5 21/.$,*+1*8)@(J'T&`$o#!   4:=>y=o;e7[2R-I(@#80 ,*)' &'%-$5#>"G!R ^l~8=ABwBm@c<Y7O3F.=)5$- ' %#!!$ +2;E O!\!j"{""#####<ADFuFlDbAW<M8D4<03+*&#" !!""!"(#0#8$B%M%Y&h&y&'''(''@EH}JtJjI`FUAL>C::612(- ) ''''(%(-(6)@)K*W*f+w+ , , , , , +DIL|NsOiN^KSGJDB@9=/8%40- ,---#-*.3.= /H /U 0c 0t 0111100HMQzSqTgR]PRLIJ@F5B+>":74 33 3 3 4( 41 5;5F5R6`6q6666665MRVxXoYeX[UQRGOHPW]ciot{#.8BJQX]chnt{ (2<DKQW]bgmt{"+5=EKQV[afmt| %.6>DJPUZ_flu~~| '/7=CINSY_em~w|zxusrqppn !)07}={ByHxMvRtXr_qgopl{jhfecbaaa|xu#r)p0n6m<kAiGhLfRdYc`ai_t][YWVUUTU  {u plhf#c*a0`6^;]A[FZLXSV[TdRnQ{OMLKJIIIy qke a]ZX$V*T0S6Q;PANGMNKVI_GiFvDCA@??>?zrjb\WSPNL%J+H0G6F<DBCIAQ?Z>e<r:9866555 $&&$u ld\T N JGDB @%?+>1<7;>9E8M6V5a3n1~0/-,,,,%*,-{+r'h"_WOHA >;98!6&5,322 91 A/ I. S, ^+ l) |( & % $ # $ % */22y1o.e)\$SKC<5 3 1 / . "- (+ .* 5) ='F&P$\#j"{ /367v6m3c/Y*P%H ?80,*('%$$*#2":!C NZhx37:~;t;k8a4W/N+E&=!4-& #" !'/7AKWev6;>|?s?i=_9U5L0C,:'2"*" $,4>IUct  :?B{DqChB^>S:J6A29-1)(%  ")2<F S a !q ! " " " " " !>CFyHpHgF\DR?I;@884/0','# !!"" "'#/ $9 $D %P %^ &o&&&&&&&BGJxLoLeK[HPDGA?>7;-6$1-*( ' ( ( (% )- )7*B*N+\+l++++++*FKOvQmQcPZMOJGG>D3@)< 841 / ..//#/+050?0L1Y1i1|11000/KP}TuVkVbUXSNPEM:I/E%B>;9 7 6666 6)627=7I7W7g7y766655PV|Zr[i[`[WYLV@R5N*K HFC A@ ?>>>>&>/>:>F>T>d>v==<<;;W\y_paha_aT^G[:W/U%RPM KJI H GGFF"F,F7FCFQF`EsEDDCBB]bwenggh[fNcAa4^)\ZWVTSRQ QPOOO'O2O?OMN]NoNMLKJJe|itlmnbmTkGi:g-e"db` _^^]\[ ZZYY"Y-Y:YHXXXkWWVUTSlypsshsZrLq?p2o%nlk jjiihgff feee'd4dCdSdec{ba`_^}twwny_yQyCy6x)xwv uuuvuttsss rrr r,r;qLq_qtponlk{{r~d~UG9+  #2CVl~}|vhYK<.   '8Lb|j\M?0! -@Vo_PA3# 3Ib~SD5& %;Snߌݩ$/:CKRY^diou| )4=ELSX^cinu} #.7?FMRX]bhnu~'08@FLQV[agnv !)29?EJPUZ`gox}|{zwu #+28>DINS}Y{`yhwqu|spomkjiig }$z+x2v8t=rBqHoMmSlYjahjftda_^\[[ZZz uqnk%i+g1f7d<cAaG_M^S\[ZdXnV{TRQPONNM |unieb_]%[+Y1X6V;UASGQNPUN^LhJuHGEDCBBB{ sle_ [WTQO%N+L0K6I<HBFHEPCYAc?o>~<;:9888uld ]VQ MJGE D&B+A1?6>=<D;K9T7_6k4z210//.."$$z!qg_WP IE A><:!9&7,62483?1G0P.[-g+v*('&%%%#(**w(m%d [RKC = 96310"/'--,4*;)C(M&X%e#t"  (-/~/t.j+a&X!OG?81 .+)('#%)$ 0# 7! @ J U b r       -14|4r3h1_,U'L#D<4-& $ " !   % , 4=GSaq158z9p8g6]2S-J(B$91*# !)1:EQ_o     59<x=o=e:[7R2I.@*7%/!(  &.8BO \ l   8=@wAmAd?Z<P8G3>06+.''# # , 5 @ L Zi|<ADuElEcDYAO=F9>652..%*%!    "*3 > J!W!g!y!!!!! @E}HtJkJbIXFNBE?=<59+4"/+( $ ###$ $(%1%<%H&U&e&w&&&&%%EI{MsOjO`NWKMHDEO2L(HEB@=<; :999 9)949@9N9]9o887765UZv]m_e_]_R\DX8U-R"OLJ HFED C BAAA&A1A=AJAZAl@??>=<\|`scledfYdKa>^2[&YVT RQONML KKJJ"J,J9JGJVIhI~HGFEDcygrjkl`kRiDf7d*b`^ ][ZYXWVV UTTT'T4TBSRSdRyRQPON~jwnpqfqXpJoK=S;]9i7x6432211zph_ XQL HDA?=!<&:,91776>4F3O1Y/e.s,+*)((( !!ulcZR KD@ <8643!1'0,.3-:+B*K(U&a%p$"! "&(|'r%i"_WNF? 84 1.,*)"'(&.$6#>"G R^m~'+-y-p+f(]$TKC;4 - ) &$"! $*2:DO\j| +/1w2n1d.[*Q%I @81)#    ' . 7 A M Z i { /36v6l5c3Y/P+G&>!6.'       # + 4? J X g y37~:t;k:a8X5N0E,='5#-&    ( 2 <HUev6;|>s?j?`=W9M6D1<.4*,&%"   &/:FSbt:?{BrChC_BV?L;C7;430,,$)$   $-8DQ`r>CyFpHhH^FUDK@C=;:37*2 -)% "   " +!6!A!O!^"p"!!! CHxKoLfM]KTIJFBC:@/;%73/ ,)' &%&&!&)&3'?'M'\'m''&%%$HLvPnQeR\QSOJLAI5D+@!<96 20/ .----'-1-=-J-Y-k-,,+**M}RuUlWcW[VSUGQ;M0I%FC? =:87 6 5444$4.4:4G4W4h4}32110S{Xs[j]b][]OZBV6R*O LIGDBA?> ==<s0r#qo nmmmmlkjiiih hhg!g/g?fRffedcbawxmz_zPzBz3{%{zyyyyzzzxxwwwwwwww&v6vIu_uwtsrqq~cTE6(,?UmfWH9*!3IbZK<- '=UpM?/  /HbЀНи  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ݯŌh̜λŽzې[=eu4TӔ~I,Nʳ~emŮ滑tcĚsE&4}U0 `t5 R4Oi  R;5L[ML^`6`ʼϚmZF|>&T<.Sm1 aZ]5\} T}EDd/"7IXkA(?cղ廗wb۞g6 ?^ف9/Z$^w%j}[+L<0 -a''U'%ʝv]J<2-,09GԻ縏jK/og4<ւ;1oBPi7/"y4Ftjc)"aW7hӮ|uqprwۺiiȓe=ێLn|,E*"D}6jXFG5% ' p pUB3& &ӼҩeH,q<O5u#gCH.8thB`z]a$fɬ}vqligfgkpzŪyawݦwP, 1Np`o7@r_M;*3^+ ƣhM2|Fq|/;d tjK0/Ryt6m|i hpaPliZI9X)V/)G .>RhҰw]B( J}EP h6HuiR>3+X"\Jzwz LWhtңzX:)#RiC4yO]:*Ot3grD\A_KW $1?N`t¾~S?0# vuFNDkyf!SJ?w+ EM.*-E`ct˷|xtplhejH- 1B)kZN4 =eNCzt _t,8ESbrٲymd]VQKFA<82-(#K% f=3l 5[/^w^C@^N,>Rj|þm[L@7/(" 4v$Q|yfQ#:62/.1%B} 9b"Hri(N\3.2Rwr/BXpon~dVKC<60+'" RmQ:B#h >m7/Ptr*AZuXDTdu{xvtrsuxO:0(! #i 9c4[I9]{ !8RoX)9IZl~wqlhda^[YXWWY^eq1 V/W|7+a ,Pv0 #;Wvc*;L_tſld^YUQOLJHGFHKPYf&VP:y !2X1Z'KqI/Jhu&8J^urZSOKHFDCBABCGNYi}.VA{ 4`?%Jqf*Db5+>QhvPJGEDDDEFGKQZhA6ce 'Ls/*DbP6Ja{҇|SGIMQV`sV5Pmo>_{WX[_NSBitmapImageRepZNSImageRep_NSBitmapImageRepWXii[ӈ WNSWhite\NSColorSpaceD0 0WX[WNSColorWX[WNSImageӈ B1` Hٜ 1/_agreeButtonTitleVpromptXlanguageWlicense_printButtonTitle_saveButtonTitle_disagreeButtonTitle_systemLanguageID#$!"0 WEnglishUAgreeXDisagreeUPrinteSave &_IMPORTANT - Read this License Agreement carefully before clicking on the "Agree" button. By clicking on the "Agree" button, you agree to the be bound by the terms of the License Agreement.ӳ \NSAttributesXNSString&/%_FC 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ),'(.VNSFont_NSParagraphStyle VNSSizeVNSNameXNSfFlags#@(*+YHelveticaWX΢[VNSFont >ZNSTabStops[NSAlignment-WXآ[_NSParagraphStyle_NSParagraphStyleWXۢ[\NSDictionaryWXߢ[_NSAttributedString_NSAttributedStringWX[_DBDiskLicenseAgreement_DBDiskLicenseAgreementTHFS+PTUDBZ_stimfit-0.9.3-alpha_stimfit-0.9.3-alpha2.dmgWX[[DBDiskImage[DBDiskImage_NSKeyedArchiver(25:<v| /HR[ir!3?ADFGIKMOQSUVXZ\^`bdgijlqtvxz #.1ENbmoqstv  /13[[[[[\ \\\\$\1\6\8\:\?\B\J\O\R\Z\a\d\f\h\m\o\q\s\\\\\\\\\]]]]] ] ] ]]]]&],]7]]^ ^^^^`gjlnqsuw~+03@EH]rwz stimfit-0.17.1/dist/macosx/stimfit.icns000066400000000000000000003054151517235503400200660ustar00rootroot00000000000000icns TOC His32zs8mkil32l8mkit32*t8mk@ic08RAic09-is32z ,101, 00/0/ 00 /00$"/ 0/ /0/%/,/ 0/ /0.$35,/H0/ /0- /6*.0/0/ /3'11-"1/0/ 1%&1/2%210 )(1./1'(', .02/ 1 &11/0 2341 ,1/1,  +* + GNLMMLMNG QPOPO PQOOQ/"PON OOOOQ"2SNXOOOPM C CRNNOOOPHP;OONOOOV<RS&'SNOOQ?2RPO;TRPB5QNNS6CBIIFSN OR(9RRO RPPQ GQORH  Bfb fB½ ®&€ &$pMÀ %$M:ẁX%$ŽHJ%$Ư?ƏF%$֑=YZ%$˘"x.%)'σ*&&π ]/0+&ʂ &DŽɰ&$&s8mk]||||||||]33Z[Y[YZYZYZYZYZYZYZ\\IIgg  il32(54 5(2/ 21/ 11/0/ 11/-0/ 11/0)./ 11/1&"5)&0/ 11/1$#5:++0/ 11/0"$-:;*./ 11/ $/0=4(0/ 11/ .$0.5;(*0/ 11/ 0-$1/.90!-0/ 11/ 1(&1//17"0/ 11/ 3+0//.4.#1/11/01% 1/.5+0/111/ ,1/1/2/12+53./4(21013!80./0,(')113/5./3 31/2./.5/%"#$(21/.16 311/. /12/ 2&212&   ?TR T? RN RRN RRNRRON RRNP*!JPN RRNQB OON RRNR4-RN RRNR+B#ARN RRNR#JEOON RRNPKS10RN RRN ONPONARN RRN PH RNRAMPN RRN R>+RNNR2 #RN RRN W+9QNNOP!3RNRRNPQ= KONQJ FQNRRPO4RNS8SNRRH>RNRATQPRV("RRNR=BCB@DRRJ3PONS! URORNOP3# !"0SRNORT RRRN RRON OR >R=   >BAB>ё љ:‘ ;@‘ @?‚ĉ @?dMƈ @?€ǠAÇ @?€|Ij͇ @?€fQ'Ɇ @?€Q"1FÅ @?€>,w%rͅ@?,8I&ʄ@?ıJɡ'6Ń@?ɗ dwR‚@?eK y͂@?ǒĀƶ"ǁ@?D{̂φEρ@?̰.0˃3р@?^L̅˓,@?˶|ćK ,@?ˆ{OJKMq@?‹́ @@‘ @:Ñ ;ˑ˖:@?@:l8mk%nzyyyyyyyyyyyyyyyyyyzn&,, [[ ,ss, +@KLLLLLLLLLLLLLLLLLLK@+  it32*%)-13431.)%)-6<<:<<6-**.860.-.068.)*+51--./.--15,*$)01./.10*%*+0../..0+*+,../..,++,./-,,,-./.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./-++,./.-,--./+!%,/.-,--./0,*/.-,--./ 0)/.-,--./0*+/.-,--./1 !-/.-,--./0#$%%$!!./.-,--./0-"&'))(&"&0/.-,--./0*!$'*++,+'#*0/.-,--./1&"&',9.-.,(# -/.-,--./1!$&'+U<,/0-)#%/.-,--./0 $&',AV4.11/)!*0/.-,--./0!$'%.1AP.142.' ".0/.-,--./0.!%&$.2,MB.453.''/.-,--./0-"%&#.1-1U61663-$ +/.-,--./0*#&%#00/,=P05862,"#./.-,--./1'#%%"1/ ,KD17971(!(/.-,--./1$$%$"1/ .1T74::5/&!,0/.-,--./1!$%$$2/ ,?O38;94,#$./.-,--./ 1 $%#%3./ -NB4;;82)!(/.-,--./ 0 #%!'2./ -4T77;;6/$!,/.-,--./ #$ (2/ ,BM4:;93+!$./.-,--./ 0- ##+2/ -P@4;:60'(/.-,--./ 0+ ""-1/ -6S66:93," ,0/.-,--./ 1( !!.0/ ,EK27950'#./.-,--./ 1$!!00/ ..Q=2773,$'/.-,--./1 ! 2/ -6S44640( +0/.-,--./ 1 !3./ ,EK0441,$ -/.-,--./ 0#3./ ..S=/32/(!$/.-,--./ 0.&3/ -6U1/00+$(0/.-,--./ 0+*1/ ,CL+./,'",0/.-,--./ 1&.1/ -P?)-,*$ ./.-,--./ 2 10/ -3V1(,+'"$/.-,--./14/ ,=R((*'$(0/.-,--./6./ ,KE$''$!,0/.-,--./ 0*&5./ ..T6!%$!./.-,--./ 1# -2/ -5V*!#"#/.-,--./1 50/ ,@P! !(0/.-,--./ 0- 9./ +LB-0/.-,--./ 2 '8./ ..U1/.-,--./ 0- 62/ -5V$&0/.-,--./ 0/ @./ ,AM-0/.-,--./ .--  /;-/ +L< 1/.-,--./ +   E0/ ./T( (0/.-,--./)  5A-/ -8O 00/.-,--./ ( P/ ,G: %1/.-,--./.%  S8-/ ..P  /.-,--./.  UD,/-:F $1/.-,--./- )]G+/ ,J(  /0/.-,--./,-Rc@,/ .3G "1/.-,--./+8fcM2,/,D) /0/.-,--./+ EZ;1,./.2F   1/.-,--.//0*QT.-./ -C*  -0/.-,--.//1YK,./.1F 00//0/.-,--.//08 _C+./ -B* -/.-, --.//-JL &_<+/.1I/.-,--./ ,MG-`8,/-A3 00/.-,--./.,P@1^5,/.O1//.-,--./.-OXX2-/-8P  /0/.-,--././I2-/,DO .0/.-,--./.-./,JX  /0/.-,--./,EcM,   /0/.-,--./,5Pbd]WRQMORVXP1./.-,--./-,1:CILNQOMLJKD/.-,--./.--,-/.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./.-,--./.-,,-./.-,,,-/-,,+,./.,+*+-./.-+*$+,../..,*$**-../..-**++-.-++**+,-,+**$*+,,-,,+*$ *-* QN MU? CPNMIH0.IIMN PJ LON U-  KONMIH0.IIMN R1 SN PS  ,PONMIH0.IIMN PK 6SN QK   =QNMIH0.IIMNO + LPNMU=  LPNMIH0.IIMNONLKI1 &TN V+ -RNMIH0.IIMNONG4+ FQNPR   CQNMIH0.IIMNOOC)VN MSD !QONMIH0.IIMNONAQPNMV,  ;=?@DCENMIH0.IIMNMNPSUVWVUSNMIH0.IIMNMNMIH0.IIMNMIH0.IIMNMIH0.IIMNMIH0.IIMNMIH0.IIMNMIH0.IIMNMIH0.IIMNMIH0-HJMNMJH/-GJLNLJG-'GHLNLHG'DFJMNMJFD 9FILMNMLIE: EFILMNMLIFF,GFIKLLMLLKIFF-,FIIJIJIIFEE-9DGHHIHHGD: '--.--' 8`jjkjj`8 FͽH  mǾnmſѼįn DF47\]jlkqlrlqlqlqlqlplpløpl»¶pl ´~OC]µpl ĶM \´pl ` EôplƩEijplo !Ròpl@ #&$!n±plĸ%#&)*&#°plɟ!%(*),-,($3Űpl̃"&(,D,..-*$Xïplg#''-S(00.*"®plO %'&3Ļ6-22/*3Ůpl:"&'"B֎*143/)Zíplý,"&'P`)463.% ǭplů "&&aɿ $&:Á ʲ96<;7/EĨpl ÿ. $%G‚ Ӏ.9<93*p§pl ŵ# #$Ȳ Q1;:70#(Ƨpl Ǧ ##j̈́ ̭66:93-Dæpl ʓ ""~̅ z-8960(l¥pl }"!ˆ K.983-!#ƥpl f!dž ͩ33740*8Ĥpl N (ć z*453-&\ãpl 84È N*33/*¢pl ļ&Eˆ ̱2.20,&)Ƣpl ƨ\͊ Ն&.0.)"Aġpl ˍv͋ Y$..*&bàpl o ˋ 9&,*'"Ÿpl K ƌ ў&'*(%&şpl + .Í s('%!?Ğpl ƩH̏ L&%"`Ýpl } mϏ ˽/$"œpl Iː Ә""Ɯpl Ŵ "đ o >ěpl w  Hϓ F hšpl Ż* ϓ ˼)ǚpl f  Ĕ Ֆ3ęplv [ӿ ej˜pl­}e> Ǘ 6 ǘpl¦9 bտ ϧI—pl*  *ę h  ɗpl¿ Ϳ *  8Öplýz վ я  ʖpl¹f  Cտ ? 2ÕplµRJϾ ̢ ˕plðDiÿ G /Ĕpl«; ¿ ˦ |˔plĩ1¿ J &œplA$ٿ ʩ a€Á‡€plǔ6Ӿ L~p lٛ CϾɲ>]lpvromc`qpl ܌ Pʿe"pl|[ǿ($plҪſͭplÿ֟plײ3plؓJ"   !plлplׂ؁πplplplplplplplplpkqilX[25@Agѽj g͵i @Ͳ@2XkljY3t8mk@     &kl&    "#      67  wz   "#   &--%  *46* #/;GPX_dhkmnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonmkhd_XPG>4)   '08?FLPTWXYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYXWTPLF?80(   #*05;>ACDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCA>;50*#  #'+.1345666666666666666666666666666666666666666666666666666666666666666666666666665431.+'#  !"$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$"!     ic08RAPNG  IHDR\rfiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATx}gdUf+׮{NLL42fF FE H rpkweq-,,# BHˑCH q=7U~ߍw3#_gVUf2Yue/^}ݸqåj3c0 lL 7fF)` Q`SVt1F Lc[э60loE7 :`0?(` Q`SVt1F Lc[э60loE7 :`0?(T+wMgna[v ٭:#$/L"ʂ((Z/uxM1f1~~5`X dU qݽ 4nLh1QS j_ z#)>Rm4 65kVʹr~SK(@d+`U3LCpM#uH0L/+NխB678iGGF2;0z{*;4e] xb?r5 ͈ޝ*Z9_('N_?OsS_* y:N֪ ާ~y?|shX+ɼ!H^̆atFTF<-[xKe3Z葠4i$&V? rP]s)B3*]TS?u'wW?PRgLK0M/:tGo},Ph`p xİݻ_ٲ?*|)Jg\65ANҰ.O1 ~FWa\Rp*zk-̵/Osӗ/ .1''#0cX- ^]LXs,># Yiꓗ\?<6KKvG( eaVW{~;{ϻ(۲==&ۂJ!q5\ ԌQ`) ЃFRT*)qZpҴPo `%i*Kßga\͊g |q7;tGg vB2d ~.o_̠.-?D ep *KK:ufM_#HYH9tWBy&!jQڸjyŧ3'H% LTmVyT7,x42L/e;>ݵM;|/enx#CndpTD\RH_P$a?FU%WS2eР!]uW.c0M1鋏^/^VSg4b&B$ DO[d;n_ʍ컟Z~V? 0"Ԑ+TZ|*,IJ|>(|k#\F`?j|`]J^tWYimvaTnaC+y/rPC0+vfcJӦ >$33m6ǫuםnQALAlAGX.0 8fC0`T .PYP %`8wۮ~#W r>nbCCi@MO:5юBd:S"5y1x~Oq2hT P@e]ff&Ƞs`Tq37]M1IzbW+iԎR~eaa&Vӯ-?mdx+Pi?W8釩׌Q(%Vuuuu#\2Lv#[GQp)_B&o2& (3I7/-,=MpT5~z@|I]g}0ȦFvu(bE?kL|A& /^lnhS•atn =+D~?Luwۥ޳FF}8ށ*VVc m ń3yڂM{nm\D-%"M/gk+z K)L2fBMebUfMu h0ctkծ3 }d6[y`T/]|I{dMSQ/Όdn:xaYA1F[n.b4cLCݚiO/(6GM((Ja?*$KNŒ  Lh:/( @w 7S+JO1 k Dc@I:3̍nm4=Pz3LSXLKh3a}REŇF4a҄nbFEVy-Q-@ 3Dkx 1‹hRj+6yoIO8̔Hhد$HM(gu`&ЯZr/t0NcHyjKbEmbI#p`xAw7 @ 3 ]Q:a5i 'N3ڐ$HŭGmhB= Mե͂i|862b]v?>g bD0iE$LP.Q 6OvW@WkBk>kQ`cS@aM$AC&n.~A}DZϚm0 x !N'Ĕkl*z\3n]!mBw"K4 MQuN}21  X[b' 㽸]sf ioȈk'%b):;m۽T3xncQ(LQfeO 9 sY mXX#1 za^*a5Q`#R[luL^@xKq(nZ'B@Q|~nnQ`q t5odLj3 Wۃg=rt jWKW]W Jnۑp9C4oE2,4%StK&"Ҭ+M(KOS짟na8A9Pf!^Ф`_Lcq$YZ,Q 1I*Y,p>^@ x+@4dP S2~\쐫``'0pL`L$>FJ@_;{W]8)@p  ){f A48P8,LϹFY0dCu)\S>|8=^g#+L!` RB)EpU0ċ]fW01 ,&,LD’sǁPA iI*`6綸̰zKHAtDv %c-~T?@SI-1D?>W pQZi>º0xfd7vp3 z<!)H70I45W@t}'f KW0}">";P\r00;'E0 >T`lAŲ"U@V\߻ JisyS@{t~:b^'ؗ(]Q46Mab϶mw[Ò%Q 1P@&?t(\ Cs u:~ cI~t u>?i=NI x{8wͯbhh Qzrt>qDM VCǙ{Qk0/@',: 6 = @F߀[Ɋɘted@>0"̡+݈h1+[i% BV0Њ*݆U/?Ȕ3+) ]/^sGU*O;aW3* `8[:&}U@u}?g V9vkk8 lTɧ$N:s&y U n,Aa$ AtdTtf/ L7$|@Dc Ur o}¾ [zo.TfuG|BC2R&Y ,_Tpe(%+1h"U1:)zuة EL¸ q_Eo #` 7Bn9ft*tt1a ^7&BW]yqn[~ h!{ݓՏ2dv͇~m' mA0BGdd@:;@F  F$Jb] NRfu G(" =zOOqol7A&p]k >c8CpFTrJl`K8.~J_x64&$ 2Fx'Y *shnDPq3 s 壱+). GGsv`VfrT]_vg0MLČQ0X=.:0O޷9;v,@xv(#)Hؼ^6pd_?a#)s0X!&)1PǦ"OPPEKKakcUt 1~DZ`n`~ DTT fκҕϻfZW 7X1$>8&shk 歍xuw?Xxi l=.W憣5 "?:* ! Q|37F\F*cͰWL_sPjpے!g8?n9}n`-%(*ta2"2]vb`v,Ntluc |y,eKN-nhG]ca4+ }k/]0o 9&Qiµ8xa !~u@"8 ER@[>*I@x\0JRc)d+^'Rt8I `0>C.+0UzG}Mc|>0: DH wT )L>~`SNC{ WH=$*S Ha(Ra[+6m /u }v49یN=@&0効Qw𶷸 97@#/Réiy TeA tAc |<\ONz/d:}/sRXP_3Uk+]/Z7>R ) D v R|E07I@\ίoZ@Ez037i5ӿ[bÊ2\r) Af2Ӻ}@ߎ$ R xZda ۈҕ ~3^x Hwo|I  殀-A즡AǴʼh5["{JXOh铀4V6?b H܋A[vH6a\ H BP:#)t9#ffS@8 b79@WT<=2lWy"5l~Vt6,0# FRvYH я`E1fU$VӰ^y[Z%Db.@\BF~22ف< QUե@ŠHW1Akl!kc~Z~@cܽ)Iȏ Gx@Io2:i@A )2(2hh+sK̮$d3U{UӀnr=vJc$NJҰeeTfB8/HGB@?v (`U1wn̮09\ık+s0 p9̙Ҹr$:U2vC AzL2+\G#__zlAy0 }GQC὘F d]9$NsK[ވcӪ3Qz$bȗR^/|ڕCvX7c-?c  IDAT0W)[HЗ >~偠ZC&p2Ӆ*0NJ<Wst@1.+aXpN=jb/(` ee Q%EQw]MwT&G?){n~V D'l 0SH$A9fwi"CXD澷 VI^CDe(e4+PۂӅY"$jaCz_HgE)` rc@e2Zr.zsaOsVB]YwÁGIHP>/ÂǼ@47`(ϝ <`d64}5G@8vV*(pHg6Ӆ2#ܭ; 2\}rO*:1}|O@4PFts[[/F JfN@w8K<x 0œb 'I4 /U(?NCyd$0g}(` Kc]W>qڞz`Y,ӭ<2C9ZcTM ,&>#8bN o((y<l,ND$(^_4>@Շ?hF CbR QH{訏_ee7i+g*1™@>ML0qARQs =2{ J氍XSsEܥ槣,-6Aa< D>|(ZMێ"3 |Vy!eS!HF 1+̩@r+!x1@e[L@ނ%PezOv< <8\hh2b"LO{]7{.C_Wݽc%hKGfm9 x5|[Z}C_ ]n`PhAJŨYe9p#WSJok]9]K9e\i&a\"'F NY! 1o0ï:8 }t(P &œ`wY:@` hGn qa9/@FyMj BZ184x<8 N%%^4AF K\ѧOjǏ17 i6'<tmQ=  Q à—=/͜CA>wjH&@l>Uifyl" L`1Ui#G` 95fU٨{- ïk1 /97` kb}Ztsn˗N(Cn@*7yE'Q1^ fλ)@q7P1%*]9b́Fp 2R۾~3>} ˙ԐVs at ]y0v0bC!Vm `Q17{ V2lO`dY,]EsZgp~3SOu,v<W{ Lb$)9`$+Nc-Y}q.5Ȗ4$$jѷ>O=ƿ84S/bz370˖v,}݉h\߅>(uNf0DOfǠ 7}kTo"k.1nޠb/!]/[~6[f!z|[#l-~ۣy+w/},;QI x$FAi0͙06H3Dч%-7~8رv N԰I讝/t+wۆoî% ]?v2(X!md3n?9c2,O?7ݲ+b8w֝7INFo<2Vv 8opMazn"[`{YM; j/乏A/ss/0(1DzP`}3\tR^ןpBf7)+o+#չ1X(,sJGm=}:o : ȡ7ݻ^A.#l}ߠq= a%7}fa"n!s$E5=W3'Ԕp7'L]Gwucmr5_o D >,; ;C6Wy'DW]jL:e%KPiLvw0&a@_+]i%^QAmJ \)o+^e(//OZ s4涌Mb Ӝ!YPGẋf'LuPjo?`+wK?m!U-`WW.s|]lRŸj'GGn[A*hM<,+_Kattqz%_G jWq.dB53TQ0R$L h0-xܷnEukܳF=[JΗ~VR 1~ ܰcg{a֍d!ȣq/F[ո?Nʀ4r/AJ:UVwʥH4?Fr\#˟J\>yT3I}D-Jq?n-Unp{ſ^v=n @=?8Z~sH+_9nr݀,|jA-\@5 Ygj|_(˅IY'Qه-)ܦу/}wqWp*Ҥ{} 02Zɀ.yyp]pC[nbHsbAN :$F|0 uL2JW0p^x7z  {+sW^pBO-Ao}Od)\R-߉ YP->#y*Hx@M=f}>{7fwG` žRd9qK1!sn 'MwKڱFp?^࿓ ;aB&H$Cs9y@ ؃杻 +ku*6=ܭf[O@.=D;CF@XGyXk@x kEw{?,}:eFG_wuO}g_j@*O@Zpwc;6t h.6dIS9u}B(pZ8ׅO8滣 Ņ.y)?8˽wt]_k oŽ wnI\y|xƻ/#$uxs碽koNsg'nӷl6HJ U[]zhWĀKyY Nisgu۶ -;p蟸<}`o[4<݋AeV74m+pnƹB3je!Fy ^8gZے&V ] 5 ǐ&hwp?׽cO7Ė7m}ȆnǞo{迺mGc{'r{Jg{tO)n M;+qن\;dLvp+8l@Z*Zny?E]v̍0֏g69!k (_'`<>v((B0|` yrnv :#WBR{i,zwO!]0͢#U^Z1<|H+5(؍b~迸-;%7h< nW=nbL C> )>V4 Q.x{2#\"䐈w7>KW%hYаm^8T.bq[7&0r~O߀ߊe뗺w D&y/ x{Ń}LŔ#w&s5LӯUs8`4Fq/V2gD _k]@H|]SP͸ew]CLlՕwM?rrK;.?aWsVFOfM/)L @!=C: -3X04cck3Ea%n9y_%󈧷@ֺ.UIL깊fa$Z|Cr"_N Ng|® 5 =Y:z?Vڐrl4{^>wޗb($+7l\DɦL32"@Ps#W?! ݾ378؈bb>NO:G~<Vy`677/u}sxF݂>iYV LRswd8Qh#rcI7PP[6(h @U,4Sx[&;}qa.}MMu1zPžU k%CbJ7XYI㬂,'1زLXg1 I`dg [܎8hhw7a9WwY -`w { c`% .bbf T+ W)CԴ־B-lڼbU KatS'nkemؖ@7 ㆱod˨ [s)0{n#-;hoja%*U[x>YdƱryo*j%4owH P?`"FrXsG؜_D"}D3U+ "QZxyo ϐY$Ų"%R`5N? A.[Nx pGc}eKh(TCE|mWy q ˠ5,En&" ꦝ8OEg^ ;PBYg/u[%^sM< ֱ8R[1~zצ[b xFO;rJc \uQG$ФDѷmX`]uX$\ƟgxT~ǩADE[aNǤ]7 Jl3ǟϏW F&8-t'&>\('υ3cXm H;U- le *DY7u_{xXQ!Gnfě/1ͬZ !wscCC[< IE)J7  V3%Vtէ hCW>yqG>Ƅih^- 4Cqw1-Dhׯ vJ>\[.N\?=çp)C;d |K%ҁ`_mhzL@ vjpdۮ^tQ<SH$o(:h>ǣi( n?}eG> r'WKԦ[ͲKEҦ+P-;gͯy#!}0ESj`P`ůV'0g@ z|+?O}x+fE1Ȗ_ $&=JN7yÛv

jyv8Jq~i^qVk˯ g_#vK^*&C@q3^x)c;= [m805[6 tJ[ F% j‡LnJ}?4xш  00a1O3 %qV6/%4Z-22Ǵݭw(2:-6Aq覭1ËiqAOw&I`Tb0 SӭW3‡৛ϪЦa4j{ߍ~ÌQº'W;$ Vn VKA20MS/8we`̔M3Ȍ0 E~5V2>m^LGMیQ u4tkU*!խW[*Mb+2IFݴihB0GO;|V﫭Dl|&0,4qxF8>kx6[C@'W7mzO[h6 hwdB4 G7A&)觛3l ?!#@:c7cZOib= WЭ_Al$9f0gBe<^0t4駭L lLD0XGը[mhnkA xx<C1g~B7]^3˙I%b ׌k7N8/~# eYDZoi+@ ;Cښ AMF}Z! faԄqF? ʼV$2n @pi>5 $CU~+H7 O|lzeL6(4,Q`ӯf\#Й7>d|/ޣQ%~ R@Y&@KuZV+vL4--$W%a&@Y0,pXJ$#WݴR+Cњ1 JxfzZCuUֺYkz ӴିL F /0jA | @6E?ښڼ7caVwhk۬8̣ny&-ɝh0cf`eaO[Pg/Q70yO/k1 $ASihk @.1<`0U~bZ܌nYMfMWW[Z4^Kw8j{fQ`([talM+5n{9fR zO㪭 m c q{7 ,a=?~5^^'J0͠8L7ta[ ( Shn}Ivi,9|%f*,b@ ab;6 ,'u2/彝_JK X6 4uz:kzj3DVl/2=@.~'qJ'{ -AQ`U)ůjFFShX30f>e(2w`IENDB`ic09-PNG  IHDRxiCCPICC ProfilexTkPe:g >hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATxy-UVwzcOR_{=Ir $!9`1gĎ_p?8 $d<{w0MwAG]GtvdtxpT)B@_Aqϊ C!!0ʻYFeT偪ol?ޫQiB@fvީ;u+ 4MƸnVJqW! &qwӻv\eO:Mt+l"QYTlJRB@ w( 4O"G)'elYi [ج|3TfʐB`F3 țiY[-csLD~6қe 7^Ga! n P'Aﯺ^Zzڠ2<3_]8JaND~4x6 pSQx.i@HLcˀSA4 `/!TwP7uu *;G&?=OSz*یnOa! f ٍ0L?eu:ȕx*Kiaa5ȯ9Hoq{m`TKqVGIk|Ҙz'A]*B@#K wYfEKTzˡq O){ TaxGz*cro$gz# W/#񛦥r{-0!zpAyS9r:4_=s+o0SAaG72O6(?M>dp,Z:e{&Leixݯ!NO4pȓ껰t8Siu'* Mh0a>0߬XFݯWOGdpMiz*WX!0iʺ4t>ryx0ttěd8_s1_SϳcI600SzZG=X&ÌӇ.HS&_!08Ӻ4 Ƈi83M^];HƲS'!XA&T~S ӧ.<ɘμi< #=>*igw9-}`fngffof-^sWdyB@@ܙ2psÇK CqSiE8p̛3ản]I\ 4ac~feInwכes,'HފI} yV*eB@L os̍L03V^ȋZ6X?!dMAKA4apGO[K-Zl<& Sq唥T0d?4|};pֺ;;[ we*PүB`:Y΍ȹ;t,n!`\nn|pO/ 1(a?1Nit Ӈ< S/7JOuU7%kٲ!)<%urf| S'[_෼ɇcn;Ѝ'yU8tM]!@B`#P=3B{g>ża,xʧ ~JCAq0O $CbZFh7R9u~5H҃.uA'S٨&#e{cwso)0p^@'  !  k3l6j7Z9doi!1xdP; l#P?/7!Gwd?$A7SYG8;t;j~@3$e>gsn̘~@Q3 sB`/#1g 0zǻݎ 7|W]Α#2iqʠڔ9559Ք6P6mY x ;z ׉efo=~=!h[f9'AnDOgB@L#$o!whg]𻭬m4sc 3z_LdvJi̸+:Ї Kt@mIVA:C.1@uξţ#a͉&3_٬"ns&nȏCsӂ@JfUc/ N7ȿkgkf 25px}O \{).d08f&K)f % 3.a0L9FCso/ ~kٚ7XNGkoQ9;uF:*f\B`#Peֲ{φ@mg Nwݍ`eC 0l`G Q$>\*k279) aǴ&?!@)N}/,]?-{w?_}7xI.*Gj|! ~FD񾄏xwg4Yޞ0z07fǪ-FB7 ;'Y]V 1 R0QVSMOD;``x. 9b 3>e|w> w;flrZ{a`tc|Bp;f ]R&`<(}ZN!0]ho/nڟ*_hcR zZmkz{ީSVw! W'ruL?506C~)/ 4o1 #S蘭{?[8{'yn ?-?;+7R*F`Gd88Hs$G813~?CvS@ >dܢLOG⩜䩎S7)-$uQ8d u)O7~;x 'lZ?&j<.HM*ɞ:?b儀ӌoK gvޝ+`qU>>lP(Fڍ ?g,3 ?q0@F|8Ƒrå>ÑRVh qr e4V+0F:ɇ,=ϜsOb||t-Z?cF.~T- yxH(DtWB`hz7 ]wk4߽xc޼n; 5x%\.8qW|ՉA|%>+3NTVOή:\Ny7Jc:p~[8 vv{1 f)b?0ZxMtJHR[!!  i}6c>1S .ɿ򖿽]oyU|nv?j5"7x2OqQiC 7,mP-q! f>ԏo AaD8v;YL(M=,1$NNjaUrB@!0N߯ɻbP-px;xۻx;;LA8dL_S))Iwd8u7͞?,@xQ4 Ϲ8kV$ohBVV)B@#P}&$m;vD@:d8(gɊ>HH qGy8 c}CP49?ae'yǖ @P,]>L/ہ@[FopCݎ!^({f#g|GO[Q@]u MB*k S#Fi n{'n|1qYǾ,;V2TB@!T߽{#K-rh= ',,< KpLK&T I})I֗q\N\u77TƸ?x@?-D3a6RtΛPObV&t73 (a D_}LYN! vwcxQ#p9>v$yf F4N}h0 ? G]ݍ7s RySo/Z9GVqo|y"'\B@x'c?MY3MeD?\IQ8H|qʡ0]rÇ+ʷ=i4\i7|U0R apfq҆ǏEJ>Ku-k0e襕UrB@!0 4c2`Ǎ ;57\fgH$<,X)4:"e~q!R`z4B >oo0d;DXJ(,{}.'ﶫLeb7>@ wrINQ.:Q/3LOY|s G7À$P=9! w4Wks L)v˴'Pb~d>\=RISy ! D W9ys G K &#pO]Oéζs$MݢKa2B@haKrͽʹJL_JH p\C9eYVS7i3OGn@<4i`%! ^F}!È79r} m*A~Q &A'5n82B`O"@}Il@(s©zdKdLvm?gzS8yPn*!4 ݆^ŅB`{h3C143!>n ,#q\ o7> ! hBJ)0S $cpRQTμLO=?o*~B` 0O| e|t>/hOR=7Q&~SON! @3MĽKRNIM9uI5m .ayycN*\N! (GpS'=dp#˿m/@ơ<%z3iXfŅB`H9aԒatM2QN=i^vMrL IDAT iZ .!PϧB@L;rI곐TpӆQgG}^̎tRRR93~*c~=/#QB@!02:h 'zӥav͟$`0”]X'B@=x<04 \:v(!(~=M}B@!04/1! tT/$/u(.0EׁCTFpiO:B@! #@\tQ?O$h4FLSGB@M sRnIÃʡNNanayL񦋣N(TdB@!  wЧy0m[SnQ.zN]8ey^B@! FA : ?әV/.;MBG:FYi< 7G2! !@!z^P24dM4;m4] 44N}B@! !rGf3z4 X}pTB@La4UIM QE.t26҅B@Hz@8é'&`#hpÈSAXN! (G菒:uJ *k<;v.j+AyYAH.Ӊ@4ɀ 9K0wn` JHM7ɛdMeJ&B`u>AIQOOv=<) 6o0lɅB@l@4QYiVeTx ť7L! G菂 gTQν)I06xozH&B`T'2h-ۄCM࢈z&v# KDfv:z7s 7Ğ\lտNox"( # Apzvt)54gme?I0F9=bF>Ģݧ ,!0j@{vE˟-w$(5Qà`XB/nv2$ #`&-! vT-"6ń/N1"V;[ --|P gXʧ-CeB`{7Kٕ>V}P{-%s0~SyʋށY[nbM^ ! ۇJf|;ǵ~^I^I(#v }l6y2gO՞,\:!_! # `j?fW_V^C/$يɗC+Va|!)8 J:?@N!0i;ſv9dZp$xh0)[0J x/AiXP` +ze#%d:! y|3W?cFp!d=7kq'9hF@]y뿐Ei@i8 .ekLrB@ @@Uast\mk4?[jďhi-iNnx/A!GPzh@H~gpDR8V퉵Z /.# `oNy6n-Dy_˃sr! $vdl;: gQՋ2_farapKa0GH!C^l/NO儀; @Y @NX _CA ">\gnp|/+N8"?5Խ,/;7 los8[j\[ K:|B` 7&_ 0t4/R&3GNeM\QN^`dI#N ,?QPMxB@l'2]=>d_K;كtѪG:lob((g˥?5гӿ(ksVZZ%@C! ہ;zY~($r%EBs1O}zya$~c"oILn딧P*ȞQκm^z:jj]SL" `xmBk J^jω4bjxa@vhPv`nQ>  +[\G:乁DPa\[hs* (P@" `xmB+a˒I8檔&C/J/lav!;28;qdv|xvxH6?;:#4E]7 =|LCۃ U3Qhс`-$cӂ`]Z')f{Rk);4w *4W+#` |"!\K`SGI?B@FTN{ſH oIaoW-f^ td>>TYnrr2˿ u7H,̶>iqO}XCM`K&M#&bU׋AtieeU?=\;s:Xо 80{ AdE<9[0A9' z ] /qֶ 髀AB@42nB!F"G0Y*\}N@JHG^: R eN![3C$(=4%= Ip? Ń_.0@\W~2ƅ `w1"$q%4 چÚ|u[ a~^lֆM~V ԇzVC#yѣ3^0 X{EBB`$`RYYY=s6ܯ4S#+F@iu쯕 h`%B@l[ENvh]{NrOǻN$3o[- {b8 F3|[2ۧ ^B9D ֿ{8^Hq́Ɂʯ|`[HN!dl51 y҂Psԯ)`a#aql%1PuW@gߕ-<+.؄@ ^<YW0&!dC.JZ׳>&j(B! 6 %FsZ7 `j&Wdu>v\y.kSOm}7mzْ}hHRH"4n|8 b8t2 _lb,,',26wN_ 7ȼNVd8Xy 0?7zms^%儀A@fВ#бyiihXwA@g>nPj6ruw Wt2 #=ƀIкcO# 0]ضTPN!0*2FEJz;c@do4X8j݁a`# кGq/؄\ {|>ju00@ևf J#F#OW lm_lB%3fF"B@L-2O6jLڬ־{@VՋ'J`+_CCeOE<m7g u1ok(/ !0Qn"`]yR47FZہm׆LkžH? flAJi7Vhq=l̻ύ70 \xɫصw[>z+. 2Ckl *o\qu>?$o@.UϞ{w<4z%m*?r#0 ϻ#-Y]WE (P@A从T̀Hq"`٢NsTÕ?4bNiP s3 <\ :"ݾȗ5| >Dc`_! " `(|s?pn P?WZ # SWi - ? #Pmb(7d붓!`48\5{c(pqR'< hBH2!ee&@)g#@opH$~p߃ ج'w9 A }' @aDfH~ ЎKB!  z &_v凄k޵-}zM.PwG>@mpS$ʷk9& S ~c>@n.۳ܯi'@! ! @"P_`#wě1pІƴ^:ppl>ela7 W4=0 y s s;F@dkl.B6 B@HPxbu _ *`DXp/|Pzixx?>'Qރ0f c8^+i5^$8ީxðg$l_?/?78B<@ύ#~_ 01`i ?.v 7ڨJB`# `={uԝ Ll 컲|q`= _ 8G?=~?=1Cs IDAT`p /~L;HB@82 LvU7?,[6OWws`NLGk' V?d1`]Ȑڎ ?+vX* T! `nX,PTɫڕ$ ǎ;5+A d{ԛ~o٪~hw- Z/>0d>Ҝz@9]~.k;Q7 T"B`0w}¯gnjY%jlkE%k C?lfpY0] @7?|A< xʡ t$S ){2h-8ʜ(.-nSm ;U}軽 {,;d@`sA sR77cnjmP/ת (S ]bP'?ym R_A㕿`-t(GV'ACnA" o' N p#X2^1P;dS | zMe٥_c./{Cn߱>^*sc(`{;ߍvRGz0LCrtXe;86_B`0]{O\m7!ɨp~o\x.+6ZO{]88h y{ۧppe/FC~+Pa=F@*F|!0={gc{vYJjL-`bO[}[/6`:U{`7%wʇP{Ŏ h(h A@=q6~ImPzȫ>1V?XX8]wWs l`8Hq>2 Cp>$>ߍK(0/W4 `ƞR]Z &ŲhG ?v*0={L-2 (~nC\;>ŵk(B!o@,~$DTd"Cu}Kw <{?;[OOďaiD=@HGTO^-}O4P! `n_nZƽd+`7Jv^8@ǏXY4nA h-e6@>AG/@ϑ3+t=B`J0%7z/]fk%&vq.&z837l^_TnV?۱' :({h8Eː:'ɌIhi(P A@qՋyEm""sy+OA%$H0Sgm[|(`~vɜ׌+/*)\ M$(-h60 l?P@B`# `=u\ߦ? KAtUcӈk_,ل[ VğRӺKH!>)^7 bNSb>F|ԥ)ZԚj~1]dZ5 v xEN?;}_?WfsOx8FZN1+Ǐ0 8 l/?;N8ʚMFCg;@st{S6XAq=QB. hI椏tDZ zfK@V-eNj6^*cyjMm _8u&  ;|(`m1/M!Oh;/YԍU!/-2݃f־~Vu bC?k}3Mp}Ze"]݉w V'|ٌ!k}nơ=P{H=uN>-}u .q'~{%](Z@{{c -Ropnrݹ 3He(S78@*iO@0 Ÿ@P xŰ@U\ q?Y>R+T,_Yٺ;}P0v= zS,s?7`$^XU{ӏ{{Y'-]FhE,OqMy;^{|( C%@t{[>oF +V/ uwBCUl{{:?Q\^7'Rj I FceZܩo,]0?Ojա󡀘яx>|\!F[.NY _OZk60a(n $mF][ [gmLA t*~WwVL+P@e@ ?0 1)JnD O\tֺ- Lcz 0LRvY^~4))lUߩo.ZM&Kw PWW3lvm0hV껨j bno@=^jK7.{{&MC} -uۮKk"[{{=aCes|>0sʡɀAN^tW> l (k]d* @@MPIXZP'$*E`BRvdىcU&>E*C~?_\0$2&"\IZ]8{zlGiV^'o1;v_ֱcU}}#dhp@E~' oc/Do \VUf_s\ҧ E@ޛYϾg׼20ɚ~?,EǺހy#t( ZOzv0;=Ԩb ZG+Hނ|h`}p?گ>y|( /" `Bo4Uk >AC *!#7F&tn9 쟉jAtsCBc[{)n?00b(b 9! &{ofT&u7Ka[A"ʀ^[9 x2 ^6 ae7RS9soiy `=0V dL}Z^xr7I%߭$wZͥCWꤿb|ba -=UT!+ \~˿_]B`0ydjR횃BH~)\a8Yٚ-1_?Pw~Ev VZ:`* e`G[u 0 G9W.'B܇+V^r]!0Y1uYq{kA!uꇅT^VZn?~_ޤe}CW ^^Nf2hAy墢_@޼tZl^v ,P@L2&fLcUz9[{HY`dOs&|4k Q/&s/&FXF2dp‘0E$\QPa˖>$pX`t3Nb(!aՑN)hRCo& \d-4p=Z}' VKTLB@n!:445br g~{@ ,#b& v` 0O vy/z/|403T0/vkj\\ mh4el/mf<=lن@"fMدx"|`9PNG@߃ڵlxp*ԃR?rޯ<~Yc-le~f޻ɺ7c!==h0Օr:e"[ۆ|#'"Pw:":n|ݣk z<=;qp3@δ8 -5[c̜*J~rfǏݟdsa`t(ߕ[y7BupB`Dg W_fT-BrC3 7/-97 Q*1ca NFg$ z?#/[}57nɆ[ݲ_Te}ă٩[ߞ #V C Zn@Hz y⊉/{W ׋6r1 B@& hCE'3^tڬ Gl">9oӆgKa s@3|lK\o[/tq˟V_=e{B\ G@c34 /ZWRH++Fl;c }8.ltÌ/Cozh[2DC PY=+!z/ _C;1򳿦Qad0:] i&@[]n"qzn8}_ z>׹^|x]kG픈i}:*2#qcAh@,vȐ^8q p0#v; Nlvm RFQI6A8ۧhE(8|3S ) ` s;;th= ۤy-1 .°',Y?׊}v Ej>@B`[&}>ȕҬA#/ԫ]K1pV,oxfd7lEztZn @Jk?D 0ŭGl#l>x;@|gΧ՗.ǙmuM] eh\0-|#׏@J!4MǮs޲GO{Q`\Ny&䂲 z< c^mj>/v;NQE'.=S汒`hx@k`㹦]|[ϼ5-l40v B~Ax :>*|*&  &_{/Je2ɞ}0t);a_0BkFອ-Dw-[u/a},Ѫq.KZS /8p^49! PUd3 &Qʄ_w0:XN}v'7:]1hX'[3aVTwWz"Xkr\-M,̯Xх^d6w @+ cDg֯?ie7sY.jo@u~79ql͈Kns` @w=ߐ?F:x[Y|X2ȫ_#GޏVG_\{g5 ү2 ?߲-hSVSA)ǝ{cg6]xRY*Gߟk}9a[}" b '{ 㠜/> IE ѱM"W?S)d ٵOc mIzi:>[=RnV+X*8?dd[Lc=~p|LV?a0'~I>/ \DeF/T! QԹʔP.  |'|5pH}|#w|~A y-i>(JG `"9Vw| IDATXܫC~Ho (s~vi|0Q?Nty0*0  ng5[dŧ5i4Cm|2`R{?`[l>@>&q_j T gU&7O/ZO0ګdמ@QTu#!'9E`\箐I8MYIeԣ,91 鷝~LK@t賭Y;'p7w/a/,L[c87`K*{0i۝'!JR"{|Du>@g>@@>z _'QE{GW)_n T ꄴMrPm7?d`&ߗt>'xFg& mD^ai9! Ќc@cߎí^}F%h)"T:@c*phkDjw>)A3/>kƴiI0OP~|-i iG@?thylW[aN{/uI$5J6ck6Μ|8;|[aw(__ J~IՋq Qӿ䟝z}IrB@# Iƀ@uKYyXilĤwK Ma3o?v,qۉP||tfc 0 #b 4ʯB>?lE6ŧ5J!Q@ @'Xҵ׬?u '2υ /v>[ZYe~bKY WMsއc7U$~oC@@:\{穚4PGaׯxK|: |w{0z6\>¯K4O:[UMf e`Z0jNQM7ʧDHNY[F򿫖c-tt' $HJ蘭m?nM[li|hI.|+]UH}j D$<(* W) (UH30V_+i U*_$g>NS4w>\l&k >{N xڇ,5(/  X]}g4P@HOIUG1מH2$o^z/oXl71}k Ֆ 778i >{#%&N^drU_~#)y^\k%{~2):o$EO`D0o{m5|(71Ȳ_[4*#?%*в!=4Xi<|C m!^|/Dm|+_ϤCo>Gl>@-pLÕF@sh(ROsp4i(HȟfdLӵˮ¡|Ws-_}Wm*Ͻk]lDө."Pl J}V8$1>OXB,e9{6?b3DU?;?Ɗ }ʹaEf9qC6}ށd:xa@wCzU|RVeѫҡ*W9!0;?F˭jˬraVN×~ w7).ʭOy|/|G{JzC4 z"࠾?E;O7g{3ex W]}'V(F;tޡGc {r{4HdW>'O7z^lzϼX g\NL2np {_fGw_xw2e㥩od?dpՅA0 yb/r2[bE{qn9{w~<0WTt#SlX vQHWd;;uyވ~}l6AꩬŶiw?Sw37J_L_iOd m߯qu-C7&?q>[^|9/+Ⳑ>WZ=?(Nywzv_(zlKNL 2N׮3j:C}Bm!$#rY+Jk b!{O^M Xd12~PT)rg c^/h)'pk'|z&#sN==wRkf]ɧDx) ҏfAI ]OX0%'pkt_~$7=ͮuÿ kѵsO `bumU«>] m'8/0E&\Sd&_zg[KY@  (tp: y/WܼV7bx(_mc哝;no+H| JRwϵg~xͭژ92i IG@ߡ>嫷W.{OaS:kgܻ ]e ŗ,S{#/ulc{ze=o-Fr`;}}oن~ 8:%4x>wEt=ܟ.柅 R62Z{fgMs_{9fk|=F&J 4>]eٍF@^O';f߈wWy/AO_ض 8P\|$_>C%WMh¤^O2, o4EN ">_˞3o-em쒷aMhPl#0L0^ lAly:Ol(/C=_$WxI}R#B0|={Kԇ "OOwӮg}'yF@v/cw*I&!ܼ/ #~kvؽYW}%|'l~ | ,U:['h(t9/c+^k+9!oA/>ӍWouگ_SK6my)Ckٸ?Ŏ'N} %Y^}y34e-hZ,ؖ7Lll8P(KR)@9TR 1!( ' L9fڥx43F%w~}>3_9_ӧOߜ[X}?GwGl7o_ D_K>ZeDzTґ;; J.Sgzqh쓧Us܅3zRPJwM>{8K$5,׾yة=g/j2矶>}ov{Zo4עݻK|_$7sŁka$\#|}I$H*'gla x[{Q˿#^(\G{e7PH(ᣀ!5X=! g H#"`D]AxxK?]xG֞ ]8; {nIvR{x_;&q݉p-ߛFX/RoYJ .ҋc덀;\A+#x\췺xO.Ll=UvD|i&6?nVnƟcX݋`(5 @k;-e ͓RiNO?(@  #;6a_Z`3S%'# ~p/o}7;w=ob?L.twg c(?Dt4@07˖^~(+/b"`]dwd|r|'GKpy翰pS޷Z4<[oGD>|$5!0' ǿh?(_Vt[7*B`P0"g0?&aGhG~Qd@ P]3}yil|<˃/)ܯc9XF p 5%C@B4(++F(y"F%C~9?^6ٯL8:\w>)E~ lamCرYn~}Gٹz#oaBozW(Q"`O\GǷ4ٯ0۟EtH$|$Du=k~ S{ë~vuɾ/cւWUy! zdPQ&67@}P0gj/}~6[Yߢ$I[$y3'bCcޏGtV+"!Fysݟlcc{8eڧ.n$#絭5G oZ4U Gm}wSv׿`|7d}^sӇJ_CB9 `JcS-s?<hNyih?{Q.'KF@ |ﴦIn}٬$-,s䶏dxorh`mNė"o}%hKOZRqFw챧ۚOmfF;hO#G] s&-!0J(lU߉~[9\&S>ҫJd*o_;TVH-"5?Nz%?bZ,(h5JH0a垘d %5v ߭=s&nj0 [Co̮uޞS tCI"dτy&O?⩐"{[o"ݷX|.@> p6go"jB%5.ģ԰G]bzj:}ſawGnpvM.?n CXK@%ƦmXvȾGu["xb2;a;,ہW`-on"39(%s(3(U xo+:=࿜-\xߏg9#?b |qV+wو&*] \ s)^M@܀E@(  ,;RϠ^+upwf}o&[iWl[»]Uj'~-#o]S 0C?ŝ?M._(@(1@EJt_*>USBXB/tu)Gݾ;;6 6hN?AƇ6!0(baWuSSvќK..e{nȾ㝟 px9Ls6 ~q @Y][N>6GRȟ> IDATw_[Qw@P7( mdҾNW_;7,XӖlaҞaVÝ>W/A$fn F(Q){wxJER5ntu=aF@ |]֡5)釠Me*ҷga&Oڝͱ Cpδ dkH wXX"9f"#)*fi`tew2a@@ b]'2,;,~f>ߏW;I6iQ@7\ʫ֊q .rvOM1u@E +JvT[ol37'ws݇?\B3KHr(G~(4Vs8|79k(gl3(Y E?n}KLy^};gY-[BE¨ QW7;h(m BP/5N GI~9o#A$FԌ>l̖%eYЯ3&-|4;{n(tJr4wHP'ӟ̎=K;֛3[LjK[@5#\yžG_3O\ @;~Ł (&aA@ @ 칇~ϭnLu/-˙[RXsZP^wQI?clUwU8GͅgFN~W  53`PPgwׅVQyTs[e[TW+(78}Gqz/l,Wv}`7o3?Fn;&4-;?!Q}mTa-٩l*DnqJkY ,Jz~6袭~L*dsQ0H4J8cr]|->M~$;([鈰_D.FvCpoس `l%=W?gL4z3 }r_\k !@ex(< C܁l OOL?n1?po>|[EMps'+[]O]_ Ry5V,{ +=&mU졠ws6|#_D\..v^l%ò.%O_gw;G׍0 ZTٙl>ዻ~3_9O릮Ka}|eJzOL?z1*υOMս6_[鷲6,\s>cπ#8 IJ\Mא8` ̅NRv|}g6'^"%CΝ'{ғٞlbjcW,jE@ GRO'C^\\#Xg§|þx!PFNl,Wnxۃ9Kx\xH\P03Gо0 H1 Ke!ϸIA|O{t w9 v[hz~}.{)Lţn_wQuO\uOJxzSI w|XK _+? ! zGu1_ ka֫}~xΣ\OJ|KE6xnbQã̵'ir_%5JJgkka,t瑿߶??VD&! . <>âY(H'C'1I*BrD@ @g5`Q `P.Ho~G7ߙ?n2A+frB׼#$ޘ fI='W"E@ ՋXo~rX2+1[Z>ꪷNK g/_D}ⅿ^|l~31@FCKk,fuN <O׺:'f! 2<;t6oԇ:L{V0'wqw _{D AQ)o$`gpW zet8n( Q!!>ĂGrH&%Ct*qǃ`Ѡc\RE!pfsվ/^}jo40v%;ZǃH--UI\2H n${g4:1>1^vWJ|# ]!y9^0 =aq{{ǾTv1%FY @U{B@\ďpPH>Oe ^a|=p^{$GY]`wo[@H>eka٩-.W!P/J_ !0}w=/ܐ--+fX`OvPB UI{$;$VWq{V}=ZF =4GzwS;VB`#$`y;Cّ>bdlnV S U We \/gpU/Bx5! .cMlv<۾/wgGO~6{ 矶ޗMLd6qpV>1bXk Q!0P nu&#^;];1]71v8HnyvadveO"`žޛoB6XX6ƺm#$LMNeSc<ˏ .q0K#E! v7Mm :; bvg^xmE qc(Yr7mAt>L.BoqEf鰿Y.2g0+.z)茏B@JHhd;] \wanHhI.ڧn/.>ow3 $h}zM=/n YXZj՞ܓ{KMͷ.[5[fF@ @i=#pjc),}lvl)")=¶raTܟO^p8 玏/7;"#<2 ! zCNWسmT`_wPMEl%EN C^ئ&tv}*^%:#3> ! F3 oI L-x3Ih/4!oj~`P/ H oD+ 3xa^GYl=Џ `tΕT!P TvOUO! %NB@ԋzWB@! jA@ @-S! "^ջB@ZPP T! @(.B:B@!P/J_ ! %NB@ԋzWB@! jA@ @-S! "^ջB@ZPP T! @(.B:B@!P/J_ ! %NB@ԋzWB@! jA@ @-S! "^ջB@ZPP T! @(.u!YWCѯ8 ! E`';L ! !a;! 96v呻T? /B`P0'E$B``Qv$}! A: P;mzS&=#k{ޅ-. If9n'B`d*pLv|vh1H/E1aM3H0г{ @.jp$?YGwEB`n(IDZL}7zݖ`Dh@PMn oUB@Ftp37}a7Q['mwЩK՝Wԃpku[4)]8! M&Xh\tNh#vvK|)}ɼ7蘶 rs~(oKB`hVZn浾tp|6q\堐;@G,絆N'U/}'>WN+9⤇_=S+A! FR.k>c@O7?<@W8dHieItp)D<<چu >kgN"#3̳-c^M!  кnB@. .k+1^Uum S͡憓M.REBA:cA+F4Oq2;uiVPA&_j]|O3@?y}.v6cfipB@H_r\C u{-]>SMG8B\ۧꇶKL馃oq;A s_?vTnn6w{߳DRj.oԒ! ڍuxMcm 8#?VXtFyhn@dyף<)'}2=l?`_QIva5KvUB.d\.^a"ĄWy>gC}b}l Z}יNSL._y]6X$*^"D! yv  .hliÆ 틶͆J8*ϗXw| @^)`C?/g'э3@00:>ț\97?ZBGa7}!m5^~_j* )2(7ڶCv^R:n; /zAO}!d#+lN ,~Z`b&uoȸKB@!k2zn|5³_h,_c`ṝ n(b;۪w: @|)PbexC{Aw|NFx Fors%$pd^?DjEB`'(_s[p=/aqG=PolfgO|Os 6:/Rw@b({}`&O?c_‰Y_iAߚ,t %VE!P ݂a kv-wYc#gO~;(Ēfx[b:(1Oۡx;L0Hi n<%z|&c3A>$d!7di?>EBh<>NFvvrK%8=/z?~ CpH mOu =߆%a\Q@XBb#@ }=up-5ĿfΒޮL/yF(t(Qεe;u;N=: n H=(N"VuɥOAO=?|z 7-6landri$ 4o#M0 7V5GZtB@ZʏFhF^6/MtLpE1Cn%+O|6:a)mcWsBJG;u'8IDAT ˞Ibz<Ʊ~7s3 7ۖ &lÎg ?>L ^CjZ3!9n! @%`+Ar7?.! G 7rC#\_G@!6Tm#繁:\u')O ねq~cj)a~_u" ~3\5 ral2jCbB5 XcjS0%8uDBRnS!{Z ALNMG>8kߔ'֝%ՉvɁ/5B`!J)䣱;~ˠ6'"Z"|{W7`OA@S ŃAr36(J_J v=vMx?譑X' hsMdS;|<v7|aCc"纠/tMm3ȅތ!!7d7><cixknwsŸ>##xT=v|'[y k!^3  -:f ~F n>S..nZ8P 5vQVB`T* ];!>!pON n\x's/|sB@fyAc;( :g}RRV>㧞)S sWok{ߜOb k=$%>].R~D@-_/=8rPsEqJx9mcsWpy><z 2CG>NJɀU/]#vE{ >;m >3Cy C9x}-Ї5$ Ag@:wCcنx5N<ӟӏ>@N>UɁo/U; znYk+dͼ%E#QD?4iM~c6請nU},]CkE`CR$M9:=B@16]<U࿺xٯ៞9ŧ88Sf ge'}烾a!e~3\  Qdrʤ!B`ʭ-H:t SǶJtWml1*|b310.Q! B, %f4}XtGϟ9Qseqߪ\.v[oD+~V˻o QyAQ@){ L2de'rONNnݷ'&-}X(1$Άr0kƻf=Pq Ǟ[|ν6VZiUpz|}eا)`T< }[)cfޒb{n G@ϭ*@S ԁv-o;nsU3^11of3+%=B@fϏź~mWϞ[[9}fu ;@hP!SɂmBDi ':OaGQ =/@Qc?< ~((tkG:!  S=Ez\3Q@'2xA|M%h٦S)ԥ yRkLp-zJ@qbpڥ2t|P?*~c{G u=,*v*=%ZvX!yPzR򐷻/EinþBߩ)]6m; zP='f0l@`>)?oLKm6;nNueB@\ ;Aß2uRGS>CG9EMa(s:Qs/Q]eXN@<<1'6 ^ E RF?S}eSJ׉B@ NB6ܠ#O).1öD &x()b PaHyl^&/ԑ7U(h6GS x>)ԙ9!ccZ>)~RmI'y[-UuOQǵ2KQ uvt?Lj.t(13_ـ xX =2KUÿ[AnnEz)(UܪB@@dM7vzB6lF=Bm |ԑTz,ʤ$ ࢐'^ |Q@1:>q$2hj3uI,Uމڛ~Cqi)}eS(ks=Ö05{bPaCL)2h[*gAܠc}ԅ2A=15U-6A*UtB@~":P [B >7׍=R"ovSW+$#q2L4!='xnS:nG B|P6'e⅀;<|(RzhI``vԡS]m0{uz@^B (c>v(کԙt:`VE}]d_e$Oꃧ vI;ۃo&_l (.S/*p2)my(R <}:}?Q(Bz9BדG] d d6id)ʾ=(-O?G]B狯⅀Â&}>e^'JXG[(!eAQb9zک)ۈNrЃ],D18FzhRVQkl7֡.6G2lS|GQ! 0!//x'co:Qߖ筛 % a3 dP-c' z> :*/'eec{6J>+B`'^~JO]LQ:nL}^&OJ?/{۱KQ₾j-Ðt !<2N xRtP xl,>>꠰.xبBzOT!0J4yRyИ2(Бe=Oc=:Сl%KQ膲 K0;;c PcA )xnƆzгxA>ABlԁV齏x! ueP{y<|P){mt铢Х ڬmnw?.).uL{L$t,e#@<}|ݘoFۼeNT!0YyGS{?_%xyPy N?$j=KC }2}9c}PyuAQ|}/Wɩ:B@ #W~86OtyxI ^|:= Cu BO_ߏב'E;~zPnKq:ӏ:P)ڠԥ(t(%PWԫTplucÆlS2u)  xXB`TൔeN9lޗ|_~QKu_[a[FWţ/bڋmuxlyvn ! veR>^G>{' U|=.AυF-l[ z޷m҇rL{:SW#B[ r<b XG)4bUmW/Y`xcګ:>^|B@~ kKt'o#OJPbJXOvF'W񩶫|WЂnW[}IS>N_JGQ! (# .yԓB*O\7e[MߒN @̸={z{>b9% ! ˞Ix|lUqU~}+HC`&o{N:HShB@ ݂cʞ*~q]?Qy  yB(YS}/xڼ:UՇCKH'^gUbٷb)onj_N jd=ú|lT{ЖK꣺,B@zZɯUʯWojH.`YujchJ#*F:]{ߪ6?U6rN?qPO7۠o''B@\.r;VnH!0ާvԌB@!0B(]B@!/ I#B`病F踵B@! v5է_/%븅B`W#`W~B@V3B@]F_UIENDB`icnV Cstimfit-0.17.1/dist/macosx/stimfit.plist.in000066400000000000000000000025031517235503400206620ustar00rootroot00000000000000 CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier org.stimfit CFBundleDevelopmentRegion English CFBundleLocalizations de en fr it CFBundleExecutable stimfit CFBundleIconFile stimfit.icns CFBundleName stimfit CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion @PACKAGE_VERSION@ CFBundleShortVersionString @PACKAGE_VERSION@ CFBundleGetInfoString stimfit version @PACKAGE_VERSION@, (c) 2003-2011 C. Schmidt-Hieber CFBundleLongVersionString @PACKAGE_VERSION@, (c) 2003-2011 C. Schmidt-Hieber NSHumanReadableCopyright Copyright 2003-2011 C. Schmidt-Hieber LSRequiresCarbon LSRequiresCocoa CSResourcesFileMapped stimfit-0.17.1/dist/macosx/wxmac.icns000077500000000000000000001100451517235503400175220ustar00rootroot00000000000000icns%ICN#?JUp.E[b&Ȑ̀++b ݀"DHP!&@h& H P???????????icl4yngg |vv} ymn |gv~v wuWiv2K|vwi;%Wm:"20 CB òC$0 #-3  C$0 C+B Licl8yNONǥO*ǤT+ONȣǤ,,,,,O+     +@]:c:dNO   (+@@yȣ     +@@ǥ,    (+@@@dz     +:@@:@A2'   .+A@:@d   +@:@@@-  .+@A@@@eU    @@:@@A,X.W.W4Q4XQ@@@@:d2223232il32w> Rs  R    R  R   R 77oogkjkjRȂJڀ9;1717ok J9=;<9;;)Ȃ J99<99;9:Ђ J;<;<;<92ȂJڀ9>9>9 J9;9<;<;, т1B9>99<:؆pu sدu s䲭u s诱u s䲵u s诶sSs䭵99BRBRJBJ9҂JNQNNL;毲lWBFBD9ɂ6) -Rವr_BJ9҂B%--);r_BFBH>F9ɂBҀ)01;1;wss_BBRB9 B)-,-),, r_BHBFBF9ɂ B!-.)),11s_BJ9҂ B,+,+,+)) s_BFBDJD9ɂBҀ)-)-)bJB9 >),-+,+,! CFJFLJLFHNԂ)1)-)).1؆l8mkich#Hjt:U.Ut;&U@;B@ [-h V - n`Bm t0$  i P@ j B P V w`????????ich4yngggg ~~v~vy gmgW vy~vgmgv~vvy hghgn] vk v}vq gvw$$#$ ~vm{ B;C gvQ!!;2Wvwir, #$#wwnwa BB[ #$#$* 2K;BB:  =22N $$$#4#3B=#. #C$J  42B$* #$$23޻]"BB;2KN.>#ich8 UȪ*OȤȤ*ǣȣǤNȤȤȥNǤȂ|XX^|^XX^|^+ǣ     .]]]+.    ]@@@NȤȤ.   .3:@@ȣǪ.     VA@A@ȣǣ     ']:@@A.     :@@{.    .@@A@@@/    ]: :@@:@@@.    .@@:A@@:.     V@@@@@@A.    ..A:@@@A.      ]@@@@:A@@@.     .@A@@:1..  . - V@@@@:@@A]{WX]@A@@A:A@Gd@AddAFe@eAdih327> RO R+  R%   R+   R%   R+    R%   R+  s R+ ӊ砆{ R!  ӊ瀆{^+  砆{R!   ӊ砆{R6!  瀆{^ Ӆ砆{{R^{R^cR瀆{{砆 {ۀ瀆{{砆{ۂ޺瀆{{砆{ހ瀆{{ 砆{ۂ瀃s{{{{^ZOJGkcckckchchckcGk~ZckhkckhkckGk{ZhckchkchkcGk~ZkchkhchkchGk{ZckhckhckhkGk~chkchkckhchGk{ZckhkckhckcG k~ZkhckhhcR{k~cckhckckRޠkIsZkckhchkRހc599A91$~cchhkkchRޠcA9IschkchckhRޠcJ9<9B99IcxscckhkchkRހ cJ99B991$skhskhRށޠcJ9<91I$1I$okހcJ9 stimfit-0.17.1/dist/windows/VS2008/Stimfit/Stimfit.sln000077500000000000000000000140271517235503400223460ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Stimfit", "Stimfit.vcproj", "{BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}" ProjectSection(ProjectDependencies) = postProject {F483004F-286D-4112-952D-F0CD8FB9FB5E} = {F483004F-286D-4112-952D-F0CD8FB9FB5E} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pystf", "..\pystf\pystf.vcproj", "{2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}" ProjectSection(ProjectDependencies) = postProject {F483004F-286D-4112-952D-F0CD8FB9FB5E} = {F483004F-286D-4112-952D-F0CD8FB9FB5E} {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} = {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} = {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pystfio", "..\pystfio\pystfio.vcproj", "{E89AD553-DFED-4B91-AA10-E237293CB7E7}" ProjectSection(ProjectDependencies) = postProject {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} = {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} = {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libstfio", "..\libstfio\libstfio.vcproj", "{92B4C096-5847-4B22-A271-BF2E2B9A1AA6}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libstimfit", "..\libstimfit\libstimfit.vcproj", "{F483004F-286D-4112-952D-F0CD8FB9FB5E}" ProjectSection(ProjectDependencies) = postProject {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} = {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} = {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libstfnum", "..\libstfnum\libstfnum.vcproj", "{E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}" ProjectSection(ProjectDependencies) = postProject {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} = {92B4C096-5847-4B22-A271-BF2E2B9A1AA6} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|Win32.ActiveCfg = Debug|Win32 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|Win32.Build.0 = Debug|Win32 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|x64.ActiveCfg = Debug|x64 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|x64.Build.0 = Debug|x64 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Release|Win32.ActiveCfg = Release|Win32 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Release|Win32.Build.0 = Release|Win32 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Release|x64.ActiveCfg = Release|x64 {BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Release|x64.Build.0 = Release|x64 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|Win32.ActiveCfg = Debug|Win32 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|Win32.Build.0 = Debug|Win32 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|x64.ActiveCfg = Debug|x64 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|x64.Build.0 = Debug|x64 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|Win32.ActiveCfg = Release|Win32 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|Win32.Build.0 = Release|Win32 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|x64.ActiveCfg = Release|x64 {2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|x64.Build.0 = Release|x64 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|Win32.ActiveCfg = Debug|Win32 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|Win32.Build.0 = Debug|Win32 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|x64.ActiveCfg = Debug|x64 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|x64.Build.0 = Debug|x64 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|Win32.ActiveCfg = Release|Win32 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|Win32.Build.0 = Release|Win32 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|x64.ActiveCfg = Release|x64 {E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|x64.Build.0 = Release|x64 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|Win32.ActiveCfg = Debug|Win32 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|Win32.Build.0 = Debug|Win32 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|x64.ActiveCfg = Debug|x64 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|x64.Build.0 = Debug|x64 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|Win32.ActiveCfg = Release|Win32 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|Win32.Build.0 = Release|Win32 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|x64.ActiveCfg = Release|x64 {92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|x64.Build.0 = Release|x64 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|Win32.ActiveCfg = Debug|Win32 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|Win32.Build.0 = Debug|Win32 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|x64.ActiveCfg = Debug|x64 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|x64.Build.0 = Debug|x64 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|Win32.ActiveCfg = Release|Win32 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|Win32.Build.0 = Release|Win32 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|x64.ActiveCfg = Release|x64 {F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|x64.Build.0 = Release|x64 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|Win32.ActiveCfg = Debug|Win32 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|Win32.Build.0 = Debug|Win32 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|x64.ActiveCfg = Debug|x64 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|x64.Build.0 = Debug|x64 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|Win32.ActiveCfg = Release|Win32 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|Win32.Build.0 = Release|Win32 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|x64.ActiveCfg = Release|x64 {E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal stimfit-0.17.1/dist/windows/VS2008/Stimfit/Stimfit.suo000077500000000000000000005400001517235503400223530ustar00rootroot00000000000000ࡱ>   .*% !"#$&0'()+7,-/;123456FE:cPBn@?QACDMLGHIJK`<OimjRSTUV_XYZ[\]^>abdN=fghx{klrpo9qetvwy|z}~Root Entry)_AProjInfoExTaskListUserTasks$DebuggerWatches  +A"#%&()./032s68\:<>^@BDFHJNMRQVUY[]_wbdfgiklnprtv|}~5жM-+C C:\Users\User\stimfit\dist\wC:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\vc7\atlmfcC:\Program Files (x86)\Microsoft Visual StudDebuggerBreakpoints(1|DebuggerExceptions&DebuggerFindSource&DebuggerFindSymbol&io 9.0\Common7\IDE\vc7\crt^c:\Users\User\stimfit\src\libstfnum\stfnum.cppDE\vc7\crtͫ4ͫ4S$ A+HڪWLl #O¤EL%ү##G}'bm4S8fLd9Ll #O¤EL%ү##G}'bm4DebuggerMemoryWindows, TExternalFilesProjectContents:%-DocumentWindowPositions0iDocumentWindowUserData. |SolutionConfiguration,QObjMgrContentsV8"ClassViewContents$ProjExplorerState$rdwStartupOpt=;StartupProjQ C:\Users\Christoph\stimfit\dist\windows\VS2008\libstfio\libstfio.vcprojC:\Users\Christoph\stimfit\dist\windows\VS2008\libstfio\libstfio.vcprojSource Files(Source Files\biosigC:\Users\Christoph\stimfit\dist\windows\VS2008\libstfnum\libstfnum.vcprojC:\Users\Christoph\stimfit\dist\windows\VS2008\libstimfit\libstimfit.vcprojC:\Users\Christoph\stimfit\dist\windows\VS2008\pystf\pystf.vcproj$Bookmarks V001.01timfit\src\lX kmarks V001.01UnloadedProjects"HiddenSlnFolders" OutliningStateDir$uEBookmarkState(TaskListShortcuts$OutliningState1 !OutliningState2 $OutliningState3 !'xc:\Users\cs\stimfit\src\libstfirc:\Users\cs\stimfit\windows\VS2008\libstfio\libstfio.cppxEpc:\Users\cs\stimfit\windows\VS2008\libstfio\dllmain.cpp0nc:\Users\cs\stimfit\windows\VS2008\pystfio\pystfio.cpp44C:\Users\Christoph\stimfit\dc:\Users\User\stimfit\src\libstc:\users\christoph\biosig\include\biosig-dev.h<open> C:\Users\Christoph\biosig\include\biosig.hVsToolboxService"+*OutliningState4 ^fOutliningState6 eOutliningState9 mt<open> C:\Users\Christoph\biosipC:\Users\Christoph\stimfit\dist\windows\VS2008\Stimfit\.cg\include\biosig2.h<open> c:\us\c:\Users\User\stimfit\src\stimfpc:\Users\User\stimfit\src\libstfio\biosig\biosiglib.cpp$LC:\Users\User\biosig\include\biosig.hK/ $2$4Xc:\Users\User\stimfit\src\libstfnum\fit.cpp4Tc:\Users\User\stimfit\src\libstfnum\fit.hkS-Zc:\Users\User\stimfit\src\libstfnum\stfnum.h6^"hc:\Users\User\stimfit\src\libstfnum\levmar\levmar.ho\axg\AxoGraph_ReadWrite.cppF."/B!CLc:\Users\cs\stimfit\src\stimfit\stf.houUnc:\Users\cs\stimfit\src\stimfit\math\levmar\compiler.hd}KTc:\Users\cs\stimfit\src\stimfit\gui\app.h>u0nc:\Users\cs\stimfit\src\stimfit\gui\dlgs\smalldlgs.cppC 4nc:\Users\cs\stimfit\src\stimfit\c:\Users\cs\stimfit\src\libstfio\atf\atflib.h\gui\dlgs\fitseldlg.cpp-pc:\Users\cs\stimfit\src\stimfit\c:\Users\cs\stimfit\src\libstfio\cfs\cfslib.h2\gui\dlgs\cursorsdlg.cpp']}lc:\Users\cs\stimfit\src\stimfit`c:\Users\cs\stimfit\src\libstfio\hdf5\hdf5lib.hY\gui\dlgs\cursorsdlg.hm+:hc:\Users\cs\stimfit\src\stimfitRc:\Users\cs\stimfit\src\libstfio\stfio.ho|"Vc:\Users\cs\stimfit\src\stimfit\py\pystf.iYO=>Vc:\Users\cs\stimfit\src\libstfio\section.hO;zj|~Vc:\Users\cs\stimfit\src\libstfio\stfio.cpp^|^%Tc:\Users\cs\stimfit\src\pystfiofc:\Users\cs\stimfit\src\libstfio\axg\fileUtils.cpp"`c:\Users\cs\stimfit\src\libstfio\igor\igorlib.hvc:\Users\cs\stimfit\src\libstfio\abf\axon\Common\axodefn.hS2\c:\Users\cs\stimfit\src\libstfio\abf\abflib.h0b6rc\libstfixc:\Users\cs\stimfit\src\libstfio\igor\CrossPlatformFileIO.c M+  & dc:\Users\cs\stimfit\src\libstfio\igor\igorlib.cppK3ibstfiVc:\Users\cs\stimfit\src\libstfio\cfs\cfs.h?ugpc:\Users\cs\stimfit\src\libstfio\abf\axon\Common\unix.hqVc:\Users\cs\stimfit\src\libstfio\channel.h/)!Zc:\Users\cs\stimfit\src\libstfio\channel.cpp\s\pystfio.hˀ^c:\Users\cs\stimfit\src\libstfi-c:\Users\course\stimfit\src\pystfio\pystfio.i>@VW^"`fgpFr-46E8-9A64-601552F62Xc:\Users\cs\stimfit\src\pystfio\pystfio.cxxyo\cfs\machine.hO<fnum\levmar\compiler.hb%OutliningState17"&OutliningState19"OutliningState20")Property Manager"OutliningState8  jXOutliningState5 XbOutliningState7 hlOutliningState11"#qdc:\Users\User\stimfit\src\libstvc:\Users\cs\stimfit\windows\VS2008\libstfio\Config.vspropsB45922C2A22}12", 8c fnum\levmar\misc.hy\Users\gui\parentframe.cppU>fc:\Users\cs\stimfit\src\stimfit\gui\childframe.cppTbstfi`c:\Users\User\stimfit\src\stimfit\gui\graph.cppzxc:\Users\User\stimfit\src\libstfio\axg\axglib.cppv 6.libstfioDebug | Win322l>7C:\Users\rmgzcsc\stimfit\src\stimfit\py\embedded_mpl.py|c:\Users\User\stimfit\src\libstfio\axg\AxoGraph_ReadWrite.cpp *c:\Users\cs\stimfit\src\stimfit\py\pystf.i."/B!Chc:\Users\User\stimfit\src\libstfio\axg\byteswap.cppmmondc:\Users\User\stimfit\src\libstfio\axg\byteswap.h6s<ef?Tfio\axg\AxoGraph_ReadWrite.h/L`axg\AxoGraph_ReadWrite.h/L`bc:\Users\User\stimfit\src\libstZc:\Users\User\stimfit\src\libst%&)* -@.1;2>F@tc:\Users\cs\stimfit\windows\VS2008\pystfio\Config.vspropsľ c (oj|c:\Users\fio\stfio.cpp$)#3Zc:\Users\cs\stimfit\src\stimfit\gui\main.cpp2Tit\gui\doc.cppZbc:\Users\rmgzcsc.WIBRDOM\biosig\include\biosig.h $rc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\gui\doc.cpp`;B*Cij789+F4F(FI 4  0  7 `\Users\rmgzcsc\stimfit\GC!#Vc:\Users\cs\stimfit\src\stimfitOutliningState10"ofOutliningState15"'OutliningState14"avOutliningState13"$"sf\py\pystf.h&% 2 Dc:\Program Files (x86)\Microsoft Visual Studio 9.0\&-'(p)05VC\include\vector2C:\Users\rmgzcsc\stimfit\src\pystfio\stfio_plot.pyFc:\Program Files (x86)\MiZc:\Users\cs\stimfit\src\libstfio\recording.hʼnCfit\srdc:\Users\cs\stimfit\src\stimfit\py\pystf_wrap.cxxQ66Nfio\cf678=0?CADWG%BK-La/b./+ 0N@8?9=D>g3h++-) EF"3#B./0:;<=P1F?Gelo=fsCt~FCB`c:\Users\rmgzcsc\stimfit\src\liFBB:C:\Python27\include\Python.hyaFIF !7"&'*+/0<=Hc:\users\cs\hdf5\include\H5public.hn#O$&')G*-2.,/1E2035O689=>;?OutliningState21"*-xnOutliningState22"OutliningState23",8OutliningState24"30 N3O`im{#.&/+4+5+5!0!5!5!+%$(%-87-+,,*+0++,1,  %')*-<= G=>KO-PQLc:\users\cs\hdf5\include\H5api_adpt.hn! !"# &'(),-./2345!8 9:;#>$?@A(D(E&H%IM2OPDRLSU+WXDZ     !#$%&'()+-/012746c89:F>?@ABCDEGHIzKLMNOPQRSTUVWXYZ[]^_fabdeghijklmnopqrstuvwxy{|}~T[^`d6fgHicjl/noHqkruw{7}~Iz0I5G.G4FOutliningState12"ujXmlPackageOptions$ yKOutliningState16"`dOutliningState18"(.{-F7I 0I4F"-F8J'1J ?Q %  8Q '%*3.67'9:<?2BC+EFHK3N O,QRT!W&YZ&[\]#`)bc)def(i1k$l1mno's0v$w)yz|+4(- ''1+?@KFG6I.JYZ <c:\Users\cs\stimfit\stfconf.h %section.bstfio\channel.h/)!"%'*,/5;A(BCDH4IJKO-PQRT)UVWYZ[\`cgjl-mopr!stuy|~.nc:\Users\rmgzcsc\stimfit\src\libstfio\hdf5\hdf5lib.cppaQvc:\Users\rmgzcsc\stimfit\src\libstfio\biosig\biosiglib.cppl_mpc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\stfio.cpp7|N#$!%)*&.5-5~8AXBKV0X'M\krdc:\Users\cs\stimfit\src\stimfit\math\levmar\Axb.cs!C"Vc:\Users\cs\stimfit\src\stimfit\math\fit.hh,k!IOutliningState25"3tOutliningState28"\fOutliningState31"=I~OutliningState27"57C\lude\H5public.h\c:\Users\User\stimfit\src\stimfit\gui\app.cpp|c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\stfmath.cppAVc:\Users\cs\stimfit\src\libstfio\channel.h \c:\Users\cs\stimfit\src\libstfio\abf\abflib.h|c:\Users\User\stimfit\src\liOutliningState49"OutliningState52"Jd `OutliningState50"GKW OutliningState51"\bstfio\abf\axon\Common\axodebug.hodc:\Users\User\stimfit\src\libstfnum\levmar\misc.hgrc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\gui\doc.cppBbC:\Users\rmgzcsc.WIBRDOM\biosig\include\biosig.h6Tc:\Users\course\stimfit\src\stimfit\stf.h:C:\Python 7 @OutliningState36"Wd OutliningState33"6>OOutliningState34"S|OutliningState44"DC |c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\measure.cppZ~O++fc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\stf.h;dc:\Users\rmgzcsc.WIBRDOM\biosig\include\biosig2.hC/.X V V)C  )&5' ()236:8;7>?= @!AB<CHIG JL MN O PCQKUX^_`abehkl i$npv$oxz}y;~""H+"!H%@'' #" ers\rmgzcsc.WIBRDOM\biosig\l /& +,2f7>|Eegt xO++O-OH`:d gF.%$ kascii\ascTc:\Users\rmgzcsc\biosig\include\biosig2.hi}'C)+-3bBd(*O #'*7 #     !"#$%&'(;*+,-./0123456789:<=>?BDEGHIJKLMNOPRTVWaY[]_`bldfhikmnoprstuvwxyz{|}~mfit\src\libstcrosoft Visual Studio 9.0\VC\include\xutility8Cxc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\recording.cpp).= %`&+,6793:B'CKBL_<`n0or=s{'|,.tudio 9.0\VC\include\xutilittc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\recording.hʼnC*+.0358>DILNQSVX1YZ[]:^_`bOutliningState29"1E~OutliningState26"0=6OutliningState32"K~OutliningState30"42Gd c -KLJJWbc:\Users\rmgzcsc.WIBRDOM\hdf5\iZC:\Users\rmgzcsc.WIBRDOM\biosigZc:\Users\cs\stimfit\src\stimfit\math\fit.cpp S"&*+<,/0#5 78<"=@ADF2HGE\^2`q%rG]}>~3  * C2)"\include\io.h %&'(#),.67>GHPRZ QZ^fEBE@BABCAA3 I EBBC !$E'*B+.C/2A39A:@@AGEHNEOU?Vdj)kl*m?ewAx~HIILCHHDFBFF BD *+<M"O7>Sa6bp9r;T{7|8<defs.h2Hc:\u>c:\python27\include\pyconfig.hf% !%& 0"1!3#48?BCQDRVW[]   ! $1)>`?R+4?DKRYSV^ a f}}`c $OutliningState35"/F5OutliningState38"LlOutliningState39";jOutliningState37"<9v)cdeg&hijl&mnoqtv(wxy{~xc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\measure.hAÅ#/3CGQTafv{ !OutliningState58"RSdOutliningState59"pOutliningState56"MOOutliningState61"WV;e\io.h5lc:\U5>**lc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\stfio.h`c:\Users\User\stimfit\src\stimf27\include\Python.h1Lc:\Users\cs\stimfit\src\stimfit\stf.hnc:\Users\rmgzcsc\stimfit\src\libstfio\hdf5\hdf5lib.cppJ^c:\Users\User\stimfit\src\stimfit\gui\view.cppxc:\Users\cs\stimfit\src\libstfio\igor\CrossPlatformFileIO.c~c:\Program Files\Micr#& ;$K9:AO[._R `j.na orSt5v"x){'~"#'(4)<)S9' 433y*z{*|:korux|i18XYPa%bcktuxy?JM "    &  ( S FY    +    " * .   &     t t v w | }        H C  + D  @ 8  -  2 % &  ( !8 9 : ; \> !@ A C W Z [ ] -L _ ` i  < 0+      J  ?  !  %  % 4 '  1      !  ! " $ ) : J P Q V KX OZ )\ ] [ K_ = a .e ~  %  "  (  (  *  (  -  A     :      K    R  R  2  4  3  0BC:\Users\cs\wx\include\wx/defs.h)DQ +. -V. /Q0#!1 2569;&>?a bh>ieTo}&~"%(.-3'-"C}.4)7 A*-  5=; "     '#1/!3'6@I4>AB+C5J L;M OI PU-V5T'WZ5[=X'\S ]<a$b` cf7h1k ln r6v(wtx |I{& 'H'E . mi!#$"$ A/S#'* !F1)HH2 "82 &(J*X(: 8G?#9$ 934 !"&)3%@*+8,/69;>BC0DE>FILMLNO#QTVWX!bl"oy+|[.''.1+7-5+1;0)#91= S#!$,  -S 'J(& )*+3 IO RS TW!X[$] ade'hi(l`$nr'st'uq"vKw x,yJ z~7* ;+ K}9$ '$$ .{ 6!" #2"0#L!\#$#1"@"0  @  dlgs\fitseldlg.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}12 +8  L{F483004F-286D-4112-952D-F0CD8FB9FB5E}|..\libstimfit\libstimfit.vcproj|c:\Users\cs\stimfit\src\stimfit\gui\dlgs\smalldlgs.cpp||{D0E1A5C6-B359-4E41-9B6; 46+j)(  &', 0<5/7D)EF'G@H?I>JM]*ghij^k nos !);<FG1A5C6-B359-4E41-9B60-3365922Cgopw ]w|  {F N SSXOutliningState53"<OutliningState54"LNrOutliningState55"OutliningState57"v R A ##% *=0(256 6!8;<?+@A*CS6Tc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\biosig\biosiglib.cppYfnum\spline.hp#t\src\libstbc:\Users\User\stimfit\src\libst\c:\Users\User\stimfit\src\libstfnum\measure.h'b%27GLVZio)--.c//hc:\Users\rmgzcsc\stimfit\src\libstfio\recording.cpp|)nclude\H5public.hH#O$&')G*,/1E2035O689;?N3O`im{#.&/+4+5+!!!5!+%$(%-87-+,,*+0++,1,  %')*-<= G=>i\dlgs\cursorsdlg.cpp!dC:\Users\rmgzcsc.WIBRDOM\biosig\lib\libbiosig.deft\oc:rC:\Users\rmgzcsc.WIBRDOM\biosig-1.6pre\lib\libbiosig.def)wOutliningState63"P\tOutliningState64"OutliningState62".OutliningState60"Qtosoft SDKs\Windows\v7.0\Include\BaseTsd.h~\c:\Users\rmgzcsc\stimfit\src\libstfio\stfio.hN\c:\Users\cs\stimfit\src\libstfio\atf\atflib.h&fc:\Users\User\stimfit\src\pystfio\pystfio_wrap.cxx{Tc:\Users\cs\stimfit\src\pystfio\pystfio.hxc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\measure.h:zc:\Users\User\stimfit\src\libstfio\abf\axon\Common\axodefn.hpc:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\CodeAnalysis\sourceannotations.hxVc:\Users\User\stimfit\src\libstfio\stfio.hepC:\Users\rmgzcsc\stimfit\src\stimfit\py\embedded_mpl.pyVVc:\Users\cs\stimfit\src\libstfio\section.h`c:\Users\cs\stimfit\src\libstfio\igor\igorlib.h(~c:\Users\course\stimfit\src\libstfio\abf\axon\Common\axodefn.hRc:\Users\cs\stimfit\src\libstfio\|c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\stfmath.cpp!wy!z,'OutliningState42"B?PlOutliningState41"TpOutliningState40":AcpOutliningState45"EZfOutliningState43"OutliningState46"fOutliningState47"@IjOutliningState48"Ht3' 2=3">$)0* +0,.( -./6,85':KM_bejbklmrcuwy!z! I`c:\UNC:\Users\User\wx\include\wx\platform.h !Vc:\Users\User\stimfit\src\libstfio\stfio.hd"Zc:\Users\User\stimfit\src\libststfio.hrc:\Users\rmgzcsc\stimfit\src\stimfit\gui\parentframe.cppSDc:\Users\User\wx\include\wx\app.hZc:\Users\cs\stimfit\src\libstfio\channel.cpp ^c:\Users\User\stimfit\src\stimfit\gui\main.cppync:\Users\rmgzcsc\stimfit\src\stimfit\gui\parentfraOutliningState74"b_*~OutliningState72"]cAtOutliningState73"COutliningState76"`,me.hRPc:\users\user\stimfit\src\stimfit\stf.hLc:\Users\User\boost\boost\cstdint.hppuDc:\Users\course\stimfit\stfconf.hlc:\Users\User\stimfit\src\stimfit\gui\parentframe.cppxc:\Users\cs\stimfit\src\libstfio\axg\AxoGraph_ReadWrite.cpp,tc:\Userxc:\Users\rmgzcsc\stimfit\src\stimfit\gui\dlgs\smalldlgs.cppQtc:\Users\User\stimfit\src\stimfit\gui\dlgs\cursorsdlg.cppXC:\Users\Christoph\biosig\include\biosig2.hvc:\Users\rmgzcsc\stimfit\src\libstfio\biosig\biosiglib.cppLNc:\Users\User\biosig\include\biosig2.hvVc:\Users\cs\stimfit\src\libstfio\cfs\cfs.h hc:\Users\cs\stimfit\src\stimfit\gui\parentframe.cpp$dc:\Users\rmgzcsc\stimfit\src\libstfio\recording.hHTc:\Users\User\stimfit\src\stimfit\stf.cppZc:\Users\User\stimfit\src\libstfnum\spline.hivc:\Users\cs\stimfit\windows\VS2008\libstfio\Config.vspropslc:\Users\course\stimfit\src\libstfio\intan\common.cppzc:\Users\Christoph\stimfit\src\libstfio\biosig\biosiglib.cpp~C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winX_Kbfwz5#F5c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\gui\parentframe.cppѴI%&)* -@.1;2?0@gh7dows.h}hc:\Users\rmgzcsc\stimfit\src\libstfio\recording.cppM^c:\Users\cs\stimfit\src\libstfio\cfs\machine.h`c:\Users\cs\stimfit\src\libstfio\hdf5\hdf5lib.h)c:\Users\User\stimfit\src\libstfio\abf\axon\AxAbfFio32\abffiles.cppjc:\users\course\stimfit\src\libstfio\intan\streams.hnc:\Users\course\stimfit\src\libstfio\intan\streams.cppLc:\Users\User\biosig\include\biosig.h`xc:\Users\User\stimfit\src\libstfio\axg\AxoGraph_ReadWrite.h\Zc:\Users\cs\stimfit\src\stimfit\gui\main.cpp'dC:\Users\OutliningState65"UYOutliningState66"OutliningState67"X[)\OutliningState68"89+F4F(FI4  0 GC%'*-+,p-49:;<A0CCEHWK%FO-Pe/f./ +0N !@#<?=ADBk3l++) E]7ab/crsw8xLRQW Y ) KB02B KH &V9NF*3+B678BCDEP9N?Omtw=n{E|CFCBFBBEBE@BABCAA 3 I s8(+&E'*B+.B/2C367:E=@BADCEHAIOAPV@W]E^dEek?lz)*?{AHIILCHHDxc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\stfmath.hv>#$*+19HM PRS\l^cNlx}2 l![~&+04<BEILTW^ahktwz} /@FBFF)B*5D6@ARc"e7Tiw6x9;j78<.OutliningState69"ZOutliningState70"T^*OutliningState71"~ OutliningState75"nc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\gui\doc.h_##$&-/OGQTWz{!'!  !$&)-35 678: ;<=?!@ABD%EFGI"JKLN"OPQS"TUVX"YZ[]!^_`b!cde:nqstuv,z} !" #    " !%1&'(*-/901248KADFGHIK!LMNP QRSUVWXZ![\]_ `abd efgi%jklnopqstuvxyz{}!~"?4.#!  ! !"@CEFGHKNP5QRSU3VYZ\=]_acfhkmpr+stuwz|%}~$"%$$)"%&#8#!rmgzcsc.WIBRDOM\biosig\lib\libbiosig.def?pc:\Users\cs\stimfit\src\libstfio\abf\axon\Common\unix.h pc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\stfio.cpp>fc:\Users\cs\stimfit\src\stimfit\gui\childframe.cpp%fc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\stf.h9TC:\Users\rmgzcsc\biosig\include\biosig2.hK^c:\Users\course\stimfit\src\libstfio\stfio.cppNC:\Users\User\biosig\include\gdftime.hfc:\Users\rmgzcsc\stimfit\src\stimfit\gui\graph.cppThc:\Users\cs\stimfit\src\libstfio\ascii\asciilib.cpp\c:\Users\cs\stimfit\src\libstfio\cfs\cfslib.h*bc:\Users\rmgzcsc.WIBRDOM\hdf5\include\H5public.h=c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\gui\parentframe.cppG`c:\Users\course\stimfit\src\stimfit\gui\doc.cppc:\Program Files (x86)\Microsoftfio\recording.cpp[|dc:\Users\rmgzcsc\stimfit\src\libstfio\recording.h>\c:\Users\rmgzcsc\stimfit\src\libstfio\abf\axon\Common\axodefn.h3 [UW1XYZ\c:\Users\rmgzcsc\stimfit\src\libstfio\stfio.hݰ<">$)0* +0,.( -./6,8:*;5>OQcfinbopqvgy{}!~ M! \c:\Users\User\stimfit\src\libstfnum\funclib.hߗ1\src\libst`c:\Users\User\stimfit\src\libstfnum\funclib.cppGBDdc:\Users\User\stimfit\src\libstfio\igor\IgorBin.hP; /dc:\Users\rmgzcsc\stimfit\src\stimfit\gui\main.cpp2Tdlgs.cfc:\Users\rmgzcsc\stimfit\src\stimfit\gui\graph.cppbfC:\Users\rmgzcsc\stimfit\src\pystfio\stfio_plot.py`rc:\Users\rmgzcsc\stimfit\src\stimfit\gui\parentframe.cpp֌ Visual Studio 9.0\VC\include\assert.htXc:\Users\course\stimfit\src\stimfit\stf.cppZc:\Users\User\stimfit\src\libstfnum\stfnum.hcxc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\recording.cppDBC:\Users\cs\wx\include\wx/defs.h2Hc:\users\cs\hdf5\incs\rmgzcsc.WIBRDOM\stimfit\src\libstfio\recording.hETc:\Users\cs\stimfit\src\stimfit\gui\app.h\c:\Users\course\stimfit\src\pystfio\pystfio.iZc:\Users\User\stimfit\src\libstfio\stfio.cpp^c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\includ%&*.068?AMXy.pC:\Users\rmgzcsc\stimfit\src\stimfit\py\embedded_mpl.py9@Bhc:\Users\User\stimfit\src\stimfit\py\pystf_wrap.cxx2'fio\axg\longdef.hpęc\libstC:\Program Files (x86)\Microsof\Windows\v7.0\include\windows.hj,-/) .718t Visual Studio 9.0\VC\include\xeyC7c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\CodeAnalysis\sourceannotations.h'͸P  ## "#%-47>GHEafgd%A)%< !1"##$'!1"2L{  <.I>$)0* +0,.( -./6,8:*;5>OQcf U F !"#$%&'()*+-./01234568r:;<=>?@ABCDEOGHIJMLNRPQSTVWXYZ[\]_`abcdefghijklmnopqtuvfxyz|}~fit\src\libstfio\intan\intanlib.h\c:\Users\course\stimfit\src\stimfit\gui\app.h@c:\Python27\include\pythonrun.h`c:\Users\User\stimfit\src\libstfnum\funclib.cppmc:\Users\rmgzcsc.WIBRDOM\stimfit\src\libstfio\biosig\biosiglib.cpp7`c:\Users\course\stimfit\src\stimfit\gui\app.cpp^c:\users\christoph\biosig\include\biosig-dev.hDC:\Users\User\biosig\include\io.hfc:\Users\cs\stimfit\src\libstfio\axg\fileUtils.cppdc:\Users\User\stimfit\src\libstfio\axg\byteswap.h[pc:\Users\course\stimfit\src\libstfio\intan\intanlib.cppdc:\users\christoph\biosig\include\physicalunits.hZC:\Users\rmgzcsc.WIBRDOM\biosig\include\io.h5bc:\Users\User\stimfit\src\libstfio\axg\longdef.hnc:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\vectorOutliningState129$tOutliningState127$ zOutliningState128$d OutliningState126$Kvinbopqvgy{}!~ !M|c:\Program Files\Microsoft SDKs\Windows\v7.0\Include\WinDef.h4 _    %&)+-5 :? BC FG J K N ORSJ\]^_&bf i jgk nx6y  !# ! % ,,,,  ,,,&' +,*. 1C34G6>Dlc:\Users\course\stimfit\src\libstfio\intan\common.cpp.yg.nc:\Users\course\stimfit\src\libstfio\intan\streams.cpp\dc:\Users\course\stimfit\src\stimfit\gui\unopt.cpp?VTc:\Users\course\stimfit\src\stimfit\stf.hw,`c:\Users\rmgzcsc\stimfit\src\libstfio\channel.hWlc:\Users\cs\stimfit\src\stimfit\gui\dlgs\cursorsdlg.h"Zc:\Users\cs\stimfit\src\stimfit\math\fit.cpp<c:\Users\cs\stimfit\stfconf.h4fc:\Users\course\stimfit\src\libstfio\recording.cppnc:\Users\rDc:\Users\course\stimfit\stfconf.h:-4:AXc:\Users\course\stimfit\src\stimfit\stf.cppA \c:\Users\course\stimfit\src\stimfit\gui\app.hait\gui\app.cppc DC:\Users\User\biosig\include\ioI&*a1F0F0a,<)I  . >.*#R'(1*-../401.256 #6'ͫ4 ͫ4 ͫ4dist\windows\VS2008\pystfio\pystit\gui\unopt.cppUI^c:\Users\User\stimfit\src\libstfnum\stfnum.cppq~C:\Program Files\Microsoft SDKsOutliningState93"4 OutliningState87"uOutliningState94"pvOutliningState84"tZvHNRVX\^b iklngprtvy " f$!%()*-/0&4;3;~>GXHQ3`0b'TeRe{X|3q OutliningState115$xOutliningState110$rOutliningState116$OutliningState117$0utility stimfit\src\libstZc:\Users\User\stimfit\src\libstfio\channel.hWjzc:\Users\Christoph\stimfit\src\libstfio\biosig\biosiglib.cppdc:\Users\User\stimfit\src\libstfio\abf\abflib.cppQ\c:\Users\User\stimfit\src\stimfNc:\Users\User\wx\include\wx\msw\init.h}n&#*. CD6E 5 7 ! "*#+ ,-/) .7185f:D%EL$O5VX3UXa|o O++fc:\Users\User\stimfit\src\pystfio\pystfio_wrap.cxx]aZude\d^c:\Users\User\stimfit\src\stimfc:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\assert.hM "7pwz}BxLc:\Users\User\boost\boost\cstdint.hpp* %+VO*G++401+G+  -OutliningState105$jOutliningState103$tOutliningState102$z~z|OutliningState107$\+;.!"G#&(<= J8K>SVW"T/_`,chhRlnz}6t:Pr7(%&&&.hД@!"*+34<=#DE LOT\]efnowx%"R 4 ,,Oib K ,4tH=MN#KFOV)W RY]_B`c\2dhi ipM  01;<NOs}3,2!!,2#  , $-%()-+.1mgzcsc.WIBRDOM\stimfit\src\stimfit\gui\doc.hFrC:\Users\rmgzcsc.WIBRDOM\biosig-1.6pre\lib\libbiosig.def@dc:\Users\rmgzcsc.WIBRDOM\biosig\include\biosig2.h<c:\program files (x86)\microsoft visual studio 9.0\vc\include\use_ansi.h|c:\Program Files\Microsoft SDKs\Windows\v7.0\Include\WinDef.h\c:\Users\User\stimfit\src\stimfit\gui\doc.cpp]nc:\Users\cs\stimfit\src\stimfit\math\levmar\compiler.h^c:\Users\User\stimfit\src\libstfnum\stfnum.cpp|\c:\Users\User\stimfit\src\libstfnum\measure.hkvc:\Users\cs\stimfit\src\libstfio\abf\axon\Common\axodefn.hNc:\Users\User\wx\include\wx\msw\init.hrc:\Users\User\stimfit\src\libstfio\abf\axon2\abf2headr.hnc:\Users\cs\stimfit\src\stimfit\gui\dlgs\fitseldlg.cpp Xc:\Users\User\stimfit\src\libstfnum\fi      n 3 - K LJJ!W"'X(-V.3V49)<p3s1+}:\Users\rmgzcsc.WIBRDOM\biosig-1.6pre\lib\libbiosig.def1C:\Users\rmgzcsc.WIBRDOM\biosig\lib\libbiosig.def<3#*9E 8(6=   /3?H1IL'MS?T[=gnEr} "375-C<.)+2$O{A''''' 6F*(+NC:\Users\User\biosig\include\biosig2.h2F'C)+-3bBd(*O"%)OutliningState104$}^OutliningState113$UhOutliningState112$qFOutliningState111$OutliningState118$OutliningState119$jOutliningState114$OutliningState123$v,9 # @it\gui\main.cpp2T  cO-#7&-O/r6C G7hpz|OOL1929E= `<eOL9E~c:\Program Files\Microsoft SDKs\Windows\v7.0\Include\BaseTsd.h <S%U+QUVY8'H.OutliningState125$OutliningState130$xOutliningState124$OutliningState121$5  O !$'H-3 5\>^8iZQ: V X8?,2*"#!$,'2(-06=`9`n})3888 R!d$O'&()1*;129>$% +,-).6>MR UWXalchSqrtwz}u2 l![ $(,38=FJNT]clx4 OutliningState85"\vOutliningState86"icOutliningState95"w54OutliningState96"7hn C!(*++null>tc:\Users\User\stimfit\srcers\christoph\biosig\include\physicalunits.h<open> c:\python27\include\pyconfig.h<open> C:\Python27\include\Python.h<open> C: ;  5 7  '/. 3:f?EFI%JQ$T-B:[i#jy"z^\2U?>j7(^)9f:J^KZ`[fDhu0wol"/44 -!4qLY5[]3Z]f|t\c:\Users\course\stimfit\src\pystfio\pystfio.imalldlgs.cbc:\Users\course\stimfit\src\libstfio\recording.h|vBjlg.cppfc:\Users\course\stimfit\src\libstfio\recording.cppppL^c:\Users\course\stimfit\src\libstfio\stfio.cpp#pc:\Users\course\stimfit\src\libstfio\intan\intanlib.cppHN<B>OG(HI3J&:OR'Wa?ce;fg>hx y%M3NQ@6*/+XX S#)+,011 >E= mnsz/{/u/4/H^d/ H !^#e'(P5] ZC`*+.d/=>AD5EjBPQTW]XtU|}[zqwZ.Z * UA B I M XN [ *\ VK     ?   " @$ ; < %'.MN.TU.<7b>]& progDlg)9rc:\Users\User\stimfit\src\libstOutliningState122$OutliningState134$OutliningState135$| OutliningState133$ fio\abf\axon2\abf2headr.h4$ &"R#.9@<@MD&HJK+N!OP$RST,VY4](^2_%`lc:\Users\User\stimfit\src\stimfit\gui\parentframe.cpp %&)* -@.1;23@2Aghkl789cd%hjlBmnDpHq!rstwyz{|@O8K< 9O &G%1 .' ')   '+J,/ 78(9<!=IJO0PZ [`cg@m wH0I+F4F(FI 4 0GC+(+-0-12p3:? @ABG0ICKNWQ%LU-Vk/l./+0#$+3:1=@.N?OSDT}3~+-)+EF3&*B3CBNOPZ[\]PQf?g=ECFCBFBBEBE@BABCAA!<"(3)>I?EEFIBJMBNQCRUVYE\_B`cCdgAhnAou@v|E}E?AHIILCHHDF B F*F+5B6ADBLM^o"q7`u/l0.1I36:EGMOSU%\M^b-f{|OutliningState120$OutliningState131$OutliningState136$OutliningState132$l @\24$56793:=>@8ADEGJHKLN=OQRT5UWXZ([\^`]Yadf-ghiknru{~'lc:\Users\User\stimfit\src\libstfio\biosig\biosiglib.h6M!3)8+.7:='B"B,%$2    !#%')+-?0123456789:;<=>@ABCDEFGIJKLMNOPQRTUVYZ[]^_`abcdefghijklmnopqrtuvwxyz{|}~NC:\Users\User\biosig\include\gdftime.hD z+"#$%*+,-Inwz<=?5$7*1@ABIJKLX1Z[].`2bcdu % #8NE=  + 3"$'3M45P6<_=!?{@CELO;PX[WaRbe[hq>rkwy$ F- !.NC OutliningState141$SOutliningState140$XOutliningState138$OutliningState139$BCCCCCCC CC C#&C)+,0N4%52.fBatchBld\c:\Users\User\stimfit\src\pystfio\pystfio.cxx$   CCC #C;>CDGCfhCkoCrvCw{C9$@%6?7?:@HBIQHRZI[cIdlDmuDv~2:'<?  =>+DfEKMRTY[`bjnsu{|B** H"#$%!'')',-./T8:;=C DTVZ\afipqx|y $.27;@DF HIY H{92B-D!9#EG0KN/PKQY[\]`bc8)Eo#(%) 1>2!&O]$^dQ /T[_ n/oY`=! $+/130316OR-ST0U`PhgjU-4A2A-B86AXc:\Users\User\stimfit\src\pystfio\pystfio.hTo(    in32OutliningState137$/OutliningState146$ OutliningState145$OutliningState144$    "86E B!J#$%&')*,-./0123459<I:;=H>R@AC7DFZGKLMNOP]TS?UVWXY[\^t.cppa|c:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\measure.cpp8lc:\Users\User\stimfit\src\libstfio\biosig\biosiglib.hhc:\Users\User\stimfit\src\libstfio\axg\byteswap.cppZnc:\Users\cs\stimfit\windows\VS2008\pystfio\pystfio.cpptc:\Users\cs\)^gkV9N@ :D+ 5=67Jhim8oq4s`K AdD]destimfit\windows\VS2008\pystfio\Config.vsprops>c:\python27\include\pyconfig.h3dc:\Users\User\stimfit\src\libstfio\abf\abflib.cppVc:\Users\cs\stimfit\src\stimfit\py\pystf.h.bc:\Users\User\stimfit\src\libstfio\recording.cppjVc:\Users\cs\stimfit\sr_h i8N 3-3(&%7+/<ES.Ts>tG"@ 7  "1)2g8h4."; 9 8/0Sj #U X?TjCkG':</(>)<\78?B@[`ghlqS{A-B7CDF53A072C}.Debug|x~CCCCCCCCCKCC'!)!5*;'  %&C'+_,0H6:\?B]eQ 69;v78<f@c:\Python27\include\pythonrun.h;Q& t\src\st&+,2389?*@[.\a*bf.glqrny7z~--,,--*  7+ * .!&*'+.,172617:<1AEEmpmruCwzi|iEC?Ac:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\vector@  %@&;,0K14+)47:=ADCIBIDKQJQ,SVRV\cdQfYklpv5yq5'+'+P41P**P))**'  ,;.2K36++69<@>B=B@DHCH(JMIMPTUYZ_`fglms'ty+z'+71&7 #"*=#6 > #5+ ,067$1WnoXwx|~1+}1&$ *)1 %!"&+01&2 '8:E9EGNFN(RV;X\=^c/dh8ioFpt?vz}8)3.&& /  !%-.&C2EKL[-\`fg ao9qv9x}8))$@8  2$$"&$*/$37$;?$CGCJNOQ]@^ae#hnfn#qvov)x{w{ !+Y%+%* e2+ "!% ++&$3  )"1#'%(,-1267;<@AEFK(MQ;SW=Y^)_c2dj@ko?qux|'*D  4,/ / = '  = 3  3 6 C D H I M HQ T V [ ^ ` d x =I%J\^6]8 8 [=\_?`cAdg:h&9$ H% 1 M $N :2 g 9h  6    F  H  I  6  2  $"  & E' Y( ^) 1 &3 C 5J N &O U W k m    P 7 - +  . (  0  ' $ % + $, 0 $1 5 $6 : $; ? #@ D #E I *J S *T ] %^ h i s *v    7 M U ) Z /[ c Ad l So D ` F n K @   F483004F-286D-4112-952tc:\Users\User\stimfit\src\stimfit\gui\dlgs\cursorsdlg.cppF6#&7A PQ:\]<_wG2<8.+*:"4CDEFOQ`a112lc:\users\course\stimfit\src\libstfio\intan\intanlib.h'jc:\users\course\stimfit\src\libstfio\intan\streams.h@9(VC:\Users\Christoph\biosig\include\biosig.ht %\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xutic\stimfit\py\pystf.i-pc:\Users\cs\stimfit\windows\VS2008\libstfio\dllmain.cppxc:\Users\rmgzcsc.WIBRDOM\stimfit\src\stimfit\math\stfmath.hCnc:\Users\cs\stimfit\src\stimfit\gui\dlgs\smalldlgs.cppXc:\Users\cs\stimfit\src\pystfio\pystfio.cxxpc:\Users\User\stimfit\src\libstfio\biosig\biosiglib.cpp_dc:\Users\User\stimfit\src\libstfio\axg\axglib.cppXXc:\Users\User\stimfit\src\pystfio\pystfio.hdc:\Users\cs\stimfit\src\libstfio\igor\igorlib.cpp |c:\Users\User\stimfit\src\libstfio\axg\AxoGraph_Rlity<open> Cx =e=e {A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|C:\Users\Christoph\biosig\include\biosig.h||{D0E1A5C6-B359-4E41-9B60-3365  MO++O4E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|c:\users\christoph\biosig\include\physicalunits.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}1234x =e=e{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|c:\users\christoph\biosig\include\bioOutliningState153$ |OutliningState152$OutliningState148$vOutliningState150$zsig-dev.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}12B4C096-5847-4 .A"F.  % /$Q./ ^c:\users\christoph\biosig\include\biosig-dev.h’dc:\users\christoph\biosig\include\physicalunits.hWvc:\Ufio.vcprojC:\Users\Christoph\stimfit\dist\windows\VS2008\Stimfit\Stimfit.vcprojtupProjkHrs\rmgzcsc\stimfit\ !&'() 1\23L49;=EH MPQS56e6h=4=??=.?/;=8>E<RSShi|'((((((((*(37?#)$0/1?0@LGMZL[k*lu9v1/5>;;<<<<<<<<BB%E&9E:NO9: 8 >2<3WKXzI{.-%W(I%J&7(/: & *  Pc:\users\user\stimfit\src\stimfit\stf.h'Wv!#>%*.+ ,.-/03456.)89:?A2CO=ST[_behknrtstruy  B0+0+@*A)@$C=    E 0F/E*3 &')+.*34BCHL     !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_ace2ghjklmopqstvwxyz{|}~O[0\S_bgiqx M%Tc:\Users\User\stimfit\src\stimfit\stf.cppA )t,2R36689:%;,7>AB6@KL-M,?P+QVTWZX[abe^c:\Users\User\stimfit\src\stimfit\gui\view.cpp&&7 @!389#:(M*O@;UVY!Z]^$OutliningState143$ OutliningState142$OutliningState155$lOutliningState154$"~_+`cLdj*l{ ,%W|jc:\Users\User\stimfit\src\stimfit\gui\childframe.cppG"#&' *@+.;/:*<BOW#X\^+_d#f)]p0q.0:?N4G0&0'/<0A8BGHHUJVc'd9E"%S%(-0')3'4=*>B9CMiOVNV*+./015U4^ _hHijHk2HCmd+,(/ )  4-8&)')0*2(4#?T#Y@p'q0)&'E' =!%?}@k(lo(pu(v{(|))*1Z-+t9/*1!T+--./+0d,_c`lXmxXy6#0%E(4=:> CF OQ U [5a2bl6qrs/t|*}ZLWG1m6/1T/9@TB-:0994H #;$)+-@/485@8Bsiu6ypz{|e6K[kU%)6Ec ) -  & '61I23g4;M< @'A E-Fhi6w_xy}z' ~0.-50.-1/.1/.ixp**zz/'%&*+018;*<>??9QT*URijnostwx{|,+,,, *  *  11+) /  # !"%0&-$-'7*1O3w:;9o`>?~c:\Users\course\stimfit\src\libstfio\abf\axon\Common\axodefn.h)`c:\Users\course\stimfit\src\stimfit\gui\app.cppA !"%& )@*OutliningState157$&dOutliningState159$rOutliningState158$(TOutliningState160$*headWrite.cppYdc:\Users\rmgzcsc\stimfit\src\stimfit\gui\main.cppOhc:\Users\User\stimfit\src\libstfnum\levmar\levmar.hdVC:\Users\Christoph\biosig\include\biosig.hTc:\Users\User\stimfit\src\libstfnum\fit.hbhc:\Users\User\stimfit\src\stimfit\py\pyst-;.,=AEFGPQ>SXYW\5]f7g\ 3<kq3<,<32% <1@"(*922C2A22}12x =e=e{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|<MiscFiles>|C:\Users\Christoph\biosig\include\biosig2.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}x =e=eP{92B4C096-5847-4B22-A271-BF2E2B9A1AA6}|..\libstfXC:\Users\Christoph\biosig\inclu0-24516<>?@DEG!N`c.dijao\qz[{mq<) " -9I:C(Y2OutliningState161$ uOutliningState162$x OutliningState163$,OutliningState168$dbe|4/01@9KACHV:W8f]^ae+glXmnUov.w y1z}Jb3*(-B GHHQRU!VCY]>^deH!>Z>>X/ #>L3N`M`l4p.crz{Fs( ++3$!%)*+.01&5<4<~?HXIRdBefHg3c0i'UlSl3+pX3        3 -7K8=L>CJDIJJOWPUXV[V\aVbg)j3AD5N 3-3(&%"7$2#2HLYb5p.q>G"@. $7& 3"4])^84." ;596A8B[\j #OutliningState147$rOutliningState156$$tOutliningState151$bzOutliningState149$`|#$ ?CG' :-/1B.CEGDDY<Zt/u>%%6(8)c8d=?A:3 9 &< 94 | H}  $ : 9  6   % F' 6 H7 E IF R 6V e 2f t $z  ~ E Y ^  &  5  #  / .      0 P5 7 ; -< 3456789:;<=>?@AO +P c .d k (l v 0w } '~  $ $ $ $ # # * * %   *    7   ) / A S D `  F  n  K ! @" * + U fBatde\biosig2.h2Aio\libstfio.vcproj|c:\Users\Christoph\stimfit\src\libstfio\biosig\biosiglib.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}123456 =e=e{A2FE7OutliningState167$hOutliningState166$OutliningState165$tOutliningState164$nf_wrap.cxxsdc:\Users\cs\stimfit\src\stimfit\math\levmar\Axb.c\c:\Users\User\stimfit\src\pystfio\pystfio.cxx`c:\Users\User\stimfit\src\stimfit\gui\unopt.cppzjc:\Users\User\stimfit\src\stimfit\gui\childframe.cpp3BCAD51}.dwStartupOpt=;={2BCTX&Y\^_`dNp|$~$*{1.2O % #NE =%&04<?AFJLPRUaMbcPdj_korwyi>$ F-B   !.#$,-.12569DES2U V'Z G]^no!p+:rs{|K>7,+,+,+,+  ,+,+".#&.'*.+../2.36.7;.<?.@C.DG.HK.LO.PTX[)U_cf*`jnq)kuy|*v,... G58 O2          !#%->@KcPZdhKosKvyK~KKCBCCC .N-B86AN),C03C59C:=CUXC^aCCCCCCCCCCCCCCMultiStartupProj=;4{BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.dwStartupOpt=;StartupProject=&{BA3F4057-E8E8-4E56-BAD7-F6D1326A272F};={BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Release|x64.fBatchBld=;?{BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Rele>3`c:\Users\course\stimfit\src\stimfit\gui\doc.cpp.< @/$0e)gpt_9N@ :D+ WR=S7g84`h ^da z| 8GIOf#ghi/rDs .9.7ase|Win32.fBatchBld=;;{BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|x64.fBatchBld=;={BA3F4057-E8E8-4E56-BAD7-F6D1326A272F}.Debug|Win32.fBatchBld=;4{2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.dwStartupOpt=;={2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|x64.fBatchBld=;?{2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Release|Win32.fBatchBld=;;{2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|x64.fBatchBld=;={2BC7EA17-B8B9-4855-9BCF-35A1D3BCAD51}.Debug|Win32.fBatchBld=;4{E89AD553-DFED-4B91-AA10-E237293CB7E7}.dwStartupOpt=;={E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|x64.fBatchBld=;?{E89AD553-DFED-4B91-AA10-E237293CB7E7}.Release|Win32.fBatchBld=;;{E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|x64.fBatchBld=;={E89AD553-DFED-4B91-AA10-E237293CB7E7}.Debug|Win32.fBatchBld=;4{92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.dwStartupOpt=;={92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|x64.fBatchBld=;?{92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Release|Win32.fBatchBld=;;{92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|x64.fBatchBld=;={92B4C096-5847-4B22-A271-BF2E2B9A1AA6}.Debug|Win32.fBatchBld=;4{F483004F-286D-4112-952D-F0CD8FB9FB5E}.dwStartupOpt=;={F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|x64.fBatchBld=;?{F483004F-286D-4112-952D-F0CD8FB9FB5E}.Release|Win32.fBatchBld=;;{F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|x64.fBatchBld=;={F483004F-286D-4112-952D-F0CD8FB9FB5E}.Debug|Win32.fBatchBld=;4{E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.dwStartupOpt=;={E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|x64.fBatchBld=;?{E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Release|Win32.fBatchBld=;;{E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|x64.fBatchBld=;={E4B5B8A4-7555-4A2A-B86A-B7CDF53A072C}.Debug|Win32.fBatchBld=;4{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}.dwStartupOpt=; ActiveCfg= Release|x64;       !#+<>IMXbfKmqKtwK|CBLCCC CC*.C8;CCGCJMCPRCTV-gB( *O KNWZ^amCps\{\ "stimfit-0.17.1/dist/windows/VS2008/Stimfit/Stimfit.vcproj000077500000000000000000000230711517235503400230540ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstfio/000077500000000000000000000000001517235503400203765ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/VS2008/libstfio/Config.vsprops000077500000000000000000000010021517235503400232350ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstfio/libstfio.vcproj000077500000000000000000000460601517235503400234470ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstfnum/000077500000000000000000000000001517235503400205665ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/VS2008/libstfnum/Config.vsprops000077500000000000000000000011241517235503400234320ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstfnum/libstfnum.vcproj000077500000000000000000000235371517235503400240330ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstimfit/000077500000000000000000000000001517235503400207315ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/VS2008/libstimfit/Config.vsprops000077500000000000000000000010731517235503400236000ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/libstimfit/libstimfit.vcproj000077500000000000000000000331521517235503400243330ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/pystf/000077500000000000000000000000001517235503400177305ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/VS2008/pystf/Config.vsprops000077500000000000000000000012711517235503400225770ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/pystf/pystf.vcproj000077500000000000000000000257371517235503400223430ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/pystfio/000077500000000000000000000000001517235503400202605ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/VS2008/pystfio/Config.vsprops000077500000000000000000000011531517235503400231260ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/VS2008/pystfio/pystfio.vcproj000077500000000000000000000246051517235503400232140ustar00rootroot00000000000000 stimfit-0.17.1/dist/windows/nsis/000077500000000000000000000000001517235503400166755ustar00rootroot00000000000000stimfit-0.17.1/dist/windows/nsis/example.nsi000077500000000000000000000341201517235503400210460ustar00rootroot00000000000000;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;-------------------------------- ;General ;Name and file !define VERSION "10.0" Name "Amaya" OutFile "amaya-WinXP-${VERSION}.exe" ;Use lzma to compress (better than zip) SetCompressor lzma ;Default installation folder InstallDir "$PROGRAMFILES\Amaya" ;Get installation folder from registry if available InstallDirRegKey HKCU "Software\Amaya" "" ;-------------------------------- ;Variables Var STARTMENU_FOLDER ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;-------------------------------- ;Language Selection Dialog Settings ;Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "Software\Amaya" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;-------------------------------- ;Pages !insertmacro MUI_PAGE_LICENSE "amaya\COPYRIGHT" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Amaya" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_LINK "Visit the Amaya site for the latest news, FAQs and support" !define MUI_FINISHPAGE_LINK_LOCATION "http://www.w3.org/Amaya" !define MUI_FINISHPAGE_RUN "$INSTDIR\WindowsWX\bin\amaya.exe" !define MUI_FINISHPAGE_NOREBOOTSUPPORT !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "TradChinese" ; !insertmacro MUI_LANGUAGE "Japanese" ; !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Italian" ; !insertmacro MUI_LANGUAGE "Dutch" ; !insertmacro MUI_LANGUAGE "Danish" ; !insertmacro MUI_LANGUAGE "Swedish" ; !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "Portuguese" ; !insertmacro MUI_LANGUAGE "PortugueseBR" ; !insertmacro MUI_LANGUAGE "Polish" ; !insertmacro MUI_LANGUAGE "Ukrainian" ; !insertmacro MUI_LANGUAGE "Czech" ; !insertmacro MUI_LANGUAGE "Slovak" ; !insertmacro MUI_LANGUAGE "Croatian" ; !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Hungarian" ; !insertmacro MUI_LANGUAGE "Thai" ; !insertmacro MUI_LANGUAGE "Romanian" ; !insertmacro MUI_LANGUAGE "Latvian" ; !insertmacro MUI_LANGUAGE "Macedonian" ; !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Turkish" ; !insertmacro MUI_LANGUAGE "Lithuanian" ; !insertmacro MUI_LANGUAGE "Catalan" ; !insertmacro MUI_LANGUAGE "Slovenian" ; !insertmacro MUI_LANGUAGE "Serbian" ; !insertmacro MUI_LANGUAGE "SerbianLatin" ; !insertmacro MUI_LANGUAGE "Arabic" ; !insertmacro MUI_LANGUAGE "Farsi" ; !insertmacro MUI_LANGUAGE "Hebrew" ; !insertmacro MUI_LANGUAGE "Indonesian" ; !insertmacro MUI_LANGUAGE "Mongolian" ; !insertmacro MUI_LANGUAGE "Luxembourgish" ; !insertmacro MUI_LANGUAGE "Albanian" ;-------------------------------- ;Reserve Files ;These files should be inserted before other files in the data block ;Keep these lines before any File command ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) !insertmacro MUI_RESERVEFILE_LANGDLL ;-------------------------------- ;Installer Sections Section "Amaya" SecAmaya SetDetailsPrint textonly DetailPrint "Testing supported OS..." SetDetailsPrint listonly ;XXXXXXXXXXXXXXXXXXXXXXXXXX ;Test the platform ;XXXXXXXXXXXXXXXXXXXXXXXXXX ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion StrCmp $R0 "" lbl_notwinnt lbl_winnt ; we are not NT lbl_notwinnt: ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber StrCpy $R1 $R0 3 StrCmp $R1 '4.0' lbl_win32_95 StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98 lbl_win32_95: Abort "Win95 not supported" lbl_win32_98: Abort "Win98 not supported" lbl_win32_ME: Abort "WinME not supported" lbl_winnt: StrCpy $R1 $R0 3 StrCpy $R0 'XP' Goto lbl_done lbl_done: ;XXXXXXXXXXXXXXXXXXXXXXXXXX ;This section is required : readonly mode SectionIn RO SetDetailsPrint textonly DetailPrint "Installing Amaya binaries and wxWidgets DLL" SetDetailsPrint listonly SetOutPath "$INSTDIR\WindowsWX\bin" File WindowsWX\bin\amaya.exe File WindowsWX\bin\wxmsw*u_xrc_vc_custom.dll File WindowsWX\bin\wxmsw*u_html_vc_custom.dll File WindowsWX\bin\wxmsw*u_core_vc_custom.dll File WindowsWX\bin\wxmsw*u_adv_vc_custom.dll File WindowsWX\bin\wxmsw*u_aui_vc_custom.dll File WindowsWX\bin\wxmsw*u_gl_vc_custom.dll File WindowsWX\bin\wxbase*u_vc_custom.dll File WindowsWX\bin\wxbase*u_net_vc_custom.dll File WindowsWX\bin\wxbase*u_xml_vc_custom.dll File WindowsWX\bin\thotprinter.dll SetDetailsPrint textonly DetailPrint "Installing Amaya resources : icons, dialogues" SetDetailsPrint listonly SetOutPath "$INSTDIR\resources\icons\misc" File resources\icons\misc\*.png File resources\icons\misc\*.gif File resources\icons\misc\*.ico SetOutPath "$INSTDIR\resources\icons\16x16" File resources\icons\16x16\*.png File resources\icons\16x16\*.ico SetOutPath "$INSTDIR\resources\icons\22x22" File resources\icons\22x22\*.png SetOutPath "$INSTDIR\resources\xrc" File resources\xrc\*.xrc SetOutPath "$INSTDIR\amaya\wxdialog" File amaya\wxdialog\appicon.ico File amaya\wxdialog\amaya.rc SetDetailsPrint textonly DetailPrint "Installing Amaya schemas" SetDetailsPrint listonly SetOutPath "$INSTDIR\amaya" File amaya\COPYRIGHT File amaya\*.png File amaya\*.gif File amaya\*.css File amaya\*.html* File amaya\*.PRS File amaya\*.STR File amaya\*.TRA File amaya\*.conf File amaya\*.en File amaya\*.trans* File amaya\*.ico File amaya\*.svg SetDetailsPrint textonly DetailPrint "Installing annotlib schemas" SetDetailsPrint listonly SetOutPath "$INSTDIR\annotlib" File annotlib\*.png File annotlib\*.gif File annotlib\*.PRS File annotlib\*.STR File annotlib\*.TRA File annotlib\*.en SetDetailsPrint textonly DetailPrint "Installing Amaya config files" SetDetailsPrint listonly SetOutPath "$INSTDIR\config\libconfig" File config\libconfig\*.png File config\libconfig\*.svg File config\libconfig\*.css File config\libconfig\*.lhtml SetOutPath "$INSTDIR\config" File config\*-amayadialogue File config\*-libdialogue File config\*-amayamsg File config\*-libdialogue File config\lib_files.dat File config\fonts.* File config\amaya.kb File config\amaya.profiles File config\*.rdf File config\*.css File config\annot.schemas File config\win-thot.rc SetDetailsPrint textonly DetailPrint "Installing Amaya dictionnaries" SetDetailsPrint listonly SetOutPath "$INSTDIR\dicopar" File dicopar\alphabet File dicopar\*.ptn File dicopar\clavier File dicopar\*.dic SetDetailsPrint textonly DetailPrint "Installing Amaya documentation" SetDetailsPrint listonly SetOutPath "$INSTDIR\doc\WX" File doc\WX\* SetOutPath "$INSTDIR\doc\WX\HTML-elements" File doc\WX\HTML-elements\* SetOutPath "$INSTDIR\doc\images" File doc\images\* SetDetailsPrint textonly DetailPrint "Installing Amaya ttf fonts" SetDetailsPrint listonly SetOutPath "$INSTDIR\fonts" File fonts\* SetDetailsPrint textonly DetailPrint "Writting registry keys" SetDetailsPrint listonly ;Store installation folder WriteRegStr HKCU "Software\Amaya" "" $INSTDIR WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "DisplayName" "Amaya" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "DisplayIcon" "$INSTDIR\WindowsWX\bin\amaya.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" "URLInfoAbout" "http://www.w3.org/Amaya" ; Associate files to amaya WriteRegStr HKCR "Amaya" "" "Amaya Files" WriteRegStr HKCR "Amaya\DefaultIcon" "" "$INSTDIR\WindowsWX\bin\amaya.exe" ReadRegStr $R0 HKCR "Amaya\shell\open\command" "" StrCmp $R0 "" 0 no_amayaopen WriteRegStr HKCR "Amaya\shell" "" "open" WriteRegStr HKCR "Amaya\shell\open\command" "" '"$INSTDIR\WindowsWX\bin\amaya.exe" "%1"' no_amayaopen: ;Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" ;Install Amaya for all users SetShellVarContext all ;Start Menu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Amaya.lnk" "$INSTDIR\WindowsWX\bin\amaya.exe" !insertmacro MUI_STARTMENU_WRITE_END ;Create desktop link CreateShortCut "$DESKTOP\Amaya.lnk" "$INSTDIR\WindowsWX\bin\amaya.exe" SectionEnd SubSection "File association" SecFileAss ; --> .html Section /o ".html (HyperText Markup Language)" SecAssHTML ReadRegStr $R0 HKCR ".html" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".html" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".html" "" "Amaya" allready_amaya: SectionEnd ; --> .htm Section /o ".htm (HyperText Markup Language)" SecAssHTM ReadRegStr $R0 HKCR ".htm" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".htm" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".htm" "" "Amaya" allready_amaya: SectionEnd ; --> .xml Section /o ".xml (eXtensible Markup Language)" SecAssXML ReadRegStr $R0 HKCR ".xml" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".xml" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".xml" "" "Amaya" allready_amaya: SectionEnd ; --> .svg Section /o ".svg (Scalable Vector Graphics)" SecAssSVG ReadRegStr $R0 HKCR ".svg" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".svg" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".svg" "" "Amaya" allready_amaya: SectionEnd ; --> .mml Section /o ".mml (MathML)" SecAssMML ReadRegStr $R0 HKCR ".mml" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".mml" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".mml" "" "Amaya" allready_amaya: SectionEnd ; --> .css Section /o ".css (Cascading Style Sheets)" SecAssCSS ReadRegStr $R0 HKCR ".css" "" StrCmp $R0 "Amaya" allready_amaya no_amaya no_amaya: WriteRegStr HKCR ".css" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".css" "" "Amaya" allready_amaya: SectionEnd SubSectionEnd ;-------------------------------- ;Installer Functions Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd ;-------------------------------- ;Descriptions ;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGAUGE SPECIFIC ;Assign descriptions to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecAmaya} "Install main Amaya program (mandatory)." !insertmacro MUI_DESCRIPTION_TEXT ${SecFileAss} "Selects Amaya as the default application for files of these types." !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Uninstaller Section Section "Uninstall" SetDetailsPrint textonly DetailPrint "Uninstalling Amaya..." SetDetailsPrint listonly IfFileExists $INSTDIR\WindowsWX\bin\amaya.exe amaya_installed MessageBox MB_YESNO "It does not appear that Amaya is installed in the directory '$INSTDIR'.$\r$\nContinue anyway (not recommended)?" IDYES amaya_installed Abort "Uninstall aborted by user" amaya_installed: SetDetailsPrint textonly DetailPrint "Deleting Files..." SetDetailsPrint listonly ;Uninstall Amaya for all users SetShellVarContext all ReadRegStr $STARTMENU_FOLDER HKCU "Software\Amaya" "Start Menu Folder" IfFileExists "$SMPROGRAMS\$STARTMENU_FOLDER\Amaya.lnk" amaya_smp_installed Goto amaya_smp_notinstalled amaya_smp_installed: Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Amaya.lnk" Delete "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" RMDir "$SMPROGRAMS\$STARTMENU_FOLDER" Delete "$DESKTOP\Amaya.lnk" amaya_smp_notinstalled: RMDir /r "$INSTDIR" SetDetailsPrint textonly DetailPrint "Deleting Registry Keys..." SetDetailsPrint listonly DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Amaya" DeleteRegKey HKLM "Software\Amaya" DeleteRegKey HKCR "Amaya" DeleteRegKey HKCU "Software\Amaya" ; uninstall files associations ; --> .html ReadRegStr $R0 HKCR ".html" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".html" "AM_OLD_VALUE" WriteRegStr HKCR ".html" "" $R0 ; --> .htm ReadRegStr $R0 HKCR ".htm" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".htm" "AM_OLD_VALUE" WriteRegStr HKCR ".htm" "" $R0 ; --> .css ReadRegStr $R0 HKCR ".css" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".css" "AM_OLD_VALUE" WriteRegStr HKCR ".css" "" $R0 ; --> .svg ReadRegStr $R0 HKCR ".svg" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".svg" "AM_OLD_VALUE" WriteRegStr HKCR ".svg" "" $R0 ; --> .mml ReadRegStr $R0 HKCR ".mml" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".mml" "AM_OLD_VALUE" WriteRegStr HKCR ".mml" "" $R0 ; --> .xml ReadRegStr $R0 HKCR ".xml" "" StrCmp $R0 "Amaya" 0 +3 ReadRegStr $R0 HKCR ".xml" "AM_OLD_VALUE" WriteRegStr HKCR ".xml" "" $R0 SectionEnd ;-------------------------------- ;Uninstaller Functions Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEndstimfit-0.17.1/dist/windows/nsis/installer.nsi.in000066400000000000000000000430261517235503400220170ustar00rootroot00000000000000; installer.nsi ; ; NSI script for stimfit ; This may slightly reduce the executable size, but compression is slower. SetCompressor lzma ; RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) ;-------------------------------- ; Use modern interface !include MUI2.nsh ;-------------------------------- !include LogicLib.nsh !define PRODUCT_VERSION "@PACKAGE_VERSION@" !define WXW_VERSION "3.0.2.0" !define WXW_VERSION_DIR "3.0.2" !define WXW_VERSION_SHORT "30" !define PY_VERSION "2.7.14" !define PY_MAJOR "2.7" !define PY_MAJOR_SHORT "27" !define PY_MIN "2.7" !define PY_INST_FILE "python-${PY_VERSION}.amd64.msi" Var PY_ACT !define NP_VERSION "" !define MPL_VERSION "" !define EMF_VERSION "" !define EXE_NAME "Stimfit" !define REG_NAME "Stimfit 0.15" !define REG_NAME_IO "stfio 0.15" !define PRODUCT_PUBLISHER "Christoph Schmidt-Hieber" !define PRODUCT_WEB_SITE "http://www.stimfit.org" !define STFDIR "..\..\..\..\stimfit" !define BUILDTARGETDIR "${STFDIR}\dist\windows\VS2008\${EXE_NAME}\x64\Release" !define PYSTFDIR "${STFDIR}\src\stimfit\py" !define PYSTFIODIR "${STFDIR}\src\pystfio" !define MSIDIR "..\..\..\..\Downloads" !define WXWDIR "..\..\..\..\wx" !define WXPDIR "..\..\..\..\wxPython" !define FFTDIR "..\..\..\..\fftw" !define HDF5DIR "..\..\..\..\hdf5" !define BIOSIGDIR "..\..\..\..\biosig" !define PYEMFDIR "${STFDIR}\src\stimfit\py\emf" !define PRODIR "C:\Program Files" !define ALTPRODIR "C:\Program Files (x86)" !define FULL_WELCOME "This wizard will guide you through the installation \ of ${REG_NAME} and wxPython. You will need an internet connection during the installation to download required Python packages. \ It is strongly recommended that you uninstall any earlier version of Stimfit (< 0.11) before \ proceeding. You can optionally \ install Python ${PY_VERSION}, NumPy ${NP_VERSION} \ Matplotlib ${MPL_VERSION} and PyEMF ${EMF_VERSION}\ if you don't have them on your machine." !define UPDATE_WELCOME "This wizard will install \ ${REG_NAME} on your computer. It is strongly recommended that you uninstall any \ previous versions (< 0.11) first. Please make sure Python ${PY_MAJOR}, \ NumPy and Matplotlib are installed before proceeding." ; The name of the installer Name "${REG_NAME}" ; The file to write !ifdef UPDATE OutFile "${EXE_NAME}-${PRODUCT_VERSION}-core.exe" !else OutFile "${EXE_NAME}-${PRODUCT_VERSION}-bundle.exe" !endif ; The default installation directory InstallDir "$PROGRAMFILES64\${REG_NAME}" ; Request application privileges for Windows Vista RequestExecutionLevel admin !define STRING_PYTHON_NOT_FOUND "Python ${PY_MIN} (or newer) is not installed on this system. \ $\nPlease install Python first. \ $\nClick OK to cancel installation and remove installation files." ;-------------------------------- ;Variables Var StartMenuFolder Var StrNoUsablePythonFound ;-------------------------------- ; Function .onInit ; UserInfo::GetAccountType ; pop $0 ; ${If} $0 != "admin" ;Require admin rights on NT4+ ; MessageBox mb_iconstop "Administrator rights required!" ; SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED ; Quit ; ${EndIf} ; FunctionEnd ; Pages !ifdef UPDATE !define MUI_WELCOMEPAGE_TEXT "${UPDATE_WELCOME}" !else !define MUI_WELCOMEPAGE_TEXT "${FULL_WELCOME}" !endif !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "${STFDIR}\gpl-2.0.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${REG_NAME}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ; The stuff to install !ifndef UPDATE Section "Python ${PY_VERSION}" 0 ; Set output path to the installation directory. SetOutPath $INSTDIR ; Put installer into installation dir temporarily File "${MSIDIR}\${PY_INST_FILE}" ExecWait '"Msiexec.exe" /i "$INSTDIR\${PY_INST_FILE}"' ; Delete installer once we are done Delete "$INSTDIR\${PY_INST_FILE}" ; Install PyEMF ExecWait 'cd "${PYEMFDIR}"; "c:\python${PY_MAJOR_SHORT}\python.exe" setup.py install' RMDir /r "${PYEMFDIR}" ; Install / upgrade numpy, scipy, matplotlib, nptdms ExecWait '"c:\Python${PY_MAJOR_SHORT}\Scripts\pip.exe" install --upgrade numpy scipy matplotlib nptdms' SectionEnd !endif Section "!Program files and Python modules" 1 ; Core program files and Python modules ;This section is required : readonly mode SectionIn RO ; Create default error message StrCpy $StrNoUsablePythonFound "${STRING_PYTHON_NOT_FOUND}" ClearErrors SetRegView 64 ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MAJOR}\InstallPath" "" IfErrors 0 +9 ClearErrors ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +8 ClearErrors ReadRegStr $9 HKEY_CURRENT_USER "Software\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +5 MessageBox MB_OK "$StrNoUsablePythonFound" Quit SetRegView 32 StrCpy $PY_ACT "${PY_MAJOR}" Goto +2 StrCpy $PY_ACT "${PY_MIN}" ClearErrors DetailPrint "Found a Python $PY_ACT installation at '$9'" ; Add a path to the installation directory in the python site-packages folder FileOpen $0 $9\Lib\site-packages\stimfit.pth w FileWrite $0 "$INSTDIR" FileClose $0 IfErrors 0 +3 MessageBox MB_OK "Couldn't create path for python module" Quit ClearErrors ; Set output path to the installation directory. SetOutPath $INSTDIR Delete "$INSTDIR\*.exe" Delete "$INSTDIR\*.dll" Delete "$INSTDIR\wx*" RMDir /r "$INSTDIR\wx-${WXW_VERSION_DIR}-msw-unicode" RMDir /r "$INSTDIR\wx-${WXW_VERSION_DIR}-msw" RMDir /r "$INSTDIR\*site-packages" File "${FFTDIR}\libfftw3-3.dll" File "${HDF5DIR}\bin\hdf5_hl.dll" File "${HDF5DIR}\bin\hdf5.dll" File "${HDF5DIR}\bin\szip.dll" File "${HDF5DIR}\bin\zlib.dll" File "${BIOSIGDIR}\lib\libbiosig.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxmsw${WXW_VERSION_SHORT}u_core_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxbase${WXW_VERSION_SHORT}u_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxmsw${WXW_VERSION_SHORT}u_aui_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxmsw${WXW_VERSION_SHORT}u_adv_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxbase${WXW_VERSION_SHORT}u_net_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxmsw${WXW_VERSION_SHORT}u_html_vc90_x64.dll" File "${WXWDIR}\lib\vc90_x64_dll\wxmsw${WXW_VERSION_SHORT}u_stc_vc90_x64.dll" File "${HDF5DIR}\bin\msvcp90.dll" File "${HDF5DIR}\bin\msvcr90.dll" File /r "${WXPDIR}\wx*" File "${BUILDTARGETDIR}\${EXE_NAME}.exe" File "${BUILDTARGETDIR}\libstimfit.dll" File "${BUILDTARGETDIR}\libstfio.dll" File "${BUILDTARGETDIR}\libstfnum.dll" File "${BUILDTARGETDIR}\_stf.pyd" File "${PYSTFDIR}\stf.py" File "${PYSTFDIR}\ivtools.py" File "${PYSTFDIR}\mintools.py" File "${PYSTFDIR}\natools.py" File "${PYSTFDIR}\minidemo.py" File "${PYSTFDIR}\charlie.py" File "${PYSTFDIR}\hdf5tools.py" File "${PYSTFDIR}\spells.py" File "${PYSTFDIR}\tdms.py" File "${PYSTFDIR}\embedded_init.py" File "${PYSTFDIR}\stimfit_shell_api.py" File "${PYSTFDIR}\embedded_stf.py" File "${PYSTFDIR}\embedded_shell_ipython.py" File "${PYSTFDIR}\embedded_mpl.py" File "${PYSTFDIR}\heka.py" File "${PYSTFDIR}\extensions.py" File /r /x .hg "${STFDIR}\src" ;Store installation folder WriteRegStr HKCU "Software\${REG_NAME}" "" $INSTDIR WriteRegStr HKCU "Software\${REG_NAME}" "InstallLocation" $INSTDIR WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "DisplayName" "${REG_NAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "DisplayIcon" "$INSTDIR\${EXE_NAME}.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" ; Associate files to amaya WriteRegStr HKCR "${REG_NAME}" "" "${REG_NAME} Files" WriteRegStr HKCR "${REG_NAME}\DefaultIcon" "" "$INSTDIR\${EXE_NAME}.exe" WriteRegStr HKCR "${REG_NAME}\shell" "" "open" WriteRegStr HKCR "${REG_NAME}\shell\open\command" "" '"$INSTDIR\${EXE_NAME}.exe" "/d=$INSTDIR" "%1"' ; Create uninstaller WriteUninstaller "$INSTDIR\Uninstall.exe" ; Install for all users SetShellVarContext all ;Start Menu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ; Create shortcuts CreateDirectory "$SMPROGRAMS\$StartMenuFolder" CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${REG_NAME}.lnk" "$INSTDIR\${EXE_NAME}.exe" !insertmacro MUI_STARTMENU_WRITE_END ; Create desktop link CreateShortCut "$DESKTOP\${REG_NAME}.lnk" "$INSTDIR\${EXE_NAME}.exe" SectionEnd ; end the section Section "!stfio standalone module" 2 ; Standalone python file i/o module ;This section is required : readonly mode SectionIn RO ; Create default error message StrCpy $StrNoUsablePythonFound "${STRING_PYTHON_NOT_FOUND}" ClearErrors SetRegView 64 ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MAJOR}\InstallPath" "" IfErrors 0 +9 ClearErrors ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +8 ClearErrors ReadRegStr $9 HKEY_CURRENT_USER "Software\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +5 MessageBox MB_OK "$StrNoUsablePythonFound" Quit SetRegView 32 StrCpy $PY_ACT "${PY_MAJOR}" Goto +2 StrCpy $PY_ACT "${PY_MIN}" ClearErrors DetailPrint "Found a Python $PY_ACT installation at '$9'" !define STFIODIR "$9\Lib\site-packages\stfio" ; Add a path to the installation directory in the python site-packages folder ; FileOpen $0 $9\Lib\site-packages\stfio.pth w ; FileWrite $0 ${STFIODIR} ; FileClose $0 IfErrors 0 +3 MessageBox MB_OK "Couldn't create path for python module" Quit ClearErrors ; Set output path to the installation directory. RMDir /r ${STFIODIR} CreateDirectory ${STFIODIR} SetOutPath ${STFIODIR} File "${FFTDIR}\libfftw3-3.dll" File "${HDF5DIR}\bin\hdf5_hl.dll" File "${HDF5DIR}\bin\hdf5.dll" File "${HDF5DIR}\bin\szip.dll" File "${HDF5DIR}\bin\zlib.dll" File "${BIOSIGDIR}\lib\libbiosig.dll" File "${HDF5DIR}\bin\msvcp90.dll" File "${HDF5DIR}\bin\msvcr90.dll" File "${BUILDTARGETDIR}\_stfio.pyd" File "${BUILDTARGETDIR}\libstfio.dll" File "${BUILDTARGETDIR}\libstfnum.dll" File "${PYSTFIODIR}\__init__.py" File "${PYSTFIODIR}\stfio.py" File "${PYSTFIODIR}\stfio_plot.py" File "${PYSTFIODIR}\stfio_neo.py" File "${PYSTFIODIR}\unittest_stfio.py" ; Install for all users SetShellVarContext all SectionEnd ; end the section Section "Uninstall" SetDetailsPrint textonly DetailPrint "Deleting program files..." SetDetailsPrint listonly ;Uninstall Stimfit for all users SetShellVarContext all ReadRegStr $StartMenuFolder HKCU "Software\${REG_NAME}" "Start Menu Folder" IfFileExists "$SMPROGRAMS\$StartMenuFolder\${EXE_NAME}.lnk" stimfit_smp_installed Goto stimfit_smp_notinstalled stimfit_smp_installed: Delete "$SMPROGRAMS\$StartMenuFolder\${EXE_NAME}.lnk" Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" RMDir "$SMPROGRAMS\$StartMenuFolder" stimfit_smp_notinstalled: RMDir /r "$INSTDIR" Delete "$DESKTOP\${EXE_NAME}.lnk" ClearErrors ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MAJOR}\InstallPath" "" IfErrors 0 +8 ClearErrors ReadRegStr $9 HKEY_LOCAL_MACHINE "SOFTWARE\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +7 ClearErrors ReadRegStr $9 HKEY_CURRENT_USER "Software\Python\PythonCore\${PY_MIN}\InstallPath" "" IfErrors 0 +4 DetailPrint "$StrNoUsablePythonFound" StrCpy $PY_ACT "${PY_MAJOR}" Goto +2 StrCpy $PY_ACT "${PY_MIN}" ClearErrors DetailPrint "Found a Python $PY_ACT installation at '$9'" !define STFIORMDIR "$9\Lib\site-packages\stfio" Delete ${STFIORMDIR}\..\stfio.pth Delete ${STFIORMDIR}\..\stimfit.pth RMDir /r ${STFIORMDIR} SetDetailsPrint textonly DetailPrint "Deleting registry keys..." SetDetailsPrint listonly DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME}" DeleteRegKey HKLM "Software\${REG_NAME}" DeleteRegKey HKCR "${REG_NAME}" DeleteRegKey HKCU "Software\${REG_NAME}" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${REG_NAME_IO}" DeleteRegKey HKLM "Software\${REG_NAME_IO}" DeleteRegKey HKCR "${REG_NAME_IO}" DeleteRegKey HKCU "Software\${REG_NAME_IO}" ; uninstall files associations ; --> .dat ReadRegStr $R0 HKCR ".dat" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".dat" "AM_OLD_VALUE" WriteRegStr HKCR ".dat" "" $R0 ; --> .cfs ReadRegStr $R0 HKCR ".cfs" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".cfs" "AM_OLD_VALUE" WriteRegStr HKCR ".cfs" "" $R0 ; --> .h5 ReadRegStr $R0 HKCR ".h5" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".h5" "AM_OLD_VALUE" WriteRegStr HKCR ".h5" "" $R0 ; --> .axgd ReadRegStr $R0 HKCR ".axgd" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".axgd" "AM_OLD_VALUE" WriteRegStr HKCR ".axgd" "" $R0 ; --> .axgx ReadRegStr $R0 HKCR ".axgx" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".axgx" "AM_OLD_VALUE" WriteRegStr HKCR ".axgx" "" $R0 ; --> .abf ReadRegStr $R0 HKCR ".abf" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".abf" "AM_OLD_VALUE" WriteRegStr HKCR ".abf" "" $R0 ; --> .atf ReadRegStr $R0 HKCR ".atf" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".atf" "AM_OLD_VALUE" WriteRegStr HKCR ".atf" "" $R0 ; --> .tdms ReadRegStr $R0 HKCR ".tdms" "" StrCmp $R0 "${REG_NAME}" 0 +3 ReadRegStr $R0 HKCR ".tdms" "AM_OLD_VALUE" WriteRegStr HKCR ".tdms" "" $R0 SetDetailsPrint textonly DetailPrint "Successfully uninstalled stimfit" SetDetailsPrint listonly SectionEnd ; File associations SubSection "File associations" SecFileAss ; --> .dat Section ".dat (CED filing system)" SecAssDAT ReadRegStr $R0 HKCR ".dat" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".dat" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".dat" "" "${REG_NAME}" already_stf: SectionEnd ; --> .cfs Section ".cfs (CED filing system)" SecAssCFS ReadRegStr $R0 HKCR ".cfs" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".cfs" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".cfs" "" "${REG_NAME}" already_stf: SectionEnd ; --> .h5 Section ".h5 (HDF5)" SecAssH5 ReadRegStr $R0 HKCR ".h5" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".h5" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".h5" "" "${REG_NAME}" already_stf: SectionEnd ; --> .axgd Section ".axgd (Axograph digitized)" SecAssAxgd ReadRegStr $R0 HKCR ".axgd" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".axgd" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".axgd" "" "${REG_NAME}" already_stf: SectionEnd ; --> .axgx Section ".axgx (Axograph X)" SecAssAxgx ReadRegStr $R0 HKCR ".axgx" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".axgx" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".axgx" "" "${REG_NAME}" already_stf: SectionEnd ; --> .abf Section ".abf (Axon binary file)" SecAssABF ReadRegStr $R0 HKCR ".abf" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".abf" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".abf" "" "${REG_NAME}" already_stf: SectionEnd ; --> .atf Section ".atf (Axon text file)" SecAssATF ReadRegStr $R0 HKCR ".atf" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".atf" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".atf" "" "${REG_NAME}" already_stf: SectionEnd ; --> .tdms Section ".tdms (Mantis TDMS file)" SecAssTDMS ReadRegStr $R0 HKCR ".tdms" "" StrCmp $R0 "${REG_NAME}" already_stf no_stf no_stf: WriteRegStr HKCR ".tdms" "AM_OLD_VALUE" $R0 WriteRegStr HKCR ".tdms" "" "${REG_NAME}" already_stf: SectionEnd SubSectionEnd ;-------------------------------- ;Descriptions ;Assign descriptions to sections !ifndef UPDATE !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT 0 "Python ${PY_MIN} or ${PY_MAJOR} is required to run stimfit. Unselect this if it's already installed on your system." !insertmacro MUI_DESCRIPTION_TEXT 1 "The core program files and wxPython 2.9 (mandatory)." !insertmacro MUI_DESCRIPTION_TEXT 2 "Standalone Python file i/o module." !insertmacro MUI_DESCRIPTION_TEXT 3 "Selects Stimfit as the default application for files of these types." !insertmacro MUI_FUNCTION_DESCRIPTION_END !else !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT 1 "The core program files and wxPython 2.9 (mandatory)." !insertmacro MUI_DESCRIPTION_TEXT 2 "Standalone Python file i/o module." !insertmacro MUI_DESCRIPTION_TEXT 3 "Selects Stimfit as the default application for files of these types." !insertmacro MUI_FUNCTION_DESCRIPTION_END !endif stimfit-0.17.1/doc/000077500000000000000000000000001517235503400140315ustar00rootroot00000000000000stimfit-0.17.1/doc/Doxyfile.in000066400000000000000000001766251517235503400161650ustar00rootroot00000000000000# Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = Stimfit # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxygen # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = .. # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../src/libstfio \ ../src/libstfnum \ ../src/stimfit/stf.h \ ../src/stimfit/gui # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h \ *.hpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = ../src/biosig \ ../src/test \ ../src/stimfit/sip.h \ ../src/stimfit/gui/wx # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */test/* \ */gtest/* \ */biosig/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. # FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = lmodern \ textcomp \ amsmath # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = _WINDOWS \ __UNIX__ \ WITH_PYTHON # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES # Enable the USE_MATHJAX option to render $\mbox{\LaTeX}$ formulas using # MathJax (see http://www.mathjax.org) which uses client side Javascript # for the rendering instead of using prerendered bitmaps. Use this if you # do not have LaTeX installed or if you want to formulas look prettier # in the HTML output. USE_MATHJAX = YES # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = teX/AMSmath TeX/AMSsymbols # Use this tag to change the font size of LaTeX formulas included as images # in the HTML documentation. The default is 10. when you change the font # size after a successful doxygen run you need to manually remove any # form_*.png images from the HTML output directory to force them to be # regenerated. FORMULA_FONTISZE = 16 stimfit-0.17.1/doc/biosig-msvc-maintainer.md000066400000000000000000000053251517235503400207270ustar00rootroot00000000000000# Maintaining MSVC biosig patches downstream This repository keeps MSVC compatibility for biosig as a downstream patch queue. Upstream biosig does not accept MSVC support, so patches are applied only to a throwaway working copy outside the submodule tree. Windows patching is pinned to a specific upstream biosig tag (`v3.9.5`). Configuration now fails fast when `src/biosig` is not exactly at that tag's commit. ## Files involved - Patch queue: `cmake/patches/biosig-msvc/*.patch` - Helper script: `cmake/PrepareBiosigMSVC.cmake` - Stimfit preset using patched biosig: - Configure preset: `vs2022-vcpkg-wx-hdf5-biosig-patched` - Build preset: `vs2022-release-stimfit-biosig-patched` ## One-time build flow on Windows Quick wrapper (runs prepare + configure + build): ```powershell ./cmake/build-stimfit-with-patched-biosig.ps1 ``` To skip patch preparation and reuse existing prepared biosig artifacts: ```powershell ./cmake/build-stimfit-with-patched-biosig.ps1 -SkipPrepare ``` 1. Prepare patched biosig and build `biosig2shared`: ```powershell cmake -P cmake/PrepareBiosigMSVC.cmake ``` 2. Build Stimfit against the external patched biosig artifacts: ```powershell cmake --preset vs2022-vcpkg-wx-hdf5-biosig-patched cmake --build --preset vs2022-release-stimfit-biosig-patched ``` The helper script prints and writes the resolved paths to: - `build/biosig-msvc-build/biosig-msvc-paths.cmake` ## Refreshing the patch queue When updating the pinned biosig version, refresh patches from your local biosig branch that contains MSVC fixes. 1. Checkout/update `src/biosig` to the pinned tag commit (currently `v3.9.5`). 2. Rebase/update your biosig patch branch against that same tag/commit. 3. Export patch queue into this repository: ```powershell git -C src/biosig format-patch v3.9.5..feature/msvc2022-libbiosig -o cmake/patches/biosig-msvc ``` 4. Re-run helper script to verify patches still apply and build: ```powershell cmake -P cmake/PrepareBiosigMSVC.cmake ``` If patch apply fails, resolve in the biosig patch branch, regenerate patch files, and retry. ## Script options The helper script accepts cache variables when invoked with `-D`: - `STF_BIOSIG_SOURCE_DIR`: source repo (default `src/biosig`) - `STF_BIOSIG_WORK_DIR`: patched working copy path - `STF_BIOSIG_BUILD_DIR`: out-of-tree build path - `STF_BIOSIG_PATCH_DIR`: patch queue directory - `STF_BIOSIG_EXPECTED_TAG`: required biosig tag for patching (default `v3.9.5`) - `STF_BIOSIG_GENERATOR`: CMake generator (default VS 2022) - `STF_BIOSIG_ARCH`: architecture (default `x64`) - `STF_BIOSIG_CONFIG`: build config (default `Release`) - `STF_BIOSIG_TARGETS`: targets to build (default `biosig2shared`) - `STF_BIOSIG_CLEAN`: clean work/build dirs before prepare (default `ON`) stimfit-0.17.1/doc/doxyHeaderLatex000077500000000000000000000021031517235503400170450ustar00rootroot00000000000000\documentclass[a4paper]{book} \usepackage{a4wide} \usepackage{makeidx} \usepackage{fancyhdr} \usepackage{graphicx} \usepackage{multicol} \usepackage{float} \usepackage{textcomp} \usepackage{alltt} \usepackage{times} \usepackage{ifpdf} \ifpdf \usepackage[pdftex, pagebackref=true, colorlinks=true, linkcolor=blue, unicode ]{hyperref} \else \usepackage[ps2pdf, pagebackref=true, colorlinks=true, linkcolor=blue, unicode ]{hyperref} \usepackage{pspicture} \fi \usepackage[utf8]{inputenc} \usepackage{doxygen} \usepackage{lmodern} \usepackage{textcomp} \usepackage{amsmath} \makeindex \setcounter{tocdepth}{1} \renewcommand{\footrulewidth}{0.4pt} \begin{document} \begin{titlepage} \vspace*{7cm} \begin{center} {\Large Your title here}\\ \vspace*{1cm} {\large Generated by Doxygen 1.5.5}\\ \vspace*{0.5cm} {\small Sun Apr 20 21:45:34 2008}\\ \end{center} \end{titlepage} \clearemptydoublepage \pagenumbering{roman} \tableofcontents \clearemptydoublepage \pagenumbering{arabic} stimfit-0.17.1/doc/sphinx/000077500000000000000000000000001517235503400153425ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/.templates/000077500000000000000000000000001517235503400174165ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/.templates/index.html000066400000000000000000000060121517235503400214120ustar00rootroot00000000000000{% extends "layout.html" %} {% block sidebarsearch %}

Download {{project}} {{version}}

Documentation in PDF

{% endblock %} {% block body %}

{{ docstitle|e }}

{% block tables %}
{% endblock %} {% endblock %} stimfit-0.17.1/doc/sphinx/.templates/layout.html000066400000000000000000000016311517235503400216220ustar00rootroot00000000000000{% extends "!layout.html" %} {# put the sidebar before the body #} {{ sidebar() }} {# {% block sidebar1 %}{{ sidebar() }}{% endblock %} {% block sidebar2 %} {% endblock %} #} {# to show the bar on the left side #} {#{{ sidebar() }}#} {# show the relbar only before the document #} {% block relbar2 %} {{ sidebar() }} {% endblock %} {# update static links in the relbar #} {% block rootrellink %}
  • Stimfit Homepage |  
  • Developer (Github) |  
  • Documentation Home |  
  • {#
  • TOC
  • #} {% endblock %} {# {% block relbaritems %}
  • Download Stimfit
  • {% endblock %} #} stimfit-0.17.1/doc/sphinx/.templates/layout_old.html000066400000000000000000000006351517235503400224630ustar00rootroot00000000000000{% extends "!layout.html" %} {# put the sidebar before the body #} {% block sidebar1 %}{{ sidebar() }}{% endblock %} {% block sidebar2 %}{% endblock %} {# update static links in the relbar #} {% block rootrellink %}
  • Stf documentation
  • TOC
  • Search
  • {% endblock %} stimfit-0.17.1/doc/sphinx/Makefile.sphinx000066400000000000000000000044771517235503400203260ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d .build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html web pickle htmlhelp latex changes linkcheck help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview over all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" clean: -rm -rf .build/* html: mkdir -p .build/html .build/doctrees $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) .build/html @echo @echo "Build finished. The HTML pages are in .build/html." pickle: mkdir -p .build/pickle .build/doctrees $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) .build/pickle @echo @echo "Build finished; now you can process the pickle files." web: pickle json: mkdir -p .build/json .build/doctrees $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) .build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: mkdir -p .build/htmlhelp .build/doctrees $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) .build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in .build/htmlhelp." latex: mkdir -p .build/latex .build/doctrees $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) .build/latex @echo @echo "Build finished; the LaTeX files are in .build/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: mkdir -p .build/changes .build/doctrees $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) .build/changes @echo @echo "The overview file is in .build/changes." linkcheck: mkdir -p .build/linkcheck .build/doctrees $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) .build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in .build/linkcheck/output.txt." stimfit-0.17.1/doc/sphinx/conf.py000066400000000000000000000005431517235503400166430ustar00rootroot00000000000000from pathlib import Path conf_template = Path(__file__).with_name("conf.py.in") namespace = { "__file__": str(conf_template), "__name__": "__main__", } rendered = conf_template.read_text(encoding="utf-8").replace( "@PACKAGE_VERSION@", "dev", ) exec(compile(rendered, str(conf_template), "exec"), namespace) globals().update(namespace) stimfit-0.17.1/doc/sphinx/conf.py.in000066400000000000000000000030661517235503400172530ustar00rootroot00000000000000from __future__ import annotations import os import sys # Add project-local modules here if Sphinx autodoc is expanded in the future. sys.path.insert(0, os.path.abspath(".")) # -- General configuration ------------------------------------------------ needs_sphinx = "5.0" extensions = [ "sphinx.ext.autodoc", "sphinx.ext.doctest", "sphinx.ext.intersphinx", "sphinx.ext.mathjax", ] templates_path = [".templates"] exclude_patterns = [".build", "Thumbs.db", ".DS_Store"] source_suffix = ".rst" master_doc = "contents" project = "Stimfit" copyright = "2026, Stimfit contributors" version = "@PACKAGE_VERSION@" release = "@PACKAGE_VERSION@" today_fmt = "%d %B, %Y" show_authors = True pygments_style = "sphinx" rst_epilog = """ .. |project_name| replace:: Stimfit """ # -- Options for HTML output ---------------------------------------------- html_theme = "classic" html_title = f"{project} {release} documentation" html_short_title = "Stimfit docs" html_logo = "../../src/stimfit/res/stimfit_128.png" html_show_sphinx = False html_last_updated_fmt = "%d %B, %Y" html_copy_source = False html_use_index = True htmlhelp_basename = "Stimfitdoc" # -- Options for LaTeX output --------------------------------------------- latex_documents = [ ( "contents", "Stimfitdocumentation.tex", "Stimfit Documentation", "Christoph Schmidt-Hieber and Jose Guzman", "manual", ) ] # -- Extension configuration ---------------------------------------------- intersphinx_mapping = { "python": ("https://docs.python.org/3", None), } stimfit-0.17.1/doc/sphinx/contents.rst000066400000000000000000000012621517235503400177320ustar00rootroot00000000000000Stimfit documentation ===================== This documentation covers the current CMake-based build and packaging workflow on the [`master`](README.md:13) branch together with the existing user manual, reference material, and Python module notes. Contents -------- .. toctree:: :maxdepth: 2 :caption: Main sections manual/index linux_install_guide/index osx_install_guide/index win_install_guide/index howto/index stf_reference/stf references/index stfio/index links/index Indices and tables ------------------ :Author: Christoph Schmidt-Hieber (christsc at gmx.de) and Jose Guzman :Date: |today| * :ref:`genindex` * :ref:`modindex` * :ref:`search` stimfit-0.17.1/doc/sphinx/howto/000077500000000000000000000000001517235503400165025ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/howto/APmodule.png000066400000000000000000000317321517235503400207240ustar00rootroot00000000000000PNG  IHDRnH#.sBITO IDATx^}Eֶ"i" HA}P IE% Òu]E@ I%ET q ~/]uV3sùn|5af`f xǍdu$c f`f ϧ]IG𡊍ub]8gd`zX/5;TȑiGB0ZҴ–0v?.hd^O-[.g\RhNiȦDӑPљ Bܷo_NnT޼J*L>[+A,WŋFtMx0$}Ņ맟~LM=R9L`mҥKHw})(_5ODs[}-6#G޻"H.#XqWt_~9бc )MZSnc?ɓzowFzw>})[]Q ÇQB *؟>gΜk׮(:u0ev ƊQ+t$thp\|R+DbB\^o/3V^WXQ P@{lɒ%jF+._Y\1!1o@ ½gu =z^UVlGyU(QTp*=ޜ9sv ]V5~x+W%oӧψ"0~G~BpW_o۶qƏ>֭۾ 1Eg2*B]9ŪjO?͗/yp% E!Tl u̙3q8q\Reќڟ!.֐E:ϝ;ܹ?.SRRC"|~w0 v=U.\8l0sqW^-[12٥KS4({~8 w}ߟyO7]ܹk5jT?xm:t믿!k~xw׿ kh14jڴ)擑bvu]v\h#YJ԰aiD/YT5k@—a3=sM|=##z~͚5ǎE7Õ_oC4c?CHkqҥ3.P fO5dbUZ1CQeϞm9;wZq'^pƿjF&_};wUVahР@HA/n ,xTI;CxI^{r߾RxPذ_ #q%D)rUL-|';ڿa߹soiq\dImڔ,N7(('Ա;sT8}Ȓ%ꌑ" (y1zW\s@C (~b-3eTbEQnÒ֭[ĩ$*ilˮ蹇Uasܸp1E"hlZ i=:iFJUks)SRa`9r@vޤIȑ,=~%3Ց͛7{.]ߊWT)b>o[|۳g7NϞ2 *hM˗H" Ο?4nw*^gGWF?#ҵ(eVECfW0X 'L!yª8DZ5;zUVLjհ\/ӟt#i}[HwñUiѣE*0%l0(_pq9xT`9#V&!C:u̙Ɂ?ԢEKDrʵk_IqKV[n^paܸq86&1+|,%L 4w_˫Ɯ !R-Da)fwx)=^t'd`O38.\6lJl?'n Nq5ʜ|?- p)@FoZ~iJ4BH VZ |ݸq o:_ǰz_|kԨqw;V(&1] Nbmڴ0@!p:"W|?ucL"w!*c "En|^\6Q3os1Vn0TEMDݺuy䑐})`& 0g=wXiBy+!5 A͛bt(cb /=C {W硇U Ve5@X4ij=ԕ!#N#⹅UU:?䓬Yb,$^K.<۰PrFfpмysX4V_x:G< 6nF9"xf /~>N0f썤33ji0. :!3^`!Yxp騂hq:B2<-kР@*i/}#žrx'f÷O]`Igvg``]AtBf.}#v tBl%:;9>CQR܏8!G P&#ăB9Kao9}HG͢w'G\A`f;tѻ'jxq,߸8j.5JGW~ eիf>5xX,ܠ^.YI<+L@p'#0Xn zWD2D1_ Xq7p\:j܏U@X{ӂ'\5[޼ ;DA4WW>jFT3QpK7H9BfD /'17~o8Q_~y;V԰X^g=xSՀz;T~5{%(f, :%b.p;D~!;ʏ<5kV`Ɨ>]3sfK?yQ~L@pXъ"ѻ'j#QR- q̍߸N,VVsܹe˝:u [}=zGa&Mo,Y5KlZJ|m߾-Gi;Ќ,޴+D 2=<ʉDq7:j܏x+KVΜ9׿b!C|W+`fQ#cS\v$xIZ0XztBf}îi7x"j 'G<;bCid=G?#7cp؋Q8"Hfa4u 2^3םXb}NRwX3XlYڵc3DEoL)DEK|Ύ?H"$R֭"b03 0@ }-03 0@X p:}\`f`gӑ9d 3 03Grx 0 _/t"%+De /eZu…Ë (t5ǎaD*Pu)(ިuW)J.J=n͛W:~|0W\7to-'Nx'hRyY={vPڢER۶m6lNuST8uunLbS\BDԥ`Z؁qRXTTW%1R-XbKO_ކl~k3F‡,-@:#GN/ea S~ɓ'/_<99yƍ|[o7MDJ/, c޼y3n-[|t颖Z}xZ ,]((U}gyFqEx:u\mժU+Wr[nݵk;#GٳCSR͛"ۓO>YF dBTV Yn ΡP)jB K[~qYcKaQS:_KZ ?\wg("G<vlܸqܹ7<}rʺNHTO[ʔ)5kVDžSj"udɬfy.]Tf͚)b0 )YQQʔEO)Ζ-MJ*uyZҡx3hxu5UJ[xbɒ%gQ QWdDž<%%VZNjj*It//phQ"KݐZ%QR)jDEQcEH./}|>Wg(g\BLjW%gG:uc9%_(QNDgѢEO?t;tdaiMr^~˗/ ;o`pۧt"%[Ĉŋ1Ay06z}xlSRriӦթS2諯TGѢEL 9ZlS47kazP#GN<9bv.OT8,uCrhB S)ڊP K[kǎQS:v65@T+[ T\(!e0}Ƹ%c$|jv߃Ν;)g<(9so5x/WXqΜL|WQ#ٗ… ot-HM^_uIWQK]t +<fѯi2!58ıu"%[ &ѳQ ꌭϘ^jժxՍuu(ԧ\zCxٲe1 7cmbT5k 2&HA`Q.ZP۷XRajx`Fo U7$nRRr8DVHP=ؑՍPbl ۲uP6FPP0qc|K… #ޫRH"E*6r&%Fz%b_^^=1q׶A ى|Y>pQKY'BM$tGGEg8,Ƀ \҉%.:TUҎ}>W^ml VX!~97:xE^QRr>Ve0u,JiӦXA屆)OoŗĂ СC1SESuڻ޺ERr,DxDԥ- E_4:_yH#^"kQq !_ ~Lw+ݦ%.xEktd~cnIcFݻwi qRӑ{S{)fPpzqia2J/DQBxYi_PTZώ.>*EnJ'RrкPWJ;c7`DT[m Y/ UJ7wwb*Ǧ5ɝ;^ KZj˱4Kmѕ)/U}1Uan@A3U@J:TԀe(8~e+(DurGR͈W..K06/^5> gcAb+tDܿmWBL;T,ЈLQ$.Io9]xb,fT`cuvرP`Æ ێ;5j r/ZL2E+ADJNӯ\ ?WG'$cƌAMPWPu)(k+SAGW@(ll #j0Ν l"mڴrӻwolC8Rdޔowu~#fG0MQRW7 \uT@J  PK[F *@x+V)Bե_ǯ/uʹ,-hz,|A6jQb6* 'fG8qIGbٳ0"\`Gm2;0?*;2sLhA:PzCCރ@"6FxADJ+e5^TGϜ9AmS.ś)W-rϛ7Oo+X ~֋el9Sf lРڵke- G໎nЗĎ!B>u֕ڕxpXJ]/ )B )SG@aBT+K'5GK\u).x[|},LjurvWi:ɓ'f̘'0y R{G{G+{GMK _LB-\ N1G>멨%zܹs ܹ3Ǵg}jR5~i}*VPxݹEMo,Fg;Wi/C_:+\}=zbCIo`}7Ph9ogD<,|r=0~O[Li0Ndɒ"Endǘef`f z tr?>&!Tn0-;v[HZj?13 0@0@#OKFwRr03 0@2HD%חrFcf`rHB`f`f t$禙f`f p?`f` fZ<>'uxͨHG]3ȢKYT;vl߾}=yf܄ZZɓ'/_<99yƍx!2^҉\o1"\MG5(&(~T5t{SNHVZrJQ6;[OIDATժUCVASTh\'yܢ&v*(jsT: E&&4:EqF@ur ;Su3:T|фqpɦ)  Z| R)`yӦMS2Z)7@&n]ƍ:]HW6=T`^W1SLG}tȑN:y#ycRqڢc 69҈|czjNB)mRh`a02]|@uH=OHT|= PDRK6JC6#!gGy}րʈ/zYd)V؋/+L4tҙ3gP (U#7o/rv0#2jT:s8=}ZIJYb͘1c0//%L8NXQ;=)%w6lvѨQ#&xLy4ϕupX*is 7_`lmڴAY޽ B4,s碏mٲEu]!/fG0MI~z-xX(*|W*.PRAWcc: E& E9kM[\뉣vQT|NFP+:aXW땿tw^/`.{'6 ǘDSЇZ>xNjgΜYredXګW/,e+*$X\=\V˙ a7oś_,]6=ȜKFWUTWQ݃< n?I[v#®,Sn])-xc j ҡG E>Rcd ɴE)3~-~.J_O.kK)c|esj<<\pD|z\ґ'OYk׮XpWnJ1g(P#X}޼EӑQF{G߇?x&@>;.v,fxS91Nr|S-xL̙ Ox8)~_ʴj+2B[n曓/={{޽{݂GZ.]0aBɒ,Yo~~iZ4q<×Vff`aiz)={On"qqRf`f #ž03 0̀@#&B|)\`f`2Qf`fH8IX3Rf`f Jt$Jn13 0xDiIӧ8X /ef`ڵk\ʊD/cI|0l2cēOԱ x{.W  gܫlל9s8ia 3 03Q D}3n`f #3thOMVb CbWf`dӑ+bf`bNGb(Xp ȟ??މ8p@t… ի#(P ))ȑ#aL- eG`1qVZŇ `+hqjѢŁWT]J5F/0^='O^|yrrƍ;o߾Gݼys޼y[l)u0G )\o%3€㘊8ul:.>=gϞڳgOJ7o.R<\7x.'tT i'du1 zK.8Yse&tV2eDP⍠٨5x64q8+ `ϯ&U`QT0yJB͎NvB1y[8UJ\x1Fth֬Y˕+/_|Y)"2ŀ㘊8ulr5"r_>Ӹql.I 8`Ã>X\YhH0bPC.)&M|Ge]w]ʕg̘MJNrf3>m}$aNzg;t`.R].ud t~*Z]RRk`TU"#G18߹E$(y5ݻ7WF*Tӏcƌi߾})B%ݻw@Ŋ'TF?uֳgϮZQ!SL(lRrA2@HpƩ߶B:@y?`.I7|~]x)yځ0?{&p:r 7ŋ!b" $7ʜ .`M{G?oRՙ~ý"#{AVt K%r:vC+z,X'ߴ`5zlHxp:a5b /_Ɣ~2AoҌtm7֭[_@y„ݻPu„ Xq*j}x?عsgX3 03 {/f$uXv<ر<4g&vOiӦ_;v%3 03C @/O`_ is the selection of some traces of interest within a file to make some calculations on them (average, peaks, amplitudes, etc.). The batch-analysis of `Stimfit `_ does precisely that. However, in some cases we can enhance its possibilities writing our custom functions in Python for the selected traces. In `Stimfit `_, the indices of selected traces can be easily retrieved using :func:`stf.get_selected_indices()`. This function returns a tuple with the selected indices. :: >>> stf.get_selected_indices() >>> (1,2,3) # traces 2,3 and 4 were selected In this case, we selected the 2nd, 3rd and 4th trace in the file (note the zero-based index!). The routine described below performs a simple algorithm only on the traces selected previously (either with the menu bar or with typing **S**). I've chosen a very simple calculation (amplitude of the signal) for didactic purposes, but a more complex function can be writen. ===================== Using selected traces ===================== In the following function we calculate the amplitude of the signal of the selected traces. One of the arguments of the function (*trace=None*) will select the trace that we want to use to make the calculation. Note that this is an optional argument; by default it will accept the current trace (or sweep) of the file, but if not, you can enter the zero-based index of the traces in the channel. The amplitude function will be calculated based on the traces selected by *trace*. Here is the function: :: # stimfit python module import stf def get_amplitude(base, peak, delta, trace=None): """ Calculates the amplitude deviation (peak-base) in units of the Y-axis Arguments: base -- Starting point (in ms) of the baseline cursor. peak -- Starting point (in ms) of the peak cursor. delta -- Time interval to calculate baseline/find the peak. trace -- Zero-based index of the trace to be processed, if None then current trace is computed. Returns: A float with the variation of the amplitude. False if Example: get_amplitude(980,1005,10,i) returns the variation of the Y unit of the trace i between peak value (10050+10) msec and baseline (980+10) msec """ # sets the current trace or the one given in trace if trace is None: sweep = stf.get_trace_index() else: if typ(trace) != int: print "trace argument admits only intergers" return False sweep = trace # set base cursors: if not(stf.set_base_start(base,True)): return False # out-of range if not(stf.set_base_end(base+delta,True)): return False # set peak cursors: if not(stf.set_peak_start(peak,True)): return False # out-of range if not(stf.set_peak_end(peak+delta,True)): return False # update measurements stf.set_trace(sweep) amplitude = stf.get_peak()-stf.get_base() return amplitude ============== Code commented ============== *None* is a Python built-in constant. It is used in to represent the absence of a value. Therefore, in our example, when the argument *trace* is empty (its value is *None*) we will select the current trace with :func:`stf.get_trace_index()` and store it in the variable **sweep**. If not, the variable **sweep** will take the value taken by *trace*. This iscontroled by the following if-block within the function: :: if trace is None: sweep = stf.get_trace_index() else: if type(trace) !=int: print "trace argument admits only integers" return False sweep = trace An additional if block inside the else instruction allows us to control that trace will be an integer. .. >>> if type(trace) !=int: If the argument traces is not an integer, the function will be cancell and returns False. Note that after setting the stf cursors, we update the measurements in the trace whose index is given by the local variable **sweep** with :func:`stf.set_trace()`. ===== Usage ===== The function accepts an optional *trace* argument. That means, that we do not need to declare it when using the function. In that case, the function will work on the current trace. For example, if we want to calculate the amplitude between a baseline between (500+10) msec and a peak between 750 and 760 msec on the current trace, we enter: :: >>> spells.get_amplitude(500,750,10) To calculate the same amplitude in the trace number 10 (zero-based index is 9) we can type: :: >>> spells.get_amplitude(500,750,10,9) More interesting is to get the amplitude in the selected traces, we can pass the tuple of selected traces to the *trace* argument and thereby calculate the amplitude on our selected traces: :: >>> amplitudes_list = [spells.get_amplitude(500,750,10,i) for i in stf.get_selected_indices()] In this way the tuple of selected indices is passed by the for loop to the function. Next, everything is wrapped in a Python list called amplitudes_list. For further analysis in spreadsheet programs (Calc, Gnumeric, Excel or similar), the values can be printed into a table that allows to copy and paste the contents. :func:`stf.show_table` takes a dictionary as its first argument. The dictionary has to be composed of strings as keys and numbers as values. You could use it as follows: :: >>> mytable = dict() >>> for i in stf.get_selected_indices(): mytable["Trace %.3d" % i] = amplitudes_list[i] >>> stf.show_table(mytable) Note that the dictionary will be sorted alphabetically according to its keys. Therefore, using "%.3d" is used to keep the table in the same order as the traces. If you wanted to print out more than one value for each trace, you could use :func:`stf.show_table_dictlist` that uses a similar syntax, but requires a list of numbers as the values of the dictionary. stimfit-0.17.1/doc/sphinx/howto/apcounting.rst000066400000000000000000000203071517235503400214050ustar00rootroot00000000000000************** Event counting ************** :Authors: Jose Guzman :Updated: |today| Counting the number of events (for example action potentials) within a time window is a very common task in electrophysiology. In its simplest form, the user would like to know how many spikes occur following the onset of a stimulus (i.e current injection). We can write a simple Python function which automatically performs this calculation with a simple event detection routine. .. note:: `Stimfit `_ has built-in functions to count the number of events (i.e action potentials). From the menu, select Analysis -> event detection-> threshold crossing... or alternatively with the Analysis-> Batch analysis->threshold crossing. However, this Python script allows for more flexibility while counting events, such as detecting positive- or negative-going events. ========================== The counter event function ========================== The following function counts the number of events (e.g action potentials) by detecting upward (up=True) or downward (up=False) threshold-crossings. :: # load main Stimfit module import stf def count_events(start, delta, threshold=0, up=True, trace=None, mark=True): """ Counts the number of events (e.g action potentials (AP)) in the current trace. Arguments: start -- starting time (in ms) to look for events. delta -- time interval (in ms) to look for events. threshold -- (optional) detection threshold (default = 0). up -- (optional) True (default) will look for upward events, False downwards. trace -- (optional) zero-based index of the trace in the current channel, if None, the current trace is selected. mark -- (optional) if True (default), set a mark at the point of threshold crossing Returns: An integer with the number of events. Examples: count_events(500,1000) returns the number of events found between t=500 ms and t=1500 ms above 0 in the current trace and shows a stf marker. count_events(500,1000,0,False,-10,i) returns the number of events found below -10 in the trace i and shows the corresponding stf markers. """ # sets the current trace or the one given in trace. if trace is None: sweep = stf.get_trace_index() else: if type(trace) !=int: print "trace argument admits only integers" return False sweep = trace # set the trace described in sweep stf.set_trace(sweep) # transform time into sampling points dt = stf.get_sampling_interval() pstart = int( round(start/dt) ) pdelta = int( round(delta/dt) ) # select the section of interest within the trace selection = stf.get_trace()[pstart:(pstart+pdelta)] # algorithm to detect events EventCounter,i = 0,0 # set counter and index to zero # choose comparator according to direction: if up: comp = lambda a, b: a > b else: comp = lambda a, b: a < b # run the loop while i`_ unless you are very familiar with while loops in Python or in any other language. While loops, if written incorrectly, may run infinite iterations and block the Python terminal of `Stimfit `_. For that reason, it is a good idea to explore while loops in an independent python terminal before using them in `Stimfit `_. ===== Usage ===== As in :doc:`/howto/amplitudes` we can use the function in different ways: :: >>> spells.count_events(start=500,delta=1000) will return the number of events above 0 mV in the current trace/channel between t=500 ms and t=1500 ms, and shows a blue stf marker :: >>> spells.count_events(start=500,delta=1000,threshold=-40,up=False,trace=10,mark=False) this will look for events below the value -40 but not in the current trace, only in the trace 11 (zero-based index is 10) in the downwards direction. Here a blue marker around the point found bellow the threshold will be shown too. Note that functions with a large number of arguments are difficult to remember. You can always change the order of the arguments if you describe the arguments in the function. For example, the following sentence has the same effect as the one above, but shows a different argument order: :: >>> spells.count_events(threshold=-40,start=500,up=False,delta=1000,mark=False,trace=10) If you want to create a list of events with the events found in a selection of traces, you can type: :: >>> spikes_list= [spells.count_events(500,1000,0,True,i,False) for i in stf.get_selected_indices()] this will create a Python list with the number of events (e.g spikes) found between t=500ms and t=1500ms above 0 in the selected traces and no marker will be shown. In the same way as described previously in , you can create a table to copy the results. :: >>> mytable = dict() >>> for i in stf.get_selected_indices(): mytable["Trace %.3d" %i] = spikes_list[i] >>> stf.show_table(mytable) this creates a table with 2 columns with the trace number a number of spikes found previously. Obviously, the function could be extended to return the time points of threshold crossings so that the interspike intervals can be calculated. This is left as an exercise to the reader. .. note:: Use the :func:`stf.erase_markers()` to clean the blue markers on the main stf window. If not, every time that you call the routine in the given trace, a series of blue markers showing the crossing points of the different threshold will overlap with each other. Alternatively, you can add :func:`stf.erase_markers()` in the beginning of count_events() to delete any marker presented previously: stimfit-0.17.1/doc/sphinx/howto/ascii.rst000066400000000000000000000121371517235503400203300ustar00rootroot00000000000000************************* Loading custom text files ************************* :Authors: Jose Guzman :Updated: |today| Very often we want to analyze data in `Stimfit `_ that is generated from a simulation or stored in non-stardard formats, like for example fluorescence. While `Stimfit `_ supports a huge variety of file formats, data from more exotic sources can be copied to a text file loaded in with a very simple Python script. Examples of such cases are NEURON files, which are saved as text files as \*.dat format. Alternatively, users configure custom files formats to, for example, analyze the timecourse of a fluorescent measurement with `Stimfit `_. ========================= Reading NEURON text files ========================= NEURON allows to save a simulation in a very simple text file format. The file consists of a header with two lines containing the event that was recorded and the number of samples. After that, it is followed by the recording time and the sampled data data in a two-column format. To load such a file, we would like to skip the first two rows, and to load the adquisition time. :: import stf def loadnrn(file): """ Loads a NEURON datafile and opens a new Stimfit window with a trace with the default units (e.g ms and mV) file -- (string) file to read """ time, trace = np.loadtxt(fname = file, skiprows = 2, unpack= True ) dt = time[1] # the second temporal sampling point is the sampling stf.new_window( trace ) stf.set_sampling_interval( dt ) You can download an example of such a file `here `_ Note that the argument of the function *loadnrn* is a string containing the exact path and filename of the file that we want to load. For very lengthy paths, it can be convenient to write a small gadget that cares about the proper identification of the file. This is what we propose in the section below. ========================================== Custom ascii files containing fluorescence ========================================== When creating custom text files to be loaded later, it is generally convenient to take into account the folowing advices: 1. Use a custom extension ( generally dat, .text or similar denote files associated with specific applications). 2. Add comments that contains the experimental conditions. 3. Information about the author and date of file modification can be included in the header inside these comments. In the example below, a function will load a file with extension \*.GoR that contains fluorescent measurements in time (acquired at 400 Hz). In addition, a small wx gadget will allow us to create a small window to select the file that we want to import. :: import stf def loadtxt( freq=400 ): """ Loads and ASCII file with extension *.GoR. This file contains ratiometric fluorescent measurementes (i.e Green over Red fluorescence) saved in one column. This function opens a new Stimfit window and sets the x-units to ms and y-units "Delta G over R". Arguments: freq -- (float) the sampling rate (in Hz) for the acquistion. the default value is 400 Hz. """ # wx Widgets to create a file selection window fname = wx.FileSelector("Import Ca transients" , default_extension = "Ratiometric" , default_path = "." , wildcard = "Ratiometric fluorescence (*.GoR)|*.GoR" , flags = wx.OPEN | wx.FILE_MUST_EXIST) stf.new_window( np.loadtxt( fname ) ) stf.set_xunits('ms') stf.set_yunits('Delta G/R') stf.set_sampling_interval(1.0/freq*1000) # acquision in ms You can download an example file containing fluorescence `here `_. ============== Code commented ============== In both script cases, most of the work is done with *loadtxt* from the *NumPy* package. The first argument that we provide is a string with the name of the file to be loaded. Note that the argument options of *loadtxt* permits a lot of flexibility when loading ASCII files (for example, skiprows = 2 will skip the first two lines). Check the `NumPy documentation `_ of this function for further details. To make the experience more interactive, we can load the string of the file with a the GUI that is provided by the wxPython package. This is what we do when we called the wx.FileSelector object in the second example. wxPython is loaded at the beginnig of Stimfit as 'wx' and runs already under the Stimfit application. Remember to create a wxPython application if you want to use wx.FileSelector outside Stimfit. ===== Usage ===== To see how both function work import the spells module in the Python console of Stimfit and try the example files. For example: :: import spells # to load the file in a give location spells.loadnrn( "/home/myuser/myDownloads/EPSP.dat" ) # to select a file containing fluorescence with a selection menue spells.loadtxt() stimfit-0.17.1/doc/sphinx/howto/cuttingtraces.rst000066400000000000000000000131671517235503400221230ustar00rootroot00000000000000************** Cutting traces ************** :Authors: Jose Guzman :Updated: |today| As described in :doc:`/manual/python` chapter of the :doc:`/manual/index`, a very often requested feature of `Stimfit `_ is to cut an original trace to show it in a presentation or publication. This feature, however, has been only integrated into the stf module, and not in the `Stimfit `_ main menubar. With this, `Stimfit `_ preserves its user interface as clear and user-friendly as possible. We can use the built-in stf function :func:`stf.new_window()` to show a new stf window with the current trace within an interval. For example, :: >>> stf.new_window(stf.get_trace()[1600:3200]) presents a new window with the current trace between the sampling points 1600 and 3200. Remember that :func:`stf.new_window()` takes a 1D-NumPy array as argument. To cut the trace within the desired limits, we have to slice it before with :: >>> stf.get_trace()[1600:3200] Note that the index :math:`i` of a sampling point and the corresponding time :math:`t`, measured from the start of the trace, are related as follows: .. math:: {\displaystyle i=\frac{t}{\Delta t}} where the sampling interval :math:`\Delta t` can be obtained with the following function: :: >>> dt = stf.get_sampling_interval() Then, if our sampling interval (dt) is 0.05 ms, the points selected correspond to 80 and 160 ms respectively. Alternatively, one could have thought about this command: :: >>> stf.get_trace()[80/dt:160/dt] However this will not work. Slicing requires integers as argument and not floats (both 80/dt and 160/dt are floats). So we have to transform this ratios to integers with int(80/dt) and int(160/dt). Besides that, the float precision of python will play against us here. If we make dt = stf.get_sampling_interval and get a value dt = 0.05000000074505806 (rather than 0.05) then the corresponding values for 80/dt will be 1599.99. The function int() will take only the value without decimal and will take erroneously 1599 in stead of 1600. We have to use the python function **round(float,ndigits)** to round up this value. :: >>> pstart = int( round(80/dt) ) # now round(80/dt) = 1600.0 instead of 1599.99 >>> pend = int( round(160/dt) ) # now round(160/dt) = 3200.0 instead of 3199.99 >>> stf.get_trace()[pstart:pend] # now the slicing withing the integer values .. note:: You can round up dt with **round(dt,ndigits)** or the ratio 80/dt with **round(80/dt,ndigits)** (with *ndigits=2* for example). In any case, do it always before int() takes the integer part of the real number. ============================ The cutting traces function ============================ In the chapter devoted to Python (:doc:`/manual/python`) in :doc:`/manual/index` you can find a function to cut a given trace within the sampling points. This function is slightly different. As described above, we would take times and not sampling points as argument. After that, we will take list of traces and not a single trace to cut. This function will use :func:`stf.new_window_list()` which takes a list of 1D-Numpy arrays to present a new stf window. :: # load main Stimfit module import stf def cut_sweeps(start, delta, sequence=None): """ Cuts a sequence of traces and present them in a new window. Arguments: start -- starting point (in ms) to cut. delta -- time interval (in ms) to cut sequence -- list of indices to be cut. If None, every trace in the channel will be cut. Returns: A new window with the traced cut. Examples: cut_sweeps(200,300) cut the traces between t=200 ms and t=500 ms within the whole channel. cut_sweeps(200,300,range(30,60)) the same as above, but only between traces 30 and 60. cut_sweeps(200,300,stf.get_selected_indices()) cut between 200 ms and 500 ms only in the selected traces. """ # select every trace in the channel if not selection is given in sequence if sequence is None: sequence = range(stf.get_size_channel()) # transform time into sampling points dt = stf.get_sampling_interval() pstart = int( round(start/dt) ) pdelta = int( round(delta/dt) ) # creates a destination python list dlist = [ stf.get_trace(i)[pstart:(pstart+pdelta)] for i in sequence ] return stf.new_window_list(dlist) ============== Code commented ============== We provide some flexibility with the argument *sequence*. If we do not give any argument to *sequence*, we will select every trace in the channel with the function :func:`stf.get_size_channel()`, which returns the number of traces in the channel. :: if sequence is None: sequence = range(stf.get_size_channel()) Finally we add to the list the 1D-NumPy arrays whose index is described in the sequence. :: dlist = [ stf.get_trace(i)[pstart:(pstart+pdelta)] for i in sequence ] and slice the 1D-NumPy array as described above. ===== Usage ===== In any case, a new stf window with the traces cut will appear :: >>> spells.cut_sweeps(200,300) will create a new window with all the traces of the channel cut between t=200 ms and t=500 ms. :: >>> spells.cut_sweeps(200,300,range(30,60)) will create a new window with the same selection, but only between the traces 30 and 60. :: >>> spells.cut_sweeps(200,300,stf.get_selected_indices()) will create a new window with the cut traces only if they were previously selected. stimfit-0.17.1/doc/sphinx/howto/index.rst000066400000000000000000000041441517235503400203460ustar00rootroot00000000000000.. test documentation master file, created by sphinx-quick start on Tue May 12 19:47:15 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. The Stimfit book of spells ========================== :Author: Jose Guzman :Release: |version| :Date: |today| This document collects answers to some questions like "How do I make ... in `Stimfit `_ with python?". Though much of the material can be easily found in the :doc:`/manual/index`, the examples provided here are a good way for the casual user to start using Python in `Stimfit `_. It assumes a basic knowledge of the embedded Python shell of `Stimfit `_. Some Python knowledge and a substantial proficiency in `Stimfit `_ are recommendable. Please note that this is not a Python manual, but a way to use Python for some basic analysis tasks provided with `Stimfit `_. For a detailed Python manual, we encourage the user to visit the official Python documentation on the [Python-website]_ and to read carefully the :doc:`/manual/index`. The functions described along this document are available in your current `Stimfit `_ version. To make use of them you have to type the following line in the `Stimfit `_ embedded Python shell: :: >>> import spells After that, functions can be called with the dot notation (i.e just typing **spells** before the function) For example, if we want to call the function rmean() we would do it in this way: :: >>> spells.rmean(10) Finally, the contents of this document are organized with increased level of complexity, assuming some of the last chapters concepts and topics described in the first chapters. Thus, we encourage the newcomer to follow the order exposed below or to visit the section **code commented** in previous chapters. Contents: .. toctree:: :maxdepth: 2 resistances runningmean amplitudes cuttingtraces apcounting introclass latencies ascii stimfit-0.17.1/doc/sphinx/howto/introclass.rst000066400000000000000000000300161517235503400214150ustar00rootroot00000000000000**************************************** Object oriented programming with Stimfit **************************************** :Authors: Jose Guzman :Updated: |today| Object-oriented programming (OOP) is a software philosophy where the problems are solved with objects rather than with simple functions. These objects behave similarly to objects in the physical world. For example, image you may want to travel from Freiburg (Germany) to London (UK). For that, you will need to use a transport (e.g car, airplane, etc...) which certain properties (e.g airplanes are much faster than cars, whereas cars are more flexible in terms of schedule). The key concept here is that an object has distinct attributes (associated variables) and methods (associated functions). Interestingly, object attributes are extremely dynamic. They may change as they are involved in different tasks. Because object *have an state* they provide much more versatility to solve problems than static function alone. Thus, in OOP the design of the code is near to the question, and much more far away from the machine and the hardware details. .. note:: moving from the procedural/functional programming paradigm to the object oriented programming paradigm requires some mind re-wiring. In principle, everything what you can do in OOP can be done in functional programming. However, large programs would benefit from the OOP approach as their code is more reusable. Abstraction level is higher, because we will work with concepts rather than with complex software algorithms. There are some key concepts in OOP. * **Class** is the blueprint used to generate objects. It contains the instructions to generate an object. Although a class describes how to create an object, it may not describe the particular properties of an object. * **Object** is the practical application of the class. It combines state (i.e variables) and behavior (i.e functions, algorithms). * **Encapsulation** because objects are exposed to the user, attributes and functions may be easily modified without permission. In order to prevent accidental overwriting, some attributes and methods may be hidden to the user, and this is called encapsulation. * **Inheritance** a common mistake when creating classes is to define a class for every object that we want to use. To avoid extreme redundancy, classes may inherit properties from other classes, providing thereby a way of creating more complex objects without having to re-write all the known instructions of a class inside another class. ==================== Classes and objects ==================== We will start with a basic example to start using objects in the embedded Python shell. We will use an object to collect the sampling interval and trace index in our recording. For that, we will create a class, which defines an object that collects this information at once for us. To create that class we can use this code: :: import stf class Trace(object): """ A class to generate a Trace object with contains attributes of the current trace. """ def __init__(self, owner): """ create instance with dt and trace index and as attributes. Arguments: type -- string containing the name of the user """ self.dt = stf.get_sampling_interval() self.trace = stf.get_trace_index() self.owner = owner We can save this class in a file called test.py and import into our Python session. After importing the file, nothing will happen. This is because we loaded the class (i.e instructions of how to create the object), but not the object itself. Now, we can create an object called **myTrace** with the instructions described in that class as follows: >>> myTrace= test.Trace('root') # test.py contains the class Trace() myTrace is now my particular object. It was created with the instructions given in the class Trace. This is commonly refereed as *myTrace is an instance of the class Trace*. ================= Object attributes ================= Object attributes can be accessed with the dot notation. To test the attributes of "myTrace" we type: >>> myTrace.dt >>> 0.05000000074505806 >>> myTrace.trace >>> 7 >>> myTrace.owner >>> 'root' This tells us that the trace 8 has a sampling rate of 0.05 msec. The owner was set at construction, and it is a user called root. ============= Encapsulation ============= As you can see bellow, nothing would prevent us to assign a new value to any of the current object attributes. For example, if we now type: >>> myTrace.dt = 3 This potentially very dangerous (imagine the consecuences of setting the sampling rate to 3 in further calculations). For that reason, it is a very good programming practice to hide some object attributes to the user. This is called **encapsulation**. To hide the attributes of "myTrace", we have just to insert a single underscore before the attribute in the class. These objects are **private** which means, "look, but do not touch!" .. note:: Python strongly relies on convention rather than on enforcement. For example, encapsulated attributes are not really private (i.e user can overwrite them if necessary), but the underscore notation is used to indicate internal use only. If you find a good reason to overwrite them, Python is not going to stop you. However, it is a good programming practice to keep the Python conventions if you want to share your programs with other users. Additionally, we could give the user the opportunity to retrieve these values without the dot notation by creating some functions available to this object. These would be the object methods. For example, we can create 2 functions called get_sampling_interval() and get_trace_index() inside the class. These are the methods of the object. :: import stf class Trace(object): """ A class to generate a Trace object which contains attributes of the current trace. """ def __init__(self, owner): """ create instance with dt and trace as attributes. Arguments: type -- string containing the name of the user """ # please, note that underscore attributes are private self._dt = stf.get_sampling_interval() self._trace = stf.get_trace_index() self.owner = owner def get_sampling_interval(self): """ get sampling interval """ return self._dt def get_trace_index(self): """ get trace index""" return self._trace Now we can import/reload test.py and create a new object. >>> myTrace2 = test.Trace('user') and test its attributes as follows: >>> myTrace2.get_sampling_interval() >>> 0.05000000074505806 >>> myTrace2.get_trace_index() >>> 7 >>> myTrace.owner >>> 'user' .. note:: do not confuse methods/attributes that start and end with two underscores with those which only start with a single underscores. The firsts are special methods and customize the standard python behavior (like __init__), whereas the lasts are encapsulated methods. ========================= Dynamic nature of objects ========================= As soon as we move through the recording, the trace index may change. However, if we call the methods get_trace_index() or get_sampling_interval() of the object they will return the object attributes in the old status. We need a new method to update the object attributes every time that we change the trace. This is where the dynamic nature of the objects come handy. :: import stf class Trace(object): """ A class to generate a Trace object which contains attributes of the current trace. """ def __init__(self, owner): """ create instance with dt and trace as attributes. Arguments: type -- string containing the name of the user """ self.owner = owner self.update() def update(self): """ update dt and trace according to the current position """ self._trace = stf.get_trace_index() self._dt = stf.get_sampling_interval() def get_sampling_interval(self): """ get sampling interval """ return self._dt def get_trace_index(self): """ get trace index """ return self._trace After reloading this class, and creating "myTrace" we can use the update() method. This collects the current trace index and sampling interval. If we change the trace or even the window, we have to call update() again to retreive the current index and sampling interval. >>> myTrace3 = test.myTrace('user') >>> myTrace3.get_trace_index() >>> 0 >>> stf.set_trace_index(3) >>> myTrace3.get_trace_index() # this returns the old state!!! >>> 0 >>> myTrace3.update() # update attributes >>> myTrace3.get_trace_index() # this returns the updated state!!! >>> 3 ================= Class inheritance ================= Object-oriented languages like Python support class inheritance. This means that we can inherit attributes and methods from a pre-existing class. Thus, we do not need to rewrite again this code. We can inherit from another class (called mother class). To inherit code from another class, we have to add the name of the mother class in the class headline. For example: >>> class Channel(Trace): The class Channel will automatically inherit the code from the class Trace. We say that the class Channel is a subclass of the superclass Trace. If we want to extend the functionality of our now class, we can add new methods and/or attributes, or even overwrite the existing inherited methods. We can create a new Channel class in the same file like this: :: class Channel(Trace): """ A class derived from Trace class """ def __init__(self,owner): Trace.__init__(self.owner) # let Trace to get owner self._channel = stf.get_channel_index() def update(self): """ update dt, trace and channel index """ Trace.update(self) # update dt and trace self._channel = stf.get_channel_index() def get_channel_index(self): """ get channel index """ return self._channel From this example we can see that the class Channel not only inherits, but extends its functionality to the current channel. We have not only functions to calculate the sampling rate (get_sampling_rate() and trace get_trace_index() ) but also a new function called get_channel_index(). A new attribute is also added (self._channel). The update() function that we used to update the sampling interval and the trace in the Trace class, is now extended to include the updated channel number. We can now test it: >>> stf.set_trace(3), stf.set_channel(1) >>> True, True # remember, True if successful >>> myChannel = test.Channel('user') # create a instance of Channel >>> myChannel.get_trace_index() # this methods is inherited from Trace >>> 3 >>> myChannel.get_sampling_interval() # inherited from Trace >>> 0.05000000074505806 >>> myChannel.get_channel_index() # this is only for Channel >>> 1 We can change trace and channel to test the update function >>> stf.set_trace(5), stf.set_channel(0) >>> True, True >>> myChannel.get_trace_index() >>> 5 # this value was updated! >>> myChannel.get_sampling_interval() # inherited from Trace >>> 0.05000000074505806 >>> myChannel.get_channel_index() # this is only for Channel >>> 0 # this is the updated value! Finally, we can check if an object belongs to certain class with the function isinstance(object,class). For example >>> isinstance(myChannel, test.Channel) >>> True >>> isinstance(myChannel, test.Trace) >>> True # This is because Channel inherits from Trace >>> isinstance(myTrace, test.Channel) >>> False or we can use the __class__ method included in every instance to check the type of the object: >>> myChannel.__class__ we can get this class definition as string with: >>> myChannel.__class__.__name__ >>> 'Channel' stimfit-0.17.1/doc/sphinx/howto/latencies.rst000066400000000000000000000407611517235503400212130ustar00rootroot00000000000000********************* Calculating latencies ********************* :Authors: Jose Guzman :Updated: |today| Very often we want to analyze data in `Stimfit `_ that is generated from a simulation or stored in non-stardard formats, like for example fluorescence. While `Stimfit `_ supports a huge variety of file formats, data from more exotic sources can be copied to a text file loaded in with a very simple Python script. Examples of such cases are NEURON files, which are saved as text files as \*.dat format. Alternatively, users configure custom files formats to, for example, analyze the timecourse of a fluorescent measurement with `Stimfit `_. ========================= Reading NEURON text files ========================= NEURON allows to save a simulation in a very simple text file format. The file consists of a header with two lines containing the event that was recorded and the number of samples. After that, it is followed by the recording time and the sampled data data in a two-column format. To load such a file, we would like to skip the first two rows, and to load the adquisition time. :: import stf def loadnrn(file): """ Loads a NEURON datafile and opens a new Stimfit window with a trace with the default units (e.g ms and mV) file -- (string) file to read """ time, trace = np.loadtxt(fname = file, skiprows = 2, unpack= True ) dt = time[1] # the second temporal sampling point is the sampling stf.new_window( trace ) stf.set_sampling_interval( dt ) You can download an example of such a file `here `_ Note that the argument of the function *loadnrn* is a string containing the exact path and filename of the file that we want to load. For very lengthy paths, it can be convenient to write a small gadget that cares about the proper identification of the file. This is what we propose in the section below. ========================================== Custom ascii files containing fluorescence ========================================== When creating custom text files to be loaded later, it is generally convenient to take into account the folowing advices: 1. Use a custom extension ( generally dat, .text or similar denote files associated with specific applications). 2. Add comments that contains the experimental conditions. 3. Information about the author and date of file modification can be included in the header inside these comments. In the example below, a function will load a file with extension \*.GoR that contains fluorescent measurements in time (acquired at 400 Hz). In addition, a small wx gadget will allow us to create a small window to select the file that we want to import. :: import stf `Stimfit `_ was originally used to calculate synaptic latencies (Katz and Miledi, 1965 [#KatzMiledi1965]_) but now can be used to calculate synaptic latencies and latencies between events or action potentials in the same or between different channels (see :doc:`/manual/latency_measurements` in the :doc:`/manual/index`). `Stimfit `_ also provides a very useful collection of Python functions which allow us to easily adapt the latency calculation for our particular conditions. We will use these functions to calculate the latency between two signals in two different channels (e.g. one corresponding to the soma, and another to the dendrite). We will use the object oriented programming paradigm (OOP) to solve this problem and applied it in the embedded Python shell of `Stimfit `_ . =============== The Spike class =============== We will create an object to calculate basic action potential (AP) kinetics in the current/active channel. AP peak and half-width will be calculated from a threshold (in mV/ms) defined by the user, as described in Stuart et al. (1997) [#Stuart1997]_. In principle, this can be easily adjusted in the `Stimfit `_ menu toolbar (see Edit->Cursor settings and select Peak tab). However, as the number of traces to analyze increase, the manipulation of the menu becomes unnecessarily repetitive and prone to errors. We will use the object to access different AP parameters (i.e baseline, peak, half-width and maximum rise-time) all them calculated from the threshold value. Note these values are accessible in `Stimfit `_ result table (see Fig. 9 in the :doc:`/manual/index`), but we will access them within Python. .. note:: Once the threshold is set, it can be accessed in terms of time with :func:`stf.get_threshold_time()`) or voltage with :func:`stf.get_threshold_value()`. Additionally, some other methods will be necessary to calculate the AP latencies. For example, we may want to calculate **onset latency** (i.e time difference between the beginning of the action potential in two different recordings) or **peak latency** (i.e difference in time between the peak of two APs in different recordings). More interestingly, we can calculate the **half-width latency** according to Schmidt-Hieber et al., (2008) [#Schmidt-Hieber2008]_ . In this last case, the AP latency is calculated by the time different between the times of the AP at its half-maximal amplitudes. :: import stf from math import ceil, floor class Spike(object): """ A collection of methods to calculate AP properties from threshold (see Stuart et al., 1997). Note that all calculations are performed in the active/current channel!!! """ def __init__(self,threshold): """ Create a Spike instance with sampling rate and threshold measurements are performed in the current/active channel!!! Arguments: threshold -- slope threshold to measure AP kinetics """ self._thr = threshold # set all the necessary AP parameters at construction self._updateattributes() def _updateattributes(self): """ update base, peak, t50, max_rise and tamplitude """ self.base = self.get_base() # in Stimfit is baseline self.peak = self.get_peak() # in Stimfit peak (from threshold) self.t50 = self.get_t50() # in Stimfit t50 self.max_rise = self.get_max_rise() # in Stimfit Slope (rise) self.thr = self.get_threshold_value() # in Stimit Threshold # attributes necessary to calculate latencies self.tonset = self.get_threshold_time() self.tpeak = self.get_tamplitude() self.t50_left = self.get_t50left() def update(self): """ update current trace sampling rate, cursors position and measurements (peak, baseline & AP kinetics) according to the threshold value set at construction or when the object is called with a threshold argument. """ # set slope stf.set_slope(self._thr) # on stf v0.93 or above # update sampling rate self._dt = stf.get_sampling_interval() # update cursors and AP kinetics (peak and half-width) stf.measure() def __call__(self, threshold=None ): """ update AP kinetic parameters to a new threshold in the current trace/channel threshold (optional) -- the new threshold value Examples : dend = Spike(40) # set the spike threshold at 40mV/ms dend(20) # now we set the spike threshold at 20mV/ms The AP parameters will be thereby updated in the current trace/channel. This method allow us to use the same object to calculate AP latencies in different traces. """ if threshold is not None: self._thr = threshold # set a new threshold self.update() # update dt and sampling rate self._updateattributes() def get_base(self): """ Get baseline according to cursor position in the given current channel/trace """ self.update() return stf.get_trace(trace = -1 ,channel = -1)[stf.get_base_start():stf.get_base_end()+1].mean() def get_peak(self): """ calculate peak measured from threshold in the current trace, (see Stuart et al (1997) """ stf.set_peak_mean(1) # a single point for the peak value stf.set_peak_direction("up") # peak direction up self.update() peak = stf.get_peak()-stf.get_threshold_value() return peak def get_t50(self): """ calculates the half-width in ms in the current trace""" self.update() # current t50's difference to calculate half-width (t50) return (stf.t50right_index()-stf.t50left_index())*self._dt def get_max_rise(self): """ maximum rate of rise (dV/dt) of AP in the current trace, which depends on the available Na+ conductance, see Mainen et al, 1995, Schmidt-Hieber et al, 2008 """ self.update() pmaxrise = stf.maxrise_index() # in active channel trace = stf.get_trace(trace = -1, channel =-1) # current trace dV = trace[int(ceil(pmaxrise))]-trace[(int(floor(pmaxrise)))] return dV/self._dt def get_tamplitude(self): """ return the time a the peak in the current trace""" #stf.peak_index() does not update cursors!!! self.update() return stf.peak_index()*self._dt def get_t50left(self): """ return the time at the half-width """ self.update() return stf.t50left_index()*self._dt def show_threshold(self): """ return the threshold value (in mV/ms) set at construction or when the object was called""" return self._thr def get_threshold_value(self): """ return the value (in y-units) at the threshold """ self.update() # stf.get_threshold_value does not update return stf.get_threshold_value() def get_threshold_time(self): """ return the value (in x-units) at the threshold """ self.update() return stf.get_threshold_time('True') ============== Code commented ============== Note that all methods but **show_threshold()** are preceded by **self.update()**. This is to update the sampling rate of the current trace (necessary to transform index points into time) and the position of the cursors. In this way, we are sure that every function will return the values according to the current trace and the update position of the cursors. Because we want to group all the AP parameters (i.e baseline, peak, half-width and max rise) of a single trace together, we set the object attributes to the following values; :: def _updateattributes(self): self.base = self.get_base() # in Stimfit is baseline self.peak = self.get_peak() # in Stimfit peak (from threshold) self.t50 = self.get_t50() # in Stimfit t50 self.max_rise = self.get_max_rise() # in Stimfit slope (rise) # attributes necessary to calculate latencies self.tpeak = self.get_threshold_time() self.tamplitude = self.get_tamplitude() These values refer to the trace present in the current Stimfit window when the object was created. This will allow us to store them for future calculations. Note for example, that if we create an object with threshold 40 >>> myspike = Spike(40) and move after that to another trace, we could calculate the difference between the peaks of the previous and present trace as follows: >>> myspike.peak - myspike.get_peak() the former will give the peak value when in the trace where the object was created, and the later will return the peak in the current trace. Additionally, we can decide to change the threshold value of the AP in a trace. For that, we can type: >>> myspike(20) And now the Spike attributes will be updated with the new threshold in the current trace. The function __call__ allows to call the object with a given argument, and we used it to set a different threshold and update the object attributes. ===== Usage ===== To use this class we have to create an object in the current trace with a threshold value as argument. Do not forget to set both baseline and peak cursors before creating the object. >>> soma = spells.Spike(50) Now we can calculate the parameters with the methods available to this object. Note that these values change as we change the trace (i.e, we do not need to type update() or use :func:`stf.measure()`). This means that the method soma.get_base() will return different values if we call it in different traces or move the cursors. Compare the values obtained with the functions with the corresponding values in the result table of `Stimfit `_. >>> soma.get_base() # correspond to baseline in the results table >>> soma.get_peak() # correspond to Peak (from threshold) in the results table >>> soma.get_t50() # correspond to t50 in the results table >>> soma.get_max_rise() # correspond to slope (rise) in the results table >>> soma.get_threshold_value() # correspond to Threshold in the results table Additionally, we have methods like **get_tamplitude()**, **get_threshold()** and **get_threshold_time()** to calculate latencies with different methods. For example, if we have two different Spike objects, one corresponding to the soma and the other corresponding to the dendrite, we could calculate calculate the latencies with the 3 following methods. * 1.- **Onset latency:** this is the latency between the beginning of 2 APs. We can calculate it as follows: >>> soma = spells.Spike(50) # threshold of somatic AP is 50mV/ms >>> stf.set_channel(1) # move to channel 2 >>> dend = spells.Spike(20) # threshold for dendritic AP is 20mV/ms >>> latency = dend.tonset - soma.tonset * 2.- **Peak latency:** this is the latency between the peaks of 2 APs. Similarly to the previous calculate, we can use: >>> latency = dend.tpeak - soma.tpeak * 3.- **T50 latency:** this method is included in the Edit option of the `Stimfit `_ menu toolbar. However, this menu assumes that both thresholds are the same. If we want to set different latencies for the calculation of the t50 latency, we can the Spike property called t50left: >>> latency = dend.t50_left - soma.t50_left You can find the class Spike described above in your current `Stimfit `_ version. To use it, you can import it from the spells module with the following command; >>> from spells import Spike >>> soma = Spike(50) >>> dend = Spike(20) # in a different trace/window Additionally, the spells module contains a function which creates a result table (see Figure bellow) with all the AP kinetic parameters described previously, and the latency calculated with the 3 methods described here. Once the soma and dend objects are created with the class Spike, we can use the latency function: >>> from spells import latency >>> latency(soma,dend) # both soma and dend are Spike objects note that this function assumes that you set the cursors property in your trace, and that the dendritic and somatic AP are already initialized and contains the AP attributes of some trace. .. figure:: APmodule.png :align: center :alt: result table returned by AP.calc() Result table returned by the AP.calc() function. .. note:: In the figure, the cell highlighted represent the latency calculated as the difference between the times at the half-width of the AP (as we did previously), and NOT the difference between the half-widths!!! .. [#KatzMiledi1965] Katz B, Miledi R (1965). The measurement of synaptic delay, and the time course of acetylcholine release at the neuromuscular junction. Proc R Soc Lond B Biol Sci. 161, 483-495 .. [#Stuart1997] Stuart G, Schiller J, Sakmann B (1997). Action potential initiation and propagation in rat neocortical pyramidal neurons. J Physiol. 505, 617-632 .. [#Schmidt-Hieber2008] Schmidt-Hieber C, Jonas P, Bischofberger J (2008). Action potential initiation and propagation in hippocampal mossy fibre axons. J Physiol. 586, 1849-1857. .. [#Mainen1995] Mainen ZF, Joerges J, Huguenard JR, Sejnowski TJ (1995). A model of spike initiation in neocortical pyramidal neurons. Neuron 15, 1427-1439. stimfit-0.17.1/doc/sphinx/howto/resistances.rst000066400000000000000000000134661517235503400215710ustar00rootroot00000000000000********************** Resistance Calculation ********************** :Authors: Jose Guzman :Updated: |today| The resistance can be calculated using Ohm's law. Currents passing through the pipette will be proportional to the applied voltage difference. This proportional factor is the resistance. .. math:: {\displaystyle R=\frac{\Delta V}{I} } In voltage clamp, resistance can be calculated by recording the current once the voltage difference is known. This Python routine should calculate the current difference, and resistance will be calculated given the voltage amplitude. ======================= The resistance function ======================= .. note:: You can find different routines to calculate the resistance in the file **charlie.py**. In current builds, keep helper scripts in a normal Python 3 import location or add their parent directory to ``sys.path`` from the embedded shell rather than relying on old Python 2 site-packages paths. The name **charlie.py** is in acknowledgment to Charlie, for her contribution to the development of the given routines. Note that this function assumes that current is recorded in pA. It sets the stf cursors (peak and baseline) to calculate the current deviation in response to the voltage difference. Finally, the voltage **amplitude** should be entered in mV. :: import numpy as np # stimfit python module: import stf def resistance( base_start, base_end, peak_start, peak_end, amplitude): """Calculates the resistance from a series of voltage clamp traces. Keyword arguments: base_start -- Starting index (zero-based) of the baseline cursors. base_end -- End index (zero-based) of the baseline cursors. peak_start -- Starting index (zero-based) of the peak cursors. peak_end -- End index (zero-based) of the peak cursors. amplitude -- Amplitude of the voltage command. Returns: The resistance. """ if not stf.check_doc(): print "Couldn't find an open file; aborting now." return 0 #A temporary array to calculate the average: set = np.empty( (stf.get_size_channel(), stf.get_size_trace()) ) for n in range( 0, stf.get_size_channel() ): # Add this trace to set: set[n] = stf.get_trace( n ) # calculate average and create a new section from it: stf.new_window( np.average(set,0) ) # set peak cursors: if not stf.set_peak_mean(-1): return 0 # -1 means all points within peak window. if not stf.set_peak_start(peak_start): return 0 if not stf.set_peak_end(peak_end): return 0 # set base cursors: if not stf.set_base_start(base_start): return 0 if not stf.set_base_end(base_end): return 0 # measure everything: stf.measure() # calculate r_seal and return: return amplitude / (stf.get_peak()-stf.get_base()) ============== Code commented ============== The stf functions :func:`stf.set_base_start()` and :func:`stf.set_base_end()` set the corresponding baseline cursors. The functions :func:`stf.set_peak_start()` and :func:`stf.set_peak_end()` set the corresponding peak cursors. These functions returns the Boolean **True** if the cursor was properly set in the desired position, and **False** if the cursors can not be set (for example, they are out of the limits of the trace). This was designed to provide a control of the cursor positioning. It is a good practice to test the correct position of the cursors with the conditional sentence **if**. >>> if not stf.set_base_start(base_start): return 0 * if the stf function returns **False** the if condition will be **True** (not False means True). Our defined function will be finished with return and give the value 0. * In contrary, if the stf function returns **True** the if condition will be **False** (not True means False). In our function, the if condition will not be executed (does not read the return 0) and continue the operations. We can enter directly the x-value (e.g ms) as argument, in stead of using the zero-based index of the sampling points. By adding the argument *is_time==True* to the function we set the cursor in the give time position: >>> if not setf.set_base_start(base_start,True) : return 0 Now base_starts should be given in units of x (i.e ms). This is more intiutive if you are using the stf interface. .. note:: :func:`stf.set_base_start()`, :func:`stf.set_base_end()`, :func:`stf.set_peak_start()` and :func:`stf.set_peak_end()` do not upgrade the measurements. For that reason, we call :func:`stf.measure()` (this is analogous to hit **Enter** in the main window). Thereby the values of :func:`stf.get_peak()` and :func:`stf.get_base()` are updated. ===== Usage ===== Now, you can use this function for different purposes. For example, you may want to test the value of the series resistance in response to a 5 mV hyperpolarizing pulse. First, let's assume that your recording has the current peak between the 10700 and 10999 sampling points. You should set the baseline (for example between 0 and 999) and then peak between 10700 and 10999. After that, and given that 5 mV is the voltage difference, you type: >>> spells.resistance(0,999,10700,1999,-5) Note that **charlie.py** has a routine called **r_in(amplitude=-5)** that does exactly this. In the same way, if you wanted to calculate the value of the seal resistance (assuming this is the smallest resistance in the circuit, so no current will flow through any other resistance), you could test it with a larger voltage pulse. >>> spells.resistance(0,199,1050,1199,50) Again, the file **charlie.py** has a routine called **r_seal(50)** to calculate the seal resistance. Just change the parameters (baseline and peaks) to adapt it for your recordings. stimfit-0.17.1/doc/sphinx/howto/runningmean.rst000066400000000000000000000070301517235503400215550ustar00rootroot00000000000000************ Running mean ************ :Authors: Jose Guzman :Updated: |today| The running mean (or running average) is simple way to smooth the data. Given a certain set of points, a running average will create a new set of data points which will be computed by adding a series of averages of different subsets of the full data set. Given for example a sequence :math:`X` of :math:`n` points, we can create a new set of data points :math:`S` of length :math:`n` by taking the average of a subset of :math:`w` points from the original data set for every point :math:`S_i` within the set: .. math:: {\displaystyle S_i=\frac{1}{w} \sum^{w+i}_{j=i} X_j } ========================= The running mean function ========================= The following Python function calculates the running mean of the current channel. Both trace and channel can be selected as zero-based indices. The width of the running average (refereed to here as binwidth) can be selected. The resulting average will appear in a new `Stimfit `_ window. :: # load main Stimfit module import stf # load NumPy for numerical analysis import numpy as np def rmean(binwidth, trace=-1,channel=-1): """ Calculates a running mean of a single trace Arguments: binwidth -- size of the bin in sampling points (pt). Obviously, it should be smaller than the length of the trace. trace: -- ZERO-BASED index of the trace within the channel. Note that this is one less than what is shown in the drop-down box. The default value of -1 returns the currently displayed trace. channel -- ZERO-BASED index of the channel. This is independent of whether a channel is active or not. The default value of -1 returns the currently active channel. Returns: A smoothed traced in a new stf window. """ # loads the current trace of the channel in a 1D Numpy Array sweep = stf.get_trace(trace,channel) # creates a destination python list to append the data dsweep = np.empty((len(sweep))) # running mean algorithm for i in range(len(sweep)): if (len(sweep)-i) > binwidth: # append to list the running mean of `binwidth` values # np.mean(sweep) calculates the mean of list # sweep[p0:p10] takes the values in the vector between p0 and p10 (zero-based) dsweep[i] = np.mean( sweep[i:(binwidth+i)] ) else: # use all remaining points for the average: dsweep[i] = np.mean( sweep[i:] ) stf.new_window(dsweep) ============== Code commented ============== `Stimfit `_ commonly uses the value -1 to set the current trace/Channel. In this function the default argument values are -1 (see the function arguments *trace=-1* and *channel=-1*). .. >>> sweep = stf.get_trace(trace,channel) :func:`stf.get_trace()` imports the **trace** of the **channel** into a 1D-Numpy array that we called sweep. The default values provided by the function are -1. This means that by default, the current trace/channel will be imported. We create a new stf window with the following .. >>> stf.new_window(dsweep) where dsweep is the 1D-NumPy array obtained after performing the running average. ===== Usage ===== To perform the running average of 10 sampling points of the current trace, type: :: >>> spells.rmean(10) A new window with the running mean will appear. stimfit-0.17.1/doc/sphinx/links/000077500000000000000000000000001517235503400164625ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/links/index.rst000066400000000000000000000030171517235503400203240ustar00rootroot00000000000000.. test documentation master file, created by sphinx-quick start on Tue May 12 19:47:15 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Links ===== :Author: Christoph Schmidt-Hieber :Release: |version| :Date: |today| =============================== Free electrophysiology software =============================== `RELACS `_ Software for data acquisition, analysis, and stimulus generation. Runs under GNU/Linux. `WinLTP `_ Stimulation and data acquisition program for Windows, specialised for LTP/LTD experiments. `NClamp `_ Plugins for IgorPro for data acquisition. Igor is available for Mac and Windows. `Neuromatic `_ Plugins for IgorPro for data analysis. Igor is available for Mac and Windows. `Strathclyde Electrophysiology Software `_ Suite of programs for recording and analysing signals from intracellular electrophysiology experiments. Runs under Windows. ================================ Electrophysiology software sites ================================ `Neuronal Networks Lab, University of Nottingham `_ Quite a number of useful links to electrophysiology software sites. .. toctree:: :maxdepth: 2 stimfit-0.17.1/doc/sphinx/linux_install_guide/000077500000000000000000000000001517235503400214045ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/linux_install_guide/index.rst000066400000000000000000000007061517235503400232500ustar00rootroot00000000000000GNU/Linux Build Guide ===================== :Author: Jose Guzman :Release: |version| :Date: |today| Stimfit on GNU/Linux is now built from source through the CMake-based workflow documented in [`BUILDING.md`](BUILDING.md). The pages in this section focus on Linux-specific package requirements and the standalone [`stfio`](doc/sphinx/stfio/index.rst) module build path. Contents -------- .. toctree:: :maxdepth: 2 moduleonly requirement stimfit-0.17.1/doc/sphinx/linux_install_guide/moduleonly.rst000066400000000000000000000047051517235503400243330ustar00rootroot00000000000000******************************* Building the Python module only ******************************* :Author: Christoph Schmidt-Hieber :Date: |today| The standalone [`stfio`](doc/sphinx/stfio/index.rst) module is built from the same CMake source tree as the full application, but without the GUI target. The old autotools path is no longer supported on current [`master`](README.md:13). On Debian-based systems, install the core build requirements first: :: $ sudo apt-get install build-essential cmake ninja-build git \ python3-dev python3-numpy swig \ libhdf5-dev libfftw3-dev liblapack-dev If you want BioSig-backed import support in [`stfio`](doc/sphinx/stfio/index.rst), also install the distribution package: :: $ sudo apt-get install libbiosig-dev Then clone the repository: :: $ cd $HOME $ git clone https://github.com/neurodroid/stimfit.git That will create a directory called *stimfit*. Configure a dedicated module build directory from the repository root: :: $ cd $HOME/stimfit $ cmake -S . -B build/module -G Ninja \ -DSTF_BUILD_MODULE=ON \ -DSTF_ENABLE_PYTHON=ON \ -DSTF_BUILD_TESTS=OFF \ -DSTF_BUILD_NUMERIC_TESTS=OFF \ -DSTF_WITH_BIOSIG=ON If your system already provides `libbiosig-dev`, the default provider selection is usually sufficient. If you need to force the in-tree BioSig source on a non-packaged platform, you can additionally pass `-DSTF_BIOSIG_PROVIDER=SUBMODULE`. Build the module: :: $ cmake --build build/module To stage an install into a local prefix for inspection: :: $ cmake --install build/module --prefix $HOME/.local =================================================== Building stfio for non-default Python distributions =================================================== To target a non-default Python 3 interpreter, point CMake at the interpreter you want it to use during configuration. For example, with a virtual environment: :: $ cmake -S . -B build/module-venv -G Ninja \ -DSTF_BUILD_MODULE=ON \ -DSTF_ENABLE_PYTHON=ON \ -DPython3_EXECUTABLE=$HOME/venvs/stimfit/bin/python Then build and install into that environment or another target prefix: :: $ cmake --build build/module-venv $ cmake --install build/module-venv --prefix $HOME/.local Finally, run python to test the module, as described in :doc:`/stfio/index`. stimfit-0.17.1/doc/sphinx/linux_install_guide/requirement.rst000066400000000000000000000201661517235503400245030ustar00rootroot00000000000000**************** Building Stimfit **************** :Author: Alois Schlögl, Jose Guzman, Christoph Schmidt-Hieber :Date: |today| This document describes how to install `Stimfit `_ |version| under GNU/Linux. The installation was tested on Debian 10 (Buster) and 11 (Bullseye) with support for Python 3.*. It should work on other Debian-based systems (e.g. Ubuntu) as with newer version of Stimfit as well. I assume that you have the GNU C compiler (gcc) and the GNU C++ compiler (g++) and that both versions match. .. important:: The historical autotools build described in older Stimfit documentation is no longer the supported path for current [`master`](README.md:13). Use the CMake workflow from [`BUILDING.md`](BUILDING.md) or the commands below. ============================ What we need before we start ============================ For the impatient, here are all `Stimfit `_ build dependencies : for Debian13/bookworm (and probably Ubuntu 24.xx) and later :: $ sudo apt-get install \ python3-dev \ python3-numpy \ python3-matplotlib \ libhdf5-dev \ swig \ sip-tools \ python3-wxgtk4.0 \ libwxgtk3.2-dev \ wx-common \ libfftw3-dev \ libbiosig-dev \ liblapack-dev \ chrpath \ git \ automake \ autoconf \ libtool \ libgtest-dev for Debian11/bullseye (and probably Ubuntu 20.x) it was :: $ sudo apt-get install \ python3-dev \ python3-numpy \ python3-matplotlib \ libhdf5-serial-dev \ swig \ python3-sip-dev \ python3-wxgtk4.0 \ libwxgtk3.0-gtk3-dev \ wx-common \ libfftw3-dev \ libbiosig-dev \ liblapack-dev \ chrpath \ git \ automake \ autoconf \ libtool \ libgtest-dev This will get you, amongst others: * [wxWidgets]_: C++ graphical user interface toolkit (version >= 2.8; tested with 3.2.8, 3.3.1) * [wxPython]_: GUI toolkit for the Python language. * [boost]_: C++ library that is mainly used for its shared pointers (only needed when -std=c++17 is not supported) * [Biosig]_: A library for reading a large number biomedical signal data formats. * [Lapack]_: A linear algebra library. * [fftw]_: Library for computing Fourier transformations. * [NumPy]_: To handle numerical computations with Python (tested with version >=1.19). * [HDF5]_: Hierarchical Data Format 5 (HDF5) to manage large amount of data. * [Matplotlib]_: Plotting library for Python (use version >= 1.5.1) In addition, install Sphinx and Doxygen if you want to build the documentation. ======================= Optional: PyEMF ======================= [PyEMF]_ is needed to export figures to the windows meta file format (WMF/EMF). EMF is a vector graphics format and can be imported in different Office software including LibreOffice. To install it, do: :: $ wget http://sourceforge.net/projects/pyemf/files/pyemf/2.0.0/pyemf-2.0.0.tar.gz/download -O pyemf-2.0.0.tar.gz $ tar xvf pyemf-2.0.0.tar.gz && cd pyemf-2.0.0 $ sudo python setup.py install ================================ Download the Stimfit source code ================================ You can download the latest development code for `Stimfit `_ from the `Github code repository `_. For that, type from your current $HOME directory: :: $ git clone https://github.com/neurodroid/stimfit.git This will grab all the required files into $HOME/stimfit. If you'd like to update at a later point, do: :: $ cd $HOME/stimfit $ git pull ============= Build Stimfit ============= Go to the stimfit directory (in our example $HOME/stimfit) and configure a dedicated CMake build directory: :: $ cd $HOME/stimfit $ cmake -S . -B build/linux -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSTF_ENABLE_PYTHON=ON \ -DSTF_WITH_BIOSIG=ON $ cmake --build build/linux --parallel $ sudo cmake --install build/linux .. note:: If you want to install Stimfit as a local user into `~/.local` or target a specific Python interpreter, add the relevant CMake cache entries during configure, for example: :: $ cmake -S . -B build/linux-local -G Ninja \ -DCMAKE_INSTALL_PREFIX=$HOME/.local \ -DPython3_EXECUTABLE=$HOME/.local/bin/python3 Then run `cmake --build` and `cmake --install` as your normal user. .. _BioSigBuild: ========================================== Building Stimfit with BioSig import filter ========================================== We recommend to build `Stimfit `_ with the `BioSig library `_ to import files in from different biomedical disciplines. It is necessary to read files acquired with `HEKA amplifiers `_ or with `Signal `_ from CED. To do it, follow this instructions: Install libbiosig-dev through the package manager of your distribution: :: sudo apt-get install libbiosig-dev Alternatively, use the in-tree BioSig provider managed by the current CMake toolchain. This is the preferred fallback when your distribution package is too old or unavailable: :: $ cd $HOME/stimfit $ cmake -S . -B build/linux-biosig-submodule -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSTF_WITH_BIOSIG=ON \ -DSTF_BIOSIG_PROVIDER=SUBMODULE $ cmake --build build/linux-biosig-submodule --parallel Alternatively, if you are maintaining BioSig itself and need a separate local checkout from its git repository: :: sudo apt-get install libsuitesparse-dev libz-dev gawk libdcmtk-dev git clone https://git.code.sf.net/p/biosig/code biosig-code cd biosig-code Then build that checkout using the current BioSig project's own documented build instructions, install it into your desired prefix, and point Stimfit's CMake configure step at that installation through the appropriate provider settings. After that you can configure Stimfit with `-DSTF_WITH_BIOSIG=ON` and, when needed, select the desired provider through `-DSTF_BIOSIG_PROVIDER=...`. ====================== Building documentation ====================== The manual of `Stimfit `_ is published at https://neurodroid.github.io/stimfit/. For a local build, install Sphinx and related helpers in a Python 3 environment: :: python3 -m pip install -r doc/sphinx/requirements.txt sphinx To build a local copy call: :: sphinx-build -b html doc/sphinx doc/sphinx/.build/html The HTML documentation will be written to `doc/sphinx/.build/html/index.html`. Additionally, the source code can be documented with [Doxygen]_. Install Doxygen and Graphviz first: :: sudo apt-get install doxygen graphviz Enter a directory called **doc** inside Stimfit (e.g $HOME/stimfit/doc) and type: :: cd $HOME/stimfit/doc doxygen Doxyfile.in The local documentation of the source code will be in `$HOME/stimfit/doc/doxygen/html`. .. [wxWidgets] http://www.wxwidgets.org .. [wxPython] http://www.wxpython.org .. [Biosig] http://biosig.sourceforge.net .. [boost] http://www.boost.org .. [Lapack] http://www.netlib.org/lapack/ .. [HDF5] http://www.hdfgroup.org/HDF5/ .. [NumPy] http://www.numpy.org .. [PyEMF] http://pyemf.sourceforge.net .. [fftw] http://www.fftw.org .. [Doxygen] http://www.doxygen.org .. [Matplotlib] https://matplotlib.org stimfit-0.17.1/doc/sphinx/manual/000077500000000000000000000000001517235503400166175ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/manual/bibliography.rst000066400000000000000000000015751517235503400220340ustar00rootroot00000000000000************ Bibliography ************ .. [#Bartos2001] Bartos M, Vida I, Frotscher M, Geiger JRP, Jonas P (2001) Rapid signaling at inhibitory synapses in a dentate gyrus interneuron network. J Neurosci 21:2687–2698. .. [#ClemensBekkers1997] Clemens JD, Bekkers JM. (1997) Detection of spontaneous synaptic events with an optimally scaled template. Biophys J 73:220–229. .. [#Jonas1993] Jonas P, Major G, Sakman B. (1993) Quantal components of unitary EPSCs at the mossy fibre synapse on CA3 pyramidal cells of rat hippocampus. J Physiol. 472, 615-663. .. [#Jack1983] Jack JB, Noble D, Tsien RW (1983) Electric current flow in excitable cells. Oxford University Press, Oxford, UK. .. [#KatzMiledi1965] Katz B, Miledi R. (1965) The measurement of synaptic delay, and the time course of acetylcholine release at the neuromuscular junction. Proc R Soc Lond B Biol Sci. 161:483-495. stimfit-0.17.1/doc/sphinx/manual/event_extraction.rst000066400000000000000000000245571517235503400227470ustar00rootroot00000000000000************************************* Event extraction by template matching ************************************* :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| Introduction ============================= To isolate individual events such as EPSCs or EPSPs from recorded data, `Stimfit `_ uses a template matching algorithm as described by Jonas et al. (1993) [#Jonas1993]_, with some implementation details adopted from Clemens and Bekkers (1997) [#ClemensBekkers1997]_. The template consists of a waveform :math:`p(t)` with a length of :math:`n` sampling points that represents the time course of a typical event. The template is slid over the trace of recorded values :math:`r(t)`, and at each sampling point with index :math:`s`, it is multiplied by a scaling factor :math:`m` and an offset :math:`c` is added or subtracted so that the sum of squared errors :math:`\chi^2(t_s)` between the trace and the template is minimized: .. math:: {\displaystyle \chi^2(t_s)= \sum_{k=0}^{n-1}\left[r(t_{s+k})-\left(m{\cdot}p(t_k)+c\right)\right]^2} As can be seen from this equation, this amounts to the fairly simple operation of fitting a straight line that relates :math:`p(t)` and :math:`r(t)` at every sampling point. Finally, some detection criterion has to be applied to decide whether an event has occurred at a sampling point. Two options are available in `Stimfit `_: Jonas et al. (1993) [#Jonas1993]_ suggest to use the linear correlation coefficient between the optimally scaled template and the data, whereas Clements and Bekkers (1997) [#ClemensBekkers1997]_ compare the scaling factor with the noise standard deviation. A practical guide to event detection ==================================== In practice, the following steps need to be performed to extract events with `Stimfit `_: 1. Create a preliminary template by fitting a function to a single, large and isolated event. 2. Use this preliminary template to extract some more exemplary large and isolated events using a high detection threshold. 3. Create a final template by fitting a function to the average of the exemplary events. 4. Extract all events with the final template using a low detection criterion threshold. 5. Eliminate false-positive, add false-negative events. This procedure will be explained in some more detail in the following sections. Create a preliminary template ----------------------------- In general, the template waveform :math:`p(t)` can be of arbitrary shape. A typical way of creating such a template is to fit a function with a time course matching the event kinetics to some exemplary events. For example, EPSCs can typically be modeled with the sum or the product of two exponential functions [#f1]_. In practice, a robust estimate for a template can be obtained using an iterative approach, which will be illustrated here using a recording of miniature EPSCs that you can download `here `_. .. figure:: images/bait_template.png :align: center **Fig. 21:** Creation of a "bait" template. First, we fit a function to a single large an isolated event to create a preliminary "bait" template. In this case, we will use the EPSC that can be found roughly between t = 20990 ms and t = 21050 ms. Then, we fit the sum of two exponential functions with a delay to this EPSC. To obtain the same template as in the example, you can call the function ``preliminary`` from the ``minidemo`` module that comes bundled with `Stimfit `_ :: >>> import minidemo >>> minidemo.preliminary() This will take care of the appropriate cursor positions and the biexponential fit. If you prefer, you can use the fit settings dialog, as described in chapter 1 (Fig. 16). Extract exemplary events ------------------------ We now use the bait example to fish some more large and isolate events. Choose "Analysis"->"Event detection"->"Template matching..." from the menu. .. figure:: images/eventdetectionsettings.png :align: center **Fig. 22:** Event detection settings. In the dialog that will pop up (Fig. 22), you can set the threshold for the detection criterion. Since we want to extract some large and isolated events during this first pass, we set this to a high number, say 10, using the template scaling factor (Clemens and Bekkers, 1997). Click "OK" to start the event detection. When finished, press **F** to fit the whole trace to the window. The detected events will be marked by blue arrows in the upper part of the window, and blue circles will indicate the peak values of the detected events (Fig 23). .. figure:: images/events.png :align: center **Fig. 23:** Detected events. To view the isolated events in a new window, you have to switch to the event editing mode, either by pressing **E** or by activating the corresponding button in the toolbar (Fig. 24). When you now click on the trace with the right mouse button, a menu will show up. Select "Extract selected events" from this menu. this will put the exemplary EPSCs into a new window. .. figure:: images/eventbutton.png :align: center **Fig. 24:** Switching to event editing mode. Create the final template ------------------------- We now create the average of all extracted events, as explained in chapter 1. Then, we fit a biexponential function to the average, as explained above for the single EPSC. Remember to set the baseline, peak and fit window cursors appropriately before performing the fit, and to update all calculations. Again, you can make use of a function from the ``minidemo`` module to set the cursors and perform the fit: :: >>> import minidemo # if you have not imported it already >>> minidemo.final() The final template should look similar as shown in Fig. 25 .. figure:: images/finaltemplate.png :align: center **Fig. 25:** Creating a final template. Extract all events ------------------ Go back to the original file (minis.dat). Extracting all events with the final template is done in nearly the same way as described above for the preliminary template. However, you have to choose the correct template in the event dialog: The final template in this case is the second on the list (Fig. 26). For this final run, we will lower the detection threshold to a value of 3, as suggested by Clements and Bekkers (1997). .. figure:: images/selectfinaltemplate.png :align: center **Fig. 26:** Selecting the final template. Edit detected events -------------------- Usually, the detected events have to be screened visually to remove false-positives and add false-negatives. Removing false-positives is done by unselected the checkbox next to the arrow indicating an event (Fig. 23). To add false-negatives, you have to switch to the event-editing mode (Fig. 24) and then right-click on the trace at the at the position where the event starts. from the context menu that will pop up, select "Add an event that starts here" (Fig. 27). To efficiently screen the whole trace, it is convenient to use **Shift** and left arrow at the same time. this will move the trace left by the width of one window. Once you are done with editing, choose "Extract selected events" from the context menu. .. figure:: images/falsenegative.png :align: center **Fig. 27:** Adding a false-negative event. Analyze extracted events ------------------------ If you used the same settings as suggested above, 97 events will be extracted. You will find a table on the left of the traces: This will show you the time of onset of the events and the inter-event intervals. Usually, you will want to apply some further analysis to the extracted events. To do so, you first have to adjust the baseline, peak and fit cursors. Again, there is a function in the ``minidemo`` module taking care of that: :: >>> minidemo.batch_cursors() To analyze all traces efficiently, you can now perform a "batch analysis" on all traces at once: First, select all traces, either using :func:`stf.select_all()` from the shell, or "Edit"->"Select all traces" from the menu or pressing **Ctrl + A**. Then choose "Analysis"->"Batch analysis" from the menu. .. figure:: images/batchanalysis.png :align: center **Fig. 28:** Batch analysis settings. From the dialog (Fig 28) choose the analysis functions that you want to apply to your data. Click "OK" once your are done. A new table will appear to the left of the traces. You can copy and paste values from the tables to spreadsheet programs for further analysis. Adjusting event detection settings ---------------------------------- +-----------------------------------------------------------------------------+----------------------------------------------------------+ | **Problem** | **Solution** | +-----------------------------------------------------------------------------+----------------------------------------------------------+ | 1. Too many false-positive events have been detected. | 1. Increase the detection threshold | | 2. Too many events have been missed (false-negatives) | 2. Decrease the detection threshold | | 3. One and the same event is detected multiple times at short time intervals| 3. Increase the number of sampling points between events | | 4. Closely spaced events are not detected separately | 4. Decrease the number of sampling points between events | +-----------------------------------------------------------------------------+----------------------------------------------------------+ .. [#Jonas1993] Jonas P, Major G, Sakman B. (1993) Quantal components of unitary EPSCs at the mossy fibre synapse on CA3 pyramidal cells of rat hippocampus. J Physiol. 472, 615-663. .. [#ClemensBekkers1997] Clements JD, Bekkers JM. (1997) Detection of spontaneous synaptic events with an optimally scaled template. Biophys J 73:220–229. .. [#f1] Note that the product of two exponentials :math:`{\displaystyle f(t)=a(1-e^{-\frac{t}{\tau_1}})e^{-\frac{t}{\tau_2}}}` can equivalently be expressed as the sum of two exponentials: :math:`{\displaystyle f(t)=a(e^{-\frac{t}{\tau_2}}-e^{-\frac{t}{\tau_3}}) }`, with :math:`{\displaystyle \tau_3=\frac{\tau_2 \tau_1}{\tau_2-\tau_1}}`. stimfit-0.17.1/doc/sphinx/manual/getting_started.rst000066400000000000000000000350751517235503400225520ustar00rootroot00000000000000*************** Getting started *************** :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| File opening ============ This tutorial will cover the basic program functionality from opening a file to fitting functions to data. * Download `Stimfit from here `_ and install it on your computer. * Download a sample file from `here `_ . * Open the data file: you can either double-click it from an Explorer Window, or you can start `Stimfit `_ and choose "File"->"Open..." from the menu. * The file will be opened in a new child window, and the first trace will be displayed. ====================== Opening multiple files ====================== `Stimfit `__ supports drag-and-drop file opening. Select a file or a list of files in your file browser and move it to the main `Stimfit `__ program window. A dialog window will appear (see below) asking you whether you want to merge all your selected files in a single file. .. figure:: images/put_files.png :align: center Trace scaling ============= * If you just see scale bars, but no trace is displayed, press **F** or click the corresponding button (Fig. 2). This will fit the first trace of the active channel (plotted in black) to the screen. .. figure:: images/fittowindow.png :align: center **Fig. 2:** Fit traces to the window size. * If you prefer coordinates to scale bars, you can check "View"->"Scale bars" in the menu (Fig. 3). * Fit the inactive channel (plotted in red) to the screen as well. Press **3** . The buttons labeled **1** and **2** should now both be highlighted (Fig. 4). That means that any changes to the scaling will now be applied to both channels simultaneously. .. figure:: images/viewscalebars.png :align: center **Fig. 3:** Show coordinates rather than scale bars. * Press **F** again. The inactive channel (red trace) will now be fitted to the screen as well. If you want to scale channels individually, press either **1** or **2**. .. figure:: images/channelselection.png :align: center **Fig. 4:** Scaling applies to both channels. * Enlarge the vertical scale: Press **+**. Depending on which channel(s) you selected, the vertical scale will be enlarged by a factor of 10%. Shrink the scale back to its original value by pressing **-**. * Enlarge the time scale: Press **Ctrl** and **+** simultaneously. The time scale will be enlarged for both channels, regardless of which channel you have chosen, because `Stimfit `_ assumes that both channels have been sampled at the same time and frequency. * Shrink the time scale back to its original value by pressing **Ctrl** and **-** simultaneously. * Shift the trace by pressing **Ctrl** and one of the cursor (arrow) keys simultaneously. * You can zoom into parts of the trace using a zoom window: Press **Z**. The zoom button (showing a magnifying glass) will be highlighted (Fig. 5). * Drag a window over the region of interest holding down the left mouse button. Release the left mouse button once you are done. When you right-click on the window, a menu will pop up showing different zoom options. Select "Expand zoom window horizontally & vertically" (Fig.6). .. figure:: images/zoom.png :align: center **Fig. 5:** Setting the mouse cursor to draw zoom windows. .. figure:: images/zoompopup.png :align: center **Fig. 6:** Magnifying a region of interest. * If you cannot see any trace because you zoomed in or out too much, press **F** to fit the trace to the screen again. Navigate within a file ====================== * You can toggle through traces using the left and right keys (*without* pressing **Ctrl** at the same time). The current trace number will be displayed in the drop-down box labeled "Trace ... of ...". You can directly select a trace from this box as well (Fig. 7). * All measurements will be performed on the active channel plotted in black. You can swap channels by either selecting "View"->"Swap channels" from the menu, or setting the channels in the drop-down boxes (Fig. 8). .. figure:: images/traceselection.png :align: center **Fig. 7:** Selecting a trace. .. figure:: images/channelselectiondrop.png :align: center **Fig. 8:** Setting the active and inactive channel. * In files with more than two channels you can scroll the active channel using the up and down keys while holding down **Ctrl**. In addition pressing the **X** key will set the currently active channel to the reference channel. Analysis of individual events ============================= An "event" can be anything from an EPSC to an action potential. In this case, we will analyze a large spontaneous EPSC in trace no. 12 of the second channel. Navigate to trace number 12, swap channels, and zoom into the large EPSC as described above. All results are displayed in the results table (Fig. 9). You can select which results to show in the bar by right-clicking on one of the column or row title labels, and then selecting or unselecting the corresponding items. `Stimfit `_ uses cursors to define measurement windows. Cursors are represented by vertical dashed lines extending throughout the window, similar as on an oscilloscope. For example, the baseline can be calculated as the average of all sampling points between the two base window cursors (vertical two dashed lines) or the median of the points between these cursors. To move the cursors by clicking the left mouse button where you want the baseline calculation to start. Set the right cursor by clicking the right mouse button where you want the baseline calculation to end. Press **Enter**. The result of the baseline calculation is displayed in the results table, and the baseline is plotted as a horizontal green dashed line (Fig. 10). .. figure:: images/resultstable.png :align: center **Fig. 9:** Showing analysis results. .. figure:: images/baseline.png :align: center **Fig. 10:** Setting the baseline window cursors. .. note:: You have to press **Enter** after changing any cursor position to update all calculations. Otherwise, you will see the results of your previous cursors settings. Alternatively, you can call :func:`stf.measure()` from the Python shell. The peak value will be determined between the two peak window cursors (vertical red dashed lines). To move the cursors press **P**. The corresponding tool-bar button will be highlighted. Set the left cursor by clicking the left mouse button where you want the peak detection to start. Set the right cursor by clicking the right mouse button where you want the peak detection to end. Press **Enter**. The result of the peak calculation is displayed in the results bar. "Peak (from base)" is the difference between the peak value and the baseline, and "Peak (from 0)" is the "raw" value of the peak, measured from zero, without any subtraction. A horizontal red dashed line will indicate the peak value, and a vertical dashed line will indicate the point in time when this peak value has been detected (Fig. 11). .. figure:: images/peak.png :align: center **Fig. 11:** Setting the peak window cursors. There are three ways the peak value can be calculated: As a default, it is calculated as the maximal absolute value measured from baseline; hence, both positive- or negative-going events may be detected, whichever is larger. If you want only positive-going events to be detected, select "Edit"->"Cursor settings" from the menu. A dialog will appear. Select the "Peak" tab, and then check "Up" radio button (Fig. 12). Click the "Apply" button to measure the peak using your new settings. If you only want negative-going events to be detected, select "Down" instead. Selecting "Both" resets the peak calculation to the default mode. If you want to set the peak direction from the **Python** shell, you can call :func:`stf.set_peak_direction()`, where direction can be one of "up","down" or "both". The Python shell will be explained in some more detail in chapter 2. .. figure:: images/cursorsettings.png :align: center **Fig. 12:** Setting the peak calculation properties. In case the event you want to analyze is noisy, it may be helpful to use the average of several neighboring sampling points for the peak calculation instead of a single sampling point. A moving average algorithm will then be used to calculate the peak value. The number of sampling points can either be set in the cursor settings dialog (Fig. 12) or from the **Python** shell using :func:`stf.set_peak_mean()`, where pts is the number of sampling points. Some other values describing the event can be found in the results table (Fig. 13): * **RT(20_80%)** refers to the time required for the signal to change from 20% to 80% of the peak value (measured from the baseline), commonly called the "20-to-80%-rise time". The points corresponding to 20 and 80% of the peak value are indicated by green circles. They are determined by linear interpolation between neighboring sampling points. * **t1/2** refers to the full width of the signal at half-maximal amplitude (measured from the baseline), commonly called "half-duration". The points where the signal reaches its half-maximal amplitude are indicated by blue circles. Again, this is determined by linear interpolation between neighboring sampling points. * **Rise** and **Decay** refer to the maximal slope during the rising and the falling phase of the signal, respectively. The corresponding points are indicated by violet circles. * **R/D** is the ratio of the maximal slopes during the rising and the falling phase of the signal .. note:: From version 0.8.6 on, the rise time and the half duration is independent of the baseline and peak window cursor positions. In versions prior to 0.8.6, the baseline cursors had to precede the peak window cursors. However, the calculation of the maximal slopes of decay is still restricted to the peak window. . .. figure:: images/overview.png :align: center **Fig. 13:** Analysis of individual events. Analysis on selected traces =========================== You can perform the analysis of a repeated event in a recording that contains several traces. This is important if you want to study the time evolution of an event. The Trace selection window informs you about the number of traces in your recording and the index of the current trace. Zero-based index (i.e first trace is zero, and not one) can be selected if checked in the corresponding checkbox. .. figure:: images/trace_selection0.png :align: center To perform the analysis on only some traces, you need first to select them. For that, we can move the current trace with the left/right arrow keys and buttons (as described above), or click up/down buttons in the Trace selection window. Press **S** if you want to select the current trace, or click the selection button (Fig. 14). The number of traces that you have already selected will be indicated in the Trace selection window. You can click on the checkbox if you want to visualize them together with your current trace. .. figure:: images/selection.png :align: center **Fig. 14:** Trace selection. If you selected a trace accidentally, you can remove it from the selected traces list by pressing **R** or clicking the trash bin button to the right of the selection button (Fig. 14). After selecting some traces, we can select Analysis->Batch Analysis to select the type on the selected traces. .. figure:: images/choose_values.png :align: center Once the measurements are selected, a result table will appear, that contains a first column with the ordered of traces and several columns with the measured parameteres. .. note:: This is a general concept for most analysis functions: you first select traces, and the analysis will then be performed on the selected traces. Average calculation =================== First, you have to select the traces to average (Fig. 14). Once you are done, click the "Average" button to compute the average of all selected traces (Fig. 15). A new child window will pop up showing the average. In the original child window, the average is shown as blue trace. .. figure:: images/average.png :align: center **Fig. 15:** Average calculation. .. note:: If you want to perform an average (or any other measurement) of all traces in a recording, select Edit-> Select all, or type Ctrl+A Fitting functions to data ========================= * Navigate to trace number 12 which contains a large spontaneous EPSC. Swap channels as described above, then zoom into the large EPSC. * Set the peak and baseline cursors appropriately; the peak and baseline values will be used as initial values for the fit. Do not forget to press **Enter** * The function will be fitted to the data between the two fit window cursors (gray vertical dashed lines). To move the cursors, press **D** (historically "D" stands for "decay"). The corresponding button will be highlighted. Set the left cursor by clicking the left mouse button where you want the fit to start. Set the right cursor by clicking the right mouse button where you want the fit to end. Press **Enter** to confirm the cursor settings. * Select "Analysis"->"Fit"->"Non-linear regression" from the menu. Select a bi exponential function (Fig. 16). .. figure:: images/fitselection.png :align: center **Fig. 16:** Non-linear regression settings. * The fitted function will be displayed as a thick gray line, and a table showing the best-fit parameters and the sum of squared errors (SSE) will pop up (Fig. 17). .. figure:: images/fit.png :align: center **Fig. 17:** Results of a non-linear regression using a bi-exponential function. :func:`stf.leastsq()` can be called from the **Python** shell to fit the function with index *fselect* to the data. *fselect* refers to the number that you can find in front of the function in the fit settings dialog (see Fig. 16). If refresh=False, the trace will not be re-drawn, which can be useful to avoid flicker when performing a series of fits. You can use :func:`stf.get_fit()` to get the function resulted from the fitting. This returns the evaluated function as a two dimensional NumPy array. The first dimension is the x-axis (e.g time), and the second dimension is the function evaluation results. stimfit-0.17.1/doc/sphinx/manual/images/000077500000000000000000000000001517235503400200645ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/manual/images/average.png000066400000000000000000000144211517235503400222060ustar00rootroot00000000000000PNG  IHDRDq+sRGBbKGD pHYs  tIME 8+=0;IDATxwuCJG1FЀ(X Q & EB1(" IA< z׷LymCd>׼?-|Gj .2 2.ZhX.\8m.2M;Ș+ƻ-q b}j'{/ž!,ߏGhM.1]dhRiǍ3EQYY(cheeضe3+L3T ;ҫo?:ch۶qB\p)(BIi ܾړ1_~%M(//߀!,CAR^V)Kd}"D;u\sո&)MP,+#JURɑJ߻HjC[o\JF!w5a"!"#3om،{fLK"DZ2>A0s)%wll-wE鉞naz{} L4Mt]G4," :TRJHc䷍)te2-M9\v#^ۖm ձ%AS2mxtn~K³׷h- M.J{3WH)r|KiIIe49sY|yԠ'*HCoZ,&W:a8E_>! @F=gEep;jo}t==o0?hYCs߅ hR"- ,RԚv]̞3"wj=xs|Yi`5ѥ?e$(**;~unmWkU-Yϖi)~Dm4n`ݔE?VУ8]y3SRÉ^"#y lS1㊼LhҖ@2zjgN9.f(d-hKҰ~ӄbJgnoQБ_3[@ṭ! _Pg1x %;n~^zgQ^$o$u:1sޛ4 "BGs˭Yt)3[rYXD+ҏNItҘ;]jc3fLdKtS"- >'-pWF?IHzMQcӉEk0zHq=?:|+{j eҢ6/:o`J$$+4K*IF@ˢgP ?3*jOǯ  MPS]&%1qM2Q;wl_4C2?/$D˄CٹyvlO[L2f^|RQXIK>)o@Jdњ, 2o^::-jɢxcyvjLyBVoc+Q(6/36V}l#u1չ!:B!Bb*^}/Kژ'%ӱ" l}9O- [3MݕwWov:jAħT%ݍo'39t _ jmk&.3_N3 V~Zb2c۔9u[wQEJ 0}?=|v ? `=i _oS;dlL#4Keٺ2TEl}9X" UPV-YT&h%6E6j<}U6A69y@!VH>Z&p}%[6NHh;]שNF ҶC'o-_sɏFn I~cСQsf-dL~"{U:7DKdY6U-ܔR/ fFj33kסXClx-=%-G:.j{ R[Uţ4?* XHiv4As'w/`a?}eZB%eywUJlΣ~yK`%Vt[Nk!˓v۶4z_P3Yy][矖-є-(oӞʸ75d*tkAJY4&! 3HeMh?zBۗ~UeC2'5פ[f5A_[~E(_keё Useb!્oKn)=w?ZѲy4dppc"RY&pҺ%VUEm4VLtXD9iࠔ%܃&_w:vD`]eٻ#qWҩkF}(@eҳoO&\i`bVЮz1M7V& w7 ޯ6XX yhDfO2|S1۵$XTBbݣ( 9΢Z7PO&&S ѱ_3TB?M&\(Jv[rc!22pR8%a`\scՈtlFT[x$8 Wv>LT MMSW W= "ΊQ<{X!9nB_56_4Eء&D#1%dP2x"c"rO3Ɏ2ItI;˒]儷RZ2d`4\P@]_cC𿵒RulY2Yu.d+HGڙf*&g]n d^w[aQ2eӗ/>g׭&sIg5Wsu1UXϼȌ dqЋNAm`E SRg}VNʴ.eX!7cRKO k C,'||{X?srӝrzQ0_ t(CvΜwt߼~|Y2+dw\w3Fjջ|&v ڿ/)vR#-P%.#%ʏ'gEi4RVZ |sfz]۱3=v$y6E~*duBG2&BnO~ȅ<=w1\qMLQDBÊ@k:2T},/DV.yФ1KTde.HQN4j /ǤYak&'okSY!ιk EF>]YwqYQYQD *Kfj%'ưt*B9n:ܱyȄB;E~l 5I@[˗VaR[HT2 Ӈq3CLzx}#%T Ytɫe[p NN?y(h}]&G } ՎXbvƨzT9LWV7x#7(<).t)ywd.SmuP$|{0˿'αrq~^ub;CE<fەQgy|vP#PW~37O$m耪Pob]Ӎ軬'XO/Z Kd[Z}% ړﳮL#PW[W8{cќKTdeN흿ԉ`ȩ aׅ#쪶yh=K׬e߼טuldw\Iy͋yA9^UpCǔ3ofMy,SȐ%PPJDA.%wʤ^EK&G\  ~_'s_N B4ʝ)?fcPf޺z?0mr8IyL&u t==/Fjs/A=[>33]0 t]'ihA@0Oz,Sb) 1(”*~Q׆ޅ %p;tF#C1JBڙVgE?o3Zm<;H{^#(Bq&8vp4VrPԟW4PSI/ލڹa35̃_z$-sN?}g$''ܜ\rrr";+ ׋w];@[Ippqf{+Zo|Pj5FꊠQƜgsUOdr#(MieLV_$)wT*5wqHZDmRPz{<8'CqS`Kk2.fS/Ǯ`÷",!`=DHhN.`K_k'cjJXLJh} WBфԣC,T\pQU5VVvGƷ QU\8z&RX9.-T`6J=1GLSzP=vlG[ΑΞWd<* ao10ML5tMUS]AAǸ Q;`#vt^daJ;fW$[M)bq]a՛=Uq"GD)vIfygvwsU-{A6ϟD"H$ʕ+i׮] zZƊFI)H$/}JХKe~å%D"-[,}*rxʓCddnYJ $$^H$DRVο z-'yD ND"H$eFRRRSο .x-;t(҈D"Hʌ,)::uS҈D"Hʌo]*Ux-k"4D"H$2|Rt^,^X] /sCD"H$Rf˖-Rt^;v  Z<DD"HʌKyUӱcG]&N b"(H$̸[K}qN(n?DQ\zL&p8h hcS"H$It:1J7i4F\s-4 WXWTϟ?[0~<ͮm~ƌDD{?%5K]u똛7y#G\mھWP\mz 6ntK/A&(ЭxnH$D")-oNʕKuAy:F#TPfMN8񷺐. ]reHNp{T"H$ ;w.=B? vԉEYZu:A.>L~#$D"V)M|z:EѢ5dbʕ^;N˯XZlܸe|7]gD"H$eK}~###L&,X`2J5KLp\N.H$ػwf'b#`%))ѣG3|i oD"H$2JQFOs6l@~(((~aaB`Zh۶gÇ1%D"WNt8H:nܸ27ҥK`׮]^}u;S~$D"j+":-Kϔ۶m++ITTgoNe D"H$2cǎWFtFy%_ײ]XQ/d D"H$2ZjWFtFEEaIFF:E {Z'IiTD"H.]tMWsq8N-~%` mnr^AC*U_/s+SY#-ie&EQx5?~k# 'uD"Hnk)))~Ow5kVp裏 **ùpN$%zTE_F߾};B:w|Y[N:ŲeXxo xBK$DR~3_"aaaEꡫ-[nEQ|4 Z"E?cP\b5b޽;裏jcU]QVv\~0 T\ʧD"H$Epq~b駟8}t#**zIɲ&..ΧEapQhhADDF~a04A @#_"T5O?… uv]pufs^}Q;ZU>M$D")EQ0Ůg4L:N*Usjo|ԬYS7p?Hiӆ+IxR{ [PPǎc{hܧ)>N*_$H$ߓ46l/^lOD^tÇ3zhMFfΜh6(c0x7YjN\/rM7iΞ=~dUL&U?/³}6!$$KRjU|>}9̝+$D#555(pw{=99ydWQv53~!$9NfKH1dz\rFv|𑑑=k尰0nJxx8ׯiDW_}YΝ5_;v]vW I]ZjzõD**|Ä 2H"H$;TZ0/!ح[78p qqqe5  =_ 4h@}e6k j7Ll߾ݧhrZb~/f<=Ciڴ)Ud~5kK,]((Bՠ_y<-)Zbccz.TlŠ+d.]bĉ߻w.wqG:{EAVVVZ3:)$$+ŋ t:(ou~u[.uرcL0k?+WVUo k׮%33SVw_`0ꫯy K9x O>?ԩ 7!`9.H$QQQ~>c7|N=4lP,VUR rrr|tV`0hz-**F 6l`ݬe-3{l~J D~H߁g9jqI"\r׺BLze=]t8JAT PV-,l䒫Nvj,t5;l`8iN5f59֦d#=r 䓯i;6IfOR9αUr:娗mtYS-fj_zt~HҎIvh' \lwY xS@֦w~"5;lbا}2:|X<,,L̞=[ݻkx `B)>C!ڵbΜ9B!ERR8t萨]B^{M1B|" D"\/4mTkbĈZ_rJm>(bʔ)ڲr !HHHBm6nܸh׮B[ !XzB٬'O6Dߊ-[[ 6=/{?g3fBqiSN>].]!ѣ~7S,1f^zB!nf~=5kƿoә0a8ѣGبc! {"#2l*ʒd A5]tɓ^NJBQ5ke^. W_}šCZ^=bcc&7ٳ'֭cS7gA%22 9ot(Bdd$AE9RNH$IPsor9R3(Bƍk۵k[}F\GllcNjs=z~/v7|3Z 4Kԯ_qƱgrs]SODDe9<<[o^B9B޽b͚5zGyĥF#PjUU#2֨z?]}pm6E_~AQnJhh(!HHHpؽ[@Bt3==:uT+p0qD:55G@ݺu)((o%77Wȑ#v}EA߾}ܹrۗL_~bjժGqa,H$H$$xyj04Nqg4JV=w}?z血5kcڴiþ}P0f3[nhɄcǎ?OuFm+W,K;bСԫWO_@ jt#Gt}r^*Wn9}43f2,Yn]`n,c?ㅗKT jq$&s߉'OrI\; 4 //ƍ#j|İqF-5ҩS0ͤt:rcعsfԞ={d޽~ol5g u۫U<]<7 y:%-r.)8_֟y+...~077_~'O2mڴb1c7n^G}T˗۴i| <pEtf6T?o^BZ.̙3 0|Dӧ1iP\9|A-Z(уo1@e bo"b9r C-ԨUիSzu0X,°X,>oʕ+d=-Bq*77EQHMMy!rt:5jy5j070?݈\r̝;Ws-L&MFDD0k,i޼V3(j֔D"UW覦Q£HMMզo!#GbŊ~Knڴ~X=p_>Nu`0p8 y۵kӧQPPy4mۦRbE}'?u:uK ~a.]>ϼ 4Qf;ŋ|ᇌ1B<0e yQ<խ =|Ċpˠ/ӾQ/v^z{Enn(qŖR ԒO|&w͝ yf3^_\'999ا^H$I^~8`O%KʼM;w$##%Kzj222:9M;wݻwپ}3''Gןk:oJp:,[/K]tBCC9t&E1<9t٬\Rs\:0@sZ !4Ud[Vs`q/h"ʗ/fcȐ!޽徹!PQoC*ۚӉ`z[VAhh(yyyDFz7:sLBm۶̜9SbO>ZE!>>٬[OM4/zoEa<$H$I@;wmےgQ@Yn6?Ά {h֬Y6t(ݻAeZlӧq8 *Uq:8N͎Zlrwm]QoOn݊(Ϸoӽu8zh\m97\Rmm6_܀>K$D⏜^yǝwY}4oޜrYm6uԡzŎ_R|y&OiĉkߞYaTT|yfΝ$%%qE|Ag޽nuUTw.H$98.]dci3U;<<'x"h퐞\/  DgQp).]-WYYY^cvM;vhF׿8v[nռw͚5ÇӧOF믿ۯ`Ц7L&WΈ#;v,deeif e͆jtbp8OU[M~~>uԡYfk-j Ɍ3h޼9!!!deeѦM(,,[n⋺s(*(Kp8 qN!F*2eJP ]QxEQtR@o;E}A"##pռP/EM6!C_tt-EEt }nRnZjK)H+ )Bllߠ0u%9'!yyyO_$09{{TaXۗsyT(ƌ?Ʉ`h4jfպw֬Y;vLFM:K.G||;vd1Brss5j)))3Fg^uj֬Iزe > ZbÆ KwÇiذ!;vԯ__^92qĀ#OOs-;]SM+hq|U4iu2Ct4V^^.PHM[ҧO~7orE=HZr !8p϶JPrJ:tPҧ|L$HfѼpBΜ9Cz8teא+KIlUn]]0K ̙3S8Nv;T\Yy eϞ=4mڔyQJbbb!,,)SFRR=FUVΝ;}F[,t>B"#]%v;l6999(V=XlZ6l(ic0hٲ(]v<!HLLd2ѺukhԨÆ c?#G0rHy饗4m41LZ2}>QٌhԆټyֆ3f3h޷o&Z}i;vګAY=OSe 4_{=,XPocǎn jl/_]PPy'U^'|2رSQ\}${D" f3YYYZqy摝RF ny7K}d;Jj0U5kdڵL88 4iΩ{n6my:t(=֭cXV @۶m_1~Fmu:к //I&ѫW/``ҤI?!**ѣGӱcGhW^z뭀kΫh}~mEHHB ]wٳg'py6޽[w111EzUo˩^:N&չgҤI[kE%F{W~}ѿ.\x2e ]vՄaIq-[} &];4ޱ-$5AYw;5kжmb;ƍEl޼g^h2k,vܩy~=z3g@ܜbbb馛8}4vaÆi SLa̘1,[Ν;A-h۶-^sGU],((мj_[XXjN:ԬY5kкuk222|Hl6:u[6tP @ݺu}C'OaiӦܹs}IRV<ƽr{=OkڵkSvm>sjՊÇiӦuzNG?׉N_~钸̟?QwԼмy1t&%5#45kƶmJU?^w%Kꐱ Ttصkj"11cDz{n5 ?~pS aaa|ӦMƍGHH0ޟl6z-9ݻVz̘1s=1B;С[7׽/}Ck\tb(j(RPP@5[%tTP4Ν;^dQuѣHY/B^z饫Ct֮];EWl&|Gi77uBK椤$ZlYR5˞M"\Ν =y%ޘ:fÆ vmEί, q (Ux͘1+V"##={0o<>-սoBp N:馛*!!!L0SPPIKKJG+ٳر#999̟?:}Q;w6tcǎ'N$[oEvv"##lo^ֵlmڴ]k¨QhڵwڜeEQXlk׮t?߿_}4iRmW䋲U!:HFSϧ~kذɗ<H7nNI6l(%8S"\!,XD?#]vy\|m[ ))Dfsi>}r,H5j}X[7.]Jhh(CC >\>ݾ}_ cĈ,_0BBB^M&6mA|تPk  xO 孷<*"ZjZ`fѨQ#=Jrr2&bݻˡW}`-kA((e7l~U'E9sR"H$O?y%v|̙FEgfI,֙L#֮$w֥Gܹ3Zb0m^HJHڵ9{4NW^~޷obӵ{YMRҮ5k;t7|ôiӴ9֭΢E|$)) uƢ5lgժU1<#ktLjj*Z_{etܙg}={0`}]5kFrrr9Uxq]}PCO?4}_Q+*?)j̲prvܹs'qqqݲ[oիu珪AZ^K.e&/e}E }v\5̙3uzĭkWON-D `BB7tuy~0m4NzzzaXP7nC #bǎCx7IHHxE=ݫ 0^'GYt)˗|򄆆r:vÇ p0j( zeۻw/M6#<[^z?rUv*f̘իٳ'3f̠q8pT+¢EEMY;~8 Xu]5H,Oaie 3/͚5j՞[U4}u+:UСCy'Yxq7ӧ}Q\n=]R"dggSJk ֗-[Fغu+Z:,"""!41Ҷm[~a]'Db)vl6fcĈdff2errr((({Ys=dbp8hժ.]l6S|ymehh(!!!^{9ƏONNG] .o{ʗ/<&&~^{+꼤R) }/r@K),,ĉ:yJ:FEEѣG;uΝG$Wlڴ)`n69}4Z] jثN:Q:b餓FE{ӏ~l`t/ӧq2]طo^{^4y櫝j5˗Bff&#b!X;effrE.]D^^Of <3n8N:E\\III?~Ν;3b&NȄ  … j- wuue„ o^YN4h@^z9r[ Bg~Mhvgg}EQذa.Zj,\DINN*V?oNz K NuKNNBR2BpwrRr߅>ť:_pXt)QQQxnwqbbbvկ_TuIŏhjrMHl6Ȳexo8z(ǎСCX,f͚ń hӦ E|| -2~nЉI}z|Y'vAm~\QrHHH@UܳW׿Uz 7计lf^ixJ;ꢠ˕+ǜ9scDFFRbŠIII̒+_IRR rR=ߗ;ք~[=ZzCQrrrNfL%aÆpff&?OWm:OPQztl6ywyWywxwZ_/[NϾk@pi %))LN8ɓ18N/^Lq8t:ѣk׮qX,fϞ馛x#!!AKWk.ϴ@v ر#999Z+ħ^݇+gϞ>رcy4+WyO>Q&MBPBvB^TUp%[Pn/ B0d Խ{dҕ7;##(YNǿL!۶m˞c^;!v^Nd _](MTܝ (yE MNNWdϿE(x㍜?_ի|<*xjԨ tVno8N*WLHH+W&::ٳgӢE &L1c8q#11 *PF ]~DڴiCzzǝ_,͛Mdd$7n$44Ll6:t(2g;vȏ?1;%( 3 ԫW zjKjNSMכ"9y?Lh 'B qSg@"=7lذA "QZZg*ܣ/F2}L9r9m6y}r8{,=gΜ\0!8}4&IB^fM>s?NYz5ok׮e„ |TXX*T 8Z?;_xEQ8uHvء{GQM&r vIFF?nIff&]vռ[DDD0bF}ϓ?>{I&4mڔO?ӧE^ !ӪDFFkl6up k{Hׯ֭[}wYX'++jժVfg<"))~ .hy| *{6$$'|R TѦ>j{JJWwwj d>??%KeXhذFL"q,W9]tID H5!SL,$k EQ??K/2cƌѣ͛7Ӯ];Т;ԩoQjm &2;P (jmV(+yD NUK y(KR>ET-ѣGaथ_|p@F#Ӊf?G{RJ)@ZjE֭5a[R?~<t=q8L>]  Pl+Z\.ˣM6Z\'N=`(280۷Tvܩ㏹[)(( ''@aa!v5jDHH5bŊZ[5DŐ!CVn݀?KL&2339 RA9!N'v*v_6D]93gٱ+!شip뭷qD͆d *ERt^TZUx'C$ <sN֭~!ʷYJ&N} /Kxxxm QF۷O%O$L8Q۶mg̟?_K-F/l6v;YYY5FDDCG}gue̛7!g2$$D+EO?Qvm4hpYE L dU۫rWٲeKGK/1@~Ґ2M6Fy/fF#6O?_taaaZ(. ]5 ]>P 6SN8qx Yfx]s0sss6l&M_'44g}=ܣE[V:SMݤdddhSQ"'^!ꫯD-KzbٵkN[֫.zOvtܹsO):w8Oi!vػwo)=={hݺWt_o>NOj@ _fMvMPP?Yơs;ޤ{ |(Xf;7K(bЯ_?soҤ M4gw7=w^ODDJrͮ!%%ZNϞ=ܽpK?x='NаaC͛^4"~<ɓ .Aaz*| ={D)N8ZlybfuO?`h4ڰaCʔ)O?Mǎ7n~ͷۻwO;j(=ʕ+m-[ιr98PXbH6hРPwĈ.b,՜YL5j=9:>{7nU*n)fi 3g0eʔta<Ȅ =Cev111FO8 >Kt7g}vp 9h4f˓\IxT`&mhҤ $%+P$+p@Is#z4Mci6s|=:9 6dȐ!9s*Udsi&, foI&YV-VjM׋2+_㏳a7nig&00k׮+/6,۴o>];9 v.9r,_Nљ"%BC!11ML*޽᫯ĐOv;4퐓,Y{Yrt҅CvȌ3~[˓ pGxp ӓf)=IIIIH)vYsz-^yiYOp\⽞<и1ԯ*8gdd~^ HK/QOCFX,L:5[xO*TY KÑl毿?|TR+WNC)Ebb"qqq<ôiӆ;v`>|8ƍU:PzuvTt{ R 6hI0QF\Sz:ǚ7wrLο#K;gHE 1bWsDxx{9;dnc[*\2O=:uҥKݻɄN#((}!SmZݱ;r/;u4+VZw ?b;ρÇoo>fNb"Rg*P2Ɔ,hXVZdA4i$RԮ]#GRfM~WpLJJpp8 ]v3';GMn:ժU9",A(Jx:T,BoވlBpd5:eno87]'888K)aС=իW3x`RRR0L4hЀ 6m7ʕ+FpppZd "qNz~ƹ ݻw, {ι'OB||zipsy\o17^~-._<[,ʎW숥:utk׮Og*~GVXڵk:u*F,{.K/D۶m9}4V_|ѝ2311gLO~\q.ѲeK|܇ 4 )A(TX19?Z1(.]J/:VVi>1b!Bӥ Zn4g^Pv[WLL jclOjbZ2d%KD4ݻN޽;eƺ{1WNƍp3CPJ;wnv;Ç J5j$(pYZL^)2-85 f̐8ݻwc=S4r2\t)Ӟ3ڵkiѢ6-˔ >}0w\O8ҥKgfܸqF/^Lxx8< TR%]!O1Irr2~-e˖--44ԝu._'/SBIdd$*TN1v~!&.\p DX277t"҉ԐYr QQQ3lKzaޘgΑ#G]vĦMΛ7]~ :Ę1cHNN1fq4MTR;v>}0dʔ)Cݺu_P4}2: UPʕ+g3K\\]v%**1cK^ In%h۶[x۷???w{M_~%=_|eʔ!11'|hfk[ox.\/k~: RP B^Y5B`RY@4 ѣ3]ԩS+ݍw 111$$$%3&t״9'3ʕ+3h ŋW 4L24mH2eǎuֹ"4M#!!Q`]CݺuT +n*(S >P J)4ijv3ϸ:tə3g8qO<`Hگh9Os8,Y̙3Yv{iժ/2+VG\v }?Sl_vb^_poA(6,&BBnBk.vo_rqݸ.Oz˔Rt:4M#,, D2e p|2A1tPF%K0z\B hԨ)))̚5˻{)nj?fg2+=Ez7mT ņNYHa:Mcexޯv֮]K۶m3u< b޼yTT]sϹqzhzg/\߾}ٳgg͚5Hbb;`QW_'n8bbbظq#׿|OTT TP?PADt>V\R뮻t*/(C!hժqeRi=WsP,KPO\:wO|2&M[ncZ7n*WL͹pcƌA,+5  Ed):byR5ѩ=5m(oed|j;Zg<^iN)$ άYCIiz,Yf1,=1T\jժk׎Ǐn:Jrr2t:v;AAAԨQ%J0eJ*-[\9f͚fcY TW= ,cǎhAڻp۶0{ޝ u'vy˜TD׋Jđё<V;`I}qfPH' 4Mй38k[҄Ϗ,tڕzˏ=JRRʕc…_bINNv >~ѥK4hkni{'66U2yd]tJsؾ};˗/NA"+c\nbi D^b.ɶ֭^a[(i_햕ќ%V ЗɼvM+f?Y4zjJJYժ9TXs1iseܹY]n]|At:;O~W;vpg&ԯ_{+s;444Mw=F)E@@˗G4wsx=̜($Px衇Htڼ)U7Yjj6t&qtfڰ5|k?a ?R-)nT\ yWZiӦ1vX2 DiS2Zb0.! KpeD9rٳgŋywٸq#[.d *Ky5J*_AO|E2]tq#va&lZN!ncS Ҵl_eT8~Tl)qLxwř3uqa/ PJʗ/R's%Dpaz=u5Mw E©SC) ƒknCdBk\ tz? LLL_BBQWq4KS/Z$w@4ݻwOv"5z ?ŋ qWBʕ)]4O<[A(PDDDT+4r _~c6Ҭ$$$/ إh]5in#*p! ?7y׽~0?͛73zhF#n B 5&MuKRR IDATڷ  <@iڔ3g?MR 7?*nԬSc@e\DiĐy@-󁾚_|o~zmۆnpczyg"G`=/rNӘ={vj ­PJ.:IWzeƍiժ3pzL]78ođ(RE{z|˖-F,Yl`pN)))4lʼy󈉉U|OAA W@EvMVH^wOEt*g!*ݺy _~MIII|Ghƅ sE Ǐ, 4o-n| ̖i۶HXszGEEqaN:ѣGt:Zn?<\=ʼnA pL{H0~|=[cLNN&..VZ%6} M%=,O  7YشiӭoilYi1ٳg"::]fd.p88|0cƌaڵ4mڔRJj2i$M#<$<<Dz28 B^  6%Kॗ-о}{2Mp8(l>t_~aܹ9.::M6yf xxW(]4MA HII!88&YAbOƍsNIܸqëoN$%`62Xdhtg&2̛7ӧcX,$%%ѬY3 @RpWJѹsgRlܸEq駟_% Pq%hYYrWYa:szPLЩSt L4dAAA_Պl{DDD`04eҹsgOt3ٶmX,<4hЀ>pqA5[nY =y˱'TJ{ 2͖.Onɓ'9s&V ׏u뒜Pt9g' $$kׯh"i Bh4, tl\fMͬ2FѨQ#"ɓyj1^rL8+Wm۶,X@v;wt~FEEs*(իWfybP\9i BiӦ":\Fs { g5TR̜9?7n'..#FqF:رcҼys.\Rݻyfʕ+cƌWMNC5  kNg>5 ,ɱ#sUb:/]ĦMxw~ۋqL6e/r4 XV"##"l6s=B:u BŜN $''{]efKĉz:z׮]cݺut=z?>gϞnSD v;L0`/_^СC.]:ɜAb:3x'ʾYAhhc>TʠU/^dǎ\p+Wi6J*ѦMf̘APjoժUgpv["""XjUe7uV9ޏ  N4iuJOg>C4V7ˀ 846lڵk9U;1gt:ALL 'Ovz >a„tҳC`` O>$111Oɒ%1c}F) ޣtW*JJXp&$$m}{h4b1빤h`` cƌa„ $&&b2{%5 v8Q0Άd0i:t^z lN#66: UV{܉H)x.]ƍn`sҢE elF#TYZ5  6ك|r@xx8֭ ڞSNA!ݻWDgQ`׮]^esj]=Y\ qX!!!9ӦMs7dNK'z=+V_~q_MرcZ!_~\=.a^SOѴiSw͛Yd (oߞ#Gf;]ebb"F]v 6AiΕa3fHA\Llj,dd{L2t:vؑyc."##ٴiSv}Q4MKOMӘ5kql6 PxEt.\UuST&&ƿ4LNN*[h\tAA(DJ#f~4FIbb":sRyХe˼K޽9wAAAݻٌfcȑz#R8fsC#儎;EABDD6Az *S53aĈ,kF`` +V'fp8hժ >{#9tJJcٰX,fRA9"әoޫlTP\2d/_FRzuZlwߍNgٱcGUFhh;եimݎf) ń&MzәܸqŅ T_?X碹sr)X,$&&ұcGy4M`0о}{~gkƞ={4 67nkɅAbBbb"~~~ZtV*tA[n%111*t K.&""ĵk4h{R ???N>4WoF  Be˖-^| c %?CL4 LGѾ}{.\H۶mV#N8pgx&M2) B!/:tUvp{fz;_ΰaø|2!T=Py=pތ̛k~g%2 Pȋ9":_-chfܹgeΜ9|{Ny^~eAAu}(35O111 8}4|=wfxb4M8<#<.Ox  dJ^|9v-#F0m4l63g$88˗/"((=WsDFFePP};Eer kƢE  III:3x'Iܭ[7*U8SYZ,^J\\vsL2ݻ]eʔA)E0h$88]wVs2AA@t\!<^=PƍGtt4III߿+WZ6mڸc~3WAAemƣ>uJOg>+ '%%ѵkWfs&^  B&:::딞|W'^SN8p'NPrep8{]A'N̓  ?|\STJ>pw{h{3yd{9FfK/t:<(  6ʕYXnWِ!iӽLZjDz!Aعsg߾:ŝcǎyS9|A"""߿?!!!7֝9s& ̚5g^tAAr…&:bߺoy%ORZҏ[>͞khtnګlfl6J(@\B>nیCSAۡaÆ^n[n7_}qh޾Cؖ,ҙ/e~UVtU l6z:ǨQz4;w̷~+w  Un[cС6CSz3yh+0pW]4{oJ)gΜ)v*0! CڅX`8o^AAn}zT9K `'3nbo̔`7߰rB΍yX*pOU 9(ΏϾÁjuOi==gfoeZmMM]>ޔ~,I.]3 >b{^i@)"#!xUgѰ`s׮7B~  sH?ǻ&xz>o[wzu+T׌C߽;zg<pbbW/~&L/t~~HH[7eiǤ g }aHLtn̝ ;?'N@D,<(S) _={לeÇwߥnug[oo9{!]Ǵp!p DEA<ܶ-|1|sy v޽ecmu+X,V1cš5q]=Kuns'Ʀ{sC{tMg>.oO!lYzۯ\  ))mW_咽go8~.^L)0sfa>Y6b|m>m6ذ~; Vk>/#5gJ0ujZt MرiLNM7eɵ~wIÍi gPϞul{u\qY;yǹ1i\M1&'_;eGڽlT-\vi+GtҵOirZli[5s~>5u~L5W.^t }f\LJr}lre6lm*l۷;ۮg;۶O;۾7\u;. Kဵka4u{e#Gʕ4L׳w(3ĵOqپ3nOw9UJ9]{8e.Y}DYz|V쐘|l?hYi˝dnu>]K3=u ΟO?fJk11LgaTmgo~w,p\C6MV{nًRc6,w;eY(NZIDATN[ӧwwGn㏴g{K:Qy{bNttnoN9+~d>'J*n< 514x0z^AA#ZvmueI;vx}Y676AAGz>?&MsBA!ؿ΢@ ʲHHwAA#Wuvۥ8t82`Ư Rcw  rHOg>pa~LA!8w\)3X~WСV3QzAA3Yx5O޶YbBAA *z23X,Lte ͋v=Z  l6 q6Z򁈈[}߾}Ep gDEEz\5kxVQA>ޫҥo &A!IJJYXrWY>VČ  [s,pEr8^h* ޶ `BniϑbC=NwͪUqF2v`` 6dZv5jpIR AɒތNg̺15zNw%JAnFpp0g߾}IBBBW{%..ڡdɒԩS={.S\(Ukf$$߉?KVZڵbk2ePfMvܙ'C;v %% +r)s C֯_OllWd29 f٣TdR~(/ hD?d)S-['v(l,\PNx+v6mJbo{mM)ň# d2aيOɒ%1LPHACѧOʕ+l.a0|n|{o4+}^… yWҕi7NK_AÇt6n@͚5V^RZWٜ99T)1  yF&MrN@)Flni0h  B$(zj}R2. Bm6w@`TWw#5#E vpRctsWa v(Ρ} ~=gnġ)TQEn8C)p w=OdaJP kq4 PET C0RᑽKGo4*ZWDk8g6_iPRit(U .;YK(SS~9R+0mQJqyWWR(\@W6s'+RhuOAK2cS+\:rXxl QP;BJ|N?^Dwf@K>Ħ8 |J˹1;I ֮Zܰ۷ 2"g~9$0oYnѸ6>hZjU98MoQtrZN~~mN?vz*$r^ͧ$eź7Z%H>HaKyɛow2ب9XR`q٧Gv^ŸQ-]HXl'C5Nыi;qI6i{z f"8aojP-|OrJɆ8P4qwf =؟Za t8: b~UPӠǰ>4w.OCVbc3ˇ[)ZMЩeBeOR~zz= PV-Tvhج%KB8{0Nbrψأ4@0βxc)P UsƮ]:3QXb9YZ5BFzwPX [Itxlz?R317V!d`4]f? z>}GS98άhq?}4;&&=RH@>+ Bgɕt ?,y]&v vMìR퐜f`;~X|;2MyYCO;4 0ez~V |¦Ce ]>#K:jf4vP}M1a>i&eŦcH:]&l57W)v9*bE9=\c,`3->X0i˖GҬӆ79l=Oc9}k~e0c5pj.4G59w߶/Ni'ӷ}<v?OкF;táFЇ{'ԏ;Cu|.°17UUj=$}f1e4 3PwAU]wǿ <"b ,ֽVikcm(N41DE-qkQT*Vh(hD%(Kd#{9=3p{ 4s|T̩Rm9|5LO;hWDҽOCUqGn'4f/iI LpJ0r'IlFnA y3Qt48T:jKbOzEx:4E8sG!J4GQP8QWZGh(G㳘xY\ƟQ!g70Q+cRLai070P~i7yL4,^яS[Oz*( ٳg @+\)aSqu샿Qš$"mʹ!(8=rIJr`޴:rΝڱP .ݺѽ`Tqxpv擄FOǃu'_I޽,.jC-["w[UOVZ5/ ׭ք|1?Ͷ)jSFL plm"D9clN3;*ܓ㙄l]DMa[i^oMfwɒp aL$rӖZ2f-[9yPqC)7x',wdkpzWSNMzjAaaD! *ߟ(]EE*m=U.e_avB(F#I 88I[TT :pt ax']uEZt^m_M?T3a><BaP[=^s$._f*jĉR,ԡ) ;`~`ﵮws ! QYYvvvڧlZI[Hw6]C)k! OO{H)0`iiiާ$@Lm$?SXR>$B!Dl>ܜeԹIENDB`stimfit-0.17.1/doc/sphinx/manual/images/baseline.png000066400000000000000000001655101517235503400223640ustar00rootroot00000000000000PNG  IHDR?jsRGB pHYs.#.#x?vtIME 0A!- IDATx}yE- ?gP2lFPamA@7D"",aGw!![UuzH$/HI?y>]]u:E1 #iѷ[( 9*T#5~~rM[tϔ< F6U#rMD*|r7ݴK!cvD.hHjgQzzL>eM@1W̢˜'R`ebڡ W%*T-ivW0Q=&X"^ԍJBVɢ+LDLT1 +O=$ #O^.PmA Kd"% ZɓqE$g1V0rB3gk| l,-9Ϗ}0]*}ȁ5KɁ 'BLA@T!* +B|Pv#vž *-r&)T֕h9EkL>@U`WWFɂ+{! BlU6EgoEQ֜YAB"f/9^sHx7ɞ{d^*ӑ./<,ZhV]8댈h&Wv^kJeKH8 L7KJZ)yVw;ֺQP0hX-jܷ0̈Blu^>M-iUŠ)%b"ȡK fwȿ{1@Jxd(T!_3s.\'|'jT1 dUXk91\&`<k]yj{DJ0W35Oƽ$*l0oļ@!Ѹ&Bj/k RbX,  @*<Hj{T̆PT  -@<\LXa 5FtC^A]zT MFT,EKۊaA^a$Ԭ>̰! J~~P`]6ވLl@հRj2'(Z.`FF1CGL&H;lߥeXBEUq`Ayǃ+(tTBO7cK::Ii8W2DZ<32JZI +檈0ԏ1E2CR\~xV@։Y /:^`SP29z͢&X('ݕctMw5B99eBY+3Sj;e3$ :hVK   &U&\V $0Tf%*ƻWD!(,FL"ZB}ܩ`6TT%*!([=/dM1=bes-%DVQ@0F 2T}\e[G怺t$hxcC9ީ23|+L%_lTX!8ҌP=e^f[VeiJE5X;4đ7.@$%jyBɌΔ+#Zk55cme$+U- +@ݑOܟZޛ=yLMD "DXZ f 1UTg]mW~ 'eEh -L$[Y^Vl (׼ =sٳdBXְT^#Xk @ `Vr|n}}("$.CQa$h51\QxԘʱ\a nf\VfGL!&Xg&bV"F^k2`DD"꫊˥LZkjNKS" T-k3 j0_aŌ2g+E :lS۩+L$(XK"HIUW,k CIOqRYTU6K h`,!eRC=(j{,|G \ +d|E uYQ~Y+)Ghɪ̹* G8+D&WQy?,Y"*+6֬XJSM,SN6spKL KD MX l"X2I οYOH e-tFkAye昏sLCk]+ZC^Q!K"U +Ol,55\8kϸ}S>FPUʓ^FED[@ST+?On^\`ENYWo| rF@JB('kw# ;}5e yUe&e%ջ,\V3|xìD 0U#a9z(Ƙs?|`hJhYr5r}m bPdT+"Sć'mFJ ?1 ˘i AN *赦& k}9.8? F|pv"vDij +:]=1!APdJŀ*TxWԺ:fቂ)Рj  ТӦN fJBpVPI֟372d5i~|W ol;/9G]0 )W N kdVyULiZԺnHpjjpU6B$ =hp=)Dhȡiֆ(g;#D)! +a^Z{ǮvH?Mk+FW odzrÕZXc %cCk'RTi"LdR3\Cj + 4CܓW,ePm?9P Wm̦_UhZ]S +6aZh[ocp 0,^Sg{p 9Ctf?VHp6D51DOL$YF;*dT }3l@ G c^c;]_XobfpU ){Ьl4vY#N<ٿ.=~hM*BVGJGJ[TO_7s7XYT]ͲEƀ3ZP{ЬvҫjP3>ؖ,VVq-.dZGsR`cgEuʑE4zA$*a5WVUkPFis]HAb[MhB=4@C%7{QX1.ƽ1Hy_?A!!Z_V&u _ rD՗^jj'$6Zd%ԩShvxK(|~D4g{{!Wm"bfEޥ*uh4TэU/.kzUḳЫa$Al2T+]ًBu"d"v,F6f) %@ f!JVYɏ;S[6cjy6pùs7ԧ>u7n&D$"Wj+[  KM5=U5GrS-dI % QxVcZ/&Md`*OӨZ{o"A5|h,[K&H`DI0%юzdr&?^YeɛT70Ƙd!ۿym|f^Ia26AA$U1Kࡢ =jU^Mw# H?yT81Tj;F^, gf M7`\ 3`]Q3s6a/"R3${-,\B2ZV2R;/wAD3{,90SDtu]$#rI:.k_!"*AbWZHdO! *jA 6]ٱP\M^Vxu .Ug|٣YAd 5`BLW`GJY;衇> ~2eJgG.kFmo;m{N;]yI;nc@7o'[Ϝ9M6}|C:c/]7o?kKIЮ&P F0U噋W%wP!UY?gi C:-E(U، VHۗeɜPv Re JK-MRFT8tvg>o|^x̙3U/K-jNkUu={7{lww&W_UEx}z뭶*y%c8qUW]4iRjcr=1U|Rj〬&aA֐2Ȑ!)J$q%6^5yD]iE"FV{+WX!oE .|Ì b m6#;M.R@UQ%UYMJ="={6F&tuuz믿6^xᬳrΥ&N8nܸ'gϞ2eJ8Jt)L0H.jA iy I)gF1_Wզ/WZPɮ 11Ƣ(.\轏+=* 3B s6N1.W%TG-%5h)t{U-˲j=䓻;`4fD$YU?OՖ[nw?񮮮M7ݴ,ɓ'O<:~-bpp0eU뮻neo}anlΞ={M7p {{{C=tɓ&MN:q 6`Ks1Y}[J4YaTֆWQŋ VY7yWCQ|[B1VI*ʙuœ50}>_NnWWg}L*xSW|~N_ِ&P^Ƨg{ߙyկNkBk%f!uN{>c?7h<ϓL8F  !dY潷v)de12PWWWzVhxs$fs.'q;.d1&}1b[!vKnX ȢcGyw/rXCL" J"/>:L\SĤ&9hd̾;o4Q?V8fvʲ !(\4@zF':x7'?q:Vv-Tgzqz'|u ӜcL+aH+XA_Gaf4[1F5({߭Ch[n@!BjQ4 ZmgNy<#8;x㍓㎈H#009,K%CG~tBP$=Ƙ$ɒ2$K.Ya6%8:)$hjm9Dr/#(H XSm$YVf9QL׿|GxK)U !0sY}}}ʙdFcUGoH!1,c4_O͊oW&ѕ$L6-qNg'=4y1;W\q3<<2B\'RSs=}iL<^YHS .1Ki V|.?CWkr7[6.ഏnW3@hv&;(~6PiZ2g({ڑٳ[ŋ/VuG;:z`뭷r-EQL>zΓӅOac-L䒛,UȍK}$cLmA5hQP"jh-}z7oE5X/򫧂`^v9_`iVGM`oGvﯖ2| Z/EZѫCjQA C m:%۸+|׈i{TA^v`R"%P-'t@֍CYؖ:j*CD zB Hb,UKնH3Qu]>_9gy晻KFcTL%`j W ,HIt&P^mEm4IېRū kZ mA)ZDTZ&C${rf"rh1^K("Q$"}H&T0iMFdT% DTDEH(`ЦhAA$-ѦȐjk1B"RF)C,#́65D$QRɫ >t1Qۊ(T @Ё(·":oa>VDRF1(>h( vYZj)ꓕ?8iIF?\*QĖ//04HAD-u7v PRX( Q ME[ Q͓ ыt ThvkQJ %HT{oG鎛8+j=#%&,^ti%qMLhysӻp>_WS`rs/ϘS1xS:9`x럃Wwe"rk5L,otq ~>W?LmYkؕ+?pLI<_}͵d ^o{̝ X_"w9s8Wk4J8Gv=7@َ;`9j\0=ui)t/՝MO0֒J!P$c2yYK^y5EbS_IG^ԬwgwOvorm2aBR ȊTj:"4⃆mM+rL$cd"Rh8""/<_o[o͆Ygw„2&FI'\5K̘-`GP5`rGހ619&GjK0 KDӠWBAզD("sfKpP;L$ ȁ첉ŕN^[L$%9&2"NDnHDYa"Sǎ(}V;Vs#fzDZ)HKҒ j `,nh-V( @$ks0eМP'I36Z'H97ʾ0y|e+sf5c5lpAdGa%2m&[/Yu5l qf;J-XuߣPP!ZwSKdUR$'1 QZ9lیrLTRE, 8H#gC}h3JR@DEF)љg pgO94hdH`l&Ԁ1GzAXǞpZ}̙,ayxpi#ԗ%gXЃ;!q]vqij@0j:a.˲Fho7gk-Z !mYYAl`%& l;r7P{ek#rdJP5&5Wʡ{vi'`M#xHPS#ӧ?\7VxYs%mPG&Lv;txJ0?Zw1Rk+3_A1cۭ>^k-k[ǘͭ::x|Oey9XGVۗ=]vۂmJ Cɀ06&sSq"Gf`2ǖijSa"2@8'nz?Q)۴*+¥P9}QVM0Y16 XU ep~ $@^+qHPaYDk|1\((#*lz? I>R1L$i7@?6 !Ґ'DHCJD b֚U(**DZqu9j4N)؃$x5ۃyt[9S;% nT@I2_0L<82jzY u4=ڻas™ H9BDI@TT3 C-dkRr)UYA2i]-3pHBSB e ,agy!:˅/]fPK\v=ǎl2A %(Ȑp7}=ws/xQl{B`XKFognmhʈ."+ˈ(;9;Rв16b܆{gvٙ,Z408REe8S̙5{H­:,_3` Rl"eY5SKL])^BcO-߿6[6{{~w|6:Ɂ]zf?~ S@AFfwq֙v?~}g`saY̚9ks/}OP ͝/jc=lm{wQ?߷F./c3Uغ@B5OfJ.u񜹳%JNa9r,:? 7꽷~}Vj99q0yXQbϙ"dI26ԵLlqfD |J@#I jD*@Pɔ SȱD:~!\{̑v>̧dow7 X PU#2%($U (DJ;H ""QPHA5%RPP$Ӡ: 8 YHB%/ $A꓇q4h"G70fRRO&"T-\D2$1P>RV APzP"&Rp dа7DX`2U[wX^DZ~QSRWZO?4Ljzeg ZC B 6DQޗY^|ABȲ6000$QB/27gC5jeL;2Pɱ JFh&2L0tw1e"lBVx-RT C)`n9g eY,D Ww3Q˷_W|wcbDA1yuLdkϟۯ5}3b pk[@Tد.䤟joOws _qEsUf̞#A &r;ngyk!87qrK[7aDk/ۍZ_ %;ࡇ?3%%썵yo˹[nh-d5 wgtR{lFY)仼꫆3Zj|+{kX`0|b?^~`50ۋYMo7Knf͘=r>ȳe]iם(sU;"J/Z=3]]]."5˯2cMWOs{l$ZMWEu/]@_1FųcfD"Zw퉎 ?~MKo4SH Fc?nZ@M `0+ME- ӆ{)]ycn5+PcdMlQ=f/2M}a5Cuw'wԵ7_ye-".;OYי[3?5}}BjmO>.hP~?œg-y ?,}japPYqA|j`\xy0>;w 0PT@E VP *(A X@]bD`AEc,X")"00}n;eセ?f@`~xxf{:~ b7BKrԠU:(Au9,W!sqAi< 8BUBE)i d)C{.b—?"/AjP>RKs߳uŒ3v1}DA @bՌk aIL6@ۊVJd f"CpB B, YR`f2`A3 ݘ´kj&\IKzm 7}QX38'7fz.:0ef^}qH鎛m[yG[TɚD#$|;Оuet*=Ʒ HpgVo__%W$ rKCo穴 {a E2Ǹn淗~Mt]w+R޽)ɵ:QZ ~!\8cC7ݷp+o#*T<ְ A^<~Ա}\7_3+G(v6l rse"Gnyu]w==QUϢ a4u~gy7iHF-.$J ׿:^xen,FUkX+//fԫi N*J BYqK^i*'\5lݾ]:d^3n+>6Sa̛&]?lzƷga7\4jڸxI+o7^}-:WaЪ}y/ޖ5K3Qǵ2$|T򽗞:cڨXnSPw8N=&6N}x^,emB-T|[ +nסID [u9 *jYcGjp!mMgv<$՝F/L00D#pd1P}~{j[5hU+ x+L'ߙw4:35_}TrGZ0G5L?D!pw|k, R|O'wvc]F1&m7ٍ~ amFX~umPh)̳гXN&޺dd v;#?z%w€;A$m%5m$ݚ1F 7I_`F@`> $&f  H2b*yJtm3V^[[V *1 ,fI 3Ro/p3Ӈe+*Z4ḩmUKW/!M~ x= |ok[J/= _W=\V4~+A=bGu*20RkP\ 7ih) IDAT}߱`+5?[g'6tʾ] KFNH>ٽv ɞx[S-\> rT؎7 ZGsr|rOyVߴuOU~]_ E46hW6, }6kvՏ*NگϩHC P^+G[ʜ :uSe]UJr ŵV +/F~ SߜM^y=1#c.Ig-){|kgςRք.oRM& 5K]("4xСm.&ղiBjT]ˏ=rVG}Dƪ`*ORJzQP5CD{b"* _ܰG?TK107KnUn7l;hLxijs/;b{q`&O' SCAGկ;+ |W^sBN=%R3;|ghHnW\r '@ q&"ٷ>G WnJo 'N<ܸ徸xߡU[k`D Xzy+cۧvz{[h;~]cOWFc9'_/=@8|OtC-!=a`ֽG~zKO (hSU֌u}:nl8ӈ9r>~GC dJ2 ְsX * Ps5˽m=O;w۾=@x\MQiDSO.2 bhH'Nr*p@-cb^]^oE/$ꫮd44Fz͚7_}Kzwi|Ō?ΊiT7`[̎rh`!gA]0mrƏk.S> ak߿I+Գh,۪(x)9h)-j8c(ѽ{{)},+,p倐NU5ӌ;9N460 %Ѳt5S ]Wk\z;1T'9X3%*w?VWGcozq/.^7cvgo,`yE`; B;i% ,Էv뷷džڭXoTer9Hv$DlҲYrJADYƘ]ǟT "ZІ:!kt_S+px0]ө*sbv#Q/ 3>ȧ}mnżY^֡& h8#nt|+m/;t3pә))^>_N=(/)[NHVaY\\xA>zA:vD7n<ަ[ZXt =o(=v֬Ykc6')_٘HuI'(~K8%[ km f[JBXy1i4 @z>x7׾%D<v^P)a%^XPP?ǟ~bT RZZAy?JXcv^D|@V]]]]]m2̴iN>x<~^r%t?F({pG;tPVVvw8KGz Z?䓦^_c)J/]TJK-Jg2f8}ɤ+Vhg]QQQTX#|ͭZ}AXBr>EEEpu]G]hѶm*VZK.t RgϞ7xUВן}/r cƌ>,m;{ʕ+}ZAءCH4c% L&~jꙧm9r#}GozG[ ꯛq-X8F_*h79c>gjx9WLRJ8cS!x-ʂX˫.؜sUEe?]/ngӃU" Afu҅:3AT͛7 ! FBO<R6lk>@RfA@ӦN:nHDkEеh8=g˲8a豏?1s-i g\3JqqLO)3}o z衇vܭycmah ^uzg,YdAyyyeKc/ℋ'C KPg&Q`֭Zc=&8?o_?~<x ,6s̒%K J?s.{^`N:7%>S@ə:u* 644̙3qu<'Fm^ڲŋSnYg|̟"''ฮZJI8N1u<7oޓO>]}w(4g6kd2I<׶킂ի"?k obdٗMdTma*KmZ6N(5F۶mo*6mZ}}}*y0cݴiٳ۷opab1ޓRΞ=;f̘իW_XeYUUU=zp]wݺud1F/䒓N: ;466T!DC- !<3}vX5袋|oժh4ZWWgacH䨣>D"wqǀࠃ2̭ZUUur Rm;|MЎMs7g2xB(<^ 2IxF7o|$2ܟ,3)? V?H4hP۶m 0^JImG&),,S֭[dz QwEUWW[ndE8QnYV:U߿?}h 'pӦg mϏbeO}5kL]cclٲeĎ>裝_~۶mBR୷ڸqb} F9IjڶM])uGe2JKKVݺu+))9?0="tMa666555=ܣ>Jw{'~ t3tرsQgŋk׮4BH$2`~qX,D!q$b2 N:H$?.rrrFiD5u8Lx|'LիW !믷o߾HCYu͚5y^zd2GohiΕJ_Ia ۶Ǚ9s&YA5Jk=|zyX]]mX>h6i]t6838E}vDk.]J*++㼡3$xǓ]8E 8UlRʩS"NϟO~Htyg@:,:3ۅڵ<2O;R2ִ$Ȑ2MSD'ͳAjihh@Dr#I*_~IL&lG… <@z1 ،Uꫯ"y;rYi}d2;uD M5_nŻﭼ?-]? i^\ɾpڙ[4>$ld3|t#FXk+s-..&cYˍF F_#ҥK6O4[C?NSvWkb…~y#acW^J%0xS}jR/]v͖R>:s̝;s +Vشi 4觟~bmڴ!@JyI'RI15Ϛ7oeY7o?ψغus|}L⨣#_MիofR;uעW;蠃.\X___WWC٨ 뺩T裏^dɬY:2褧Re˖#]Rkر#- z.//?꫆>:< ̟?_kyӗf…3E/CƄ^yrC ?o<"즮z`ڜCV{$cr0  IړNEe^$AHںqp HjY͈"h1JR+z"zArЯ83:.X!C-Yfivf ?XBY؍: Cu볽.p&Mjnd@Ntx>Z"Vx?~ܲ,(eW@-W~̓(Mo^{ͥ8뺎{9iՄOWXvmͲ4k֬}ܸڴil2c{.ӧ8 }WnT3Jmm#?#06ӥ;Ud.s8W3)1fkɽF=2Z)#i0"bMMڵkc[=z4ehlڴsyFg͚EpʕdmnZ]]Mh۶m}}R[[bŊD9u+|[ZBĄ ֭)S'uN0aQΞx :_)2TQQѮ]^zz %uvt@trw|z1c>l;N:dRk=f:2K/DKtޝK.g}F);v$o'gZN=ZSߌ>}P1srrI&Q 묑N=;s(,..N$8jԨ0 g̘1|ѣG=O^ZZjY֌3n6j_QQA)o[XX8{Ν;Sڴ`3fah%\B򌬖  B_ݻ7I;Wi(mgfi~ />u׮]i*iOPT0!m:묳cgA(wLÅj>䓍O)B9p@l8at%-^IIADl=1JZqx#GCHJqGJ)E&M"o?b4_~9}2}1BV*@e!D$|Jv YxhJsM ʛw]sFI+ʴHGh4'OĉUIal# r-3pZi/X,Ftlh:ټysvF1f М_}՝ڵMk$֜ق@QQ)%D"?QRck"xs!D:N4)p f(R75̨;c@ @Rv,1ٰeلe)E2.Gn&߲v1$ۅ aLRøqL$E)_^v1 &+Rv~ll h(,VuBKK-Xl/4M!f6[o6זe={RjƍO=+++9sfMM }pyٳg^"U1rΫGuw~䠇vEK뮻:t@;wnEEm_~m~ɡjE)eaa!@ϧ欪6 xںj׵B0 h/6ނT*-555cǎJV4eX><_~zʆ ֯_O^SuV9 IPL3c1TCDt9L&C<(\s!vښBb}O-r!_2jܪyyyڵ!a&~7Y9d22",Gۖug^b2DԌ{6D"# (ʅuٲedb1BxM>09 v7vyy{8Y-T Edmۖ& y$i A{dc$ICyf[RhtéS>RߦhƻeYVNNNcc#٩ORJQ1 ep8(!Abj{[|Ѹ)A,4'V Q1su0N?׻a TrjHT a+$aIqnKvwCw8WLZy>aR3vYweUR ?n{5ݯ#Զea}Jo.n`݉.@!W5sޔŇ'O,+t)770]s5WO s9(;RO)*ZS)'.o)+--.(i`SAL㠃"|2iӆJw)! c=$Pa8`h4zꩧ[gdΝ;+KMr0;<{x۱(,ر㡇`)L*ƔYdDŽ$v.iiZk ڙTWTZJ /|'9HZS1΂0ڟ 2Ӏ>"f2iLI1 -Bv0y"Z#b2&ؐVQ[1>bYJcj jJbFPW D,]v;CU֛%'ܺuw}gLצD3˖-馛zIw3zA\f2/rرzjv׬Ycu illTJQjQD ZٳgCϟ/"R矏B } u:4i""f (͔3 PyA2(--Eą j){ }F1*J'j2#h(JA *Q+/ e(Z){9tD #9gR#FG0[2ׂ;)Y,(t "(x\2 \< W CP"jT|޻woQaJ9煅 'Oxw]M6-QK(6]tlh:Aw8ȧHfu,3q` vY} `p EvΒ-*c/,y`T/fsT᱇,@S!wJ/@P!:PEc؃\h⃆Apmr5,8jƐqVZSs4ٗۍ3ާ]lۋ$ f1Y& ? jѷ~[YYI= +l}yg RXXغuk!#BJb Lj- w&&NIdV62h<Ó&M6.ͳgr7h5{/@2>퇌Id<,9[ D5G3sr;v}`۾\tc6XQ&{.C# 4c܋+@30~0wsB(!4ٍBMИd Azr]{-vUWA3kBs$ Cm WK=3A-){mssp>q.+.-9 b I/[vl/b39@-w2K"#eVW_qdG_h9(P0Fvz԰Ir+;;ߝpo}Q "rJz!rv_PP0qD7}իW_|7x-BLBO<1//sټyv,^O~;vF@ o߾L5NTd)=g7eJsh-A% FڊQht\rÞfmhd:^4_pcJ{wKFuP=e&=7Ѿ)qjWYNUoY_k1 $dH;cL"@AW Z՛g#w77Ν;w%HdM6Rn~#GF|;t`,9BǶ,P[eTE"ȀۍlnaNuR25a{h-[p!_O.S@(3&Y%` 0Z^{/v2}yx]UasN-@( 2]e\FD hE"DeTRBI9{J6@m$I}xx3u7/su%{PPqBKC-S|͒GYTOz3ЉOAt)7Z鑘,b SJ54Mc+<Gmoo~1XX&ڿ¢!_ӑ՜sJW-w;sucIbeAH+2R{!0f?}E q%ah܄ğ aAV~!&ag|sgoBuP~M_{r0lb+iJeܹq)i$Ii\{[1cfΜI'^/SL:u;$I^W ljcYkb!x>E:\%ކDHjd bhZ; ϊh^bHX@Q"b갃9 M`M0mEXeCaBEz2o}h2Dc^|ű;^(tmI'pB=N0!R3G}#?=0ʝA}jO 2{^ȅfZ\^H)%JUb0$ɪMf<;:WX[YM* nPS]sVucx@ǥ;T{o]*IbG)R,b\.(=~/N: 1ZQ(@\0Rc"^(ͮxt6)+,J -/?mė,>4t IDAT;ԣAvY.@"wvEHdEoSx$ (*8p1>`ԨQ0j;E 9蠃b3O>o|Qot[ne„ cƌ9/҂W7Mӂ J/$cmc#2yMm A<ėƫdk/dך5&lFjݫ.J%W ΖĠCێ0?ղ FHA+&t]Γ/{6u?)SXjl"Cz4M񬏆$0wʪh u]w30n8ko<û=tN;mfS)UK:b"N}9fZeRx꫅N[C_ ,F$KjA i$Ჺѿ,@U/D" ^thzl\aQwlt]uJPRZs-~mr?!Z sR|}]ƭߚ!9K$JqPMUΛ7M8D!{ϙ3sҤI̙8;w?ϣO**4<^)S<7}ݱ/RΑ/|apj (a@>$BKr]W0b}diSV kTFa|e6ސI1"J0]%H*8mL; 5֭^]Hr 7!DhȬf%"Dw2GWP,Alm*kܹs ־mPVV+z+ ]wݵZFCXn1+»8UTb^1~ؑQbl  !O_z~2N@%P%H9$C@߇Eݹ4CP}MGDK )kv䬧 ΤC{82 \FE7(*>uP!gApR;/J2z~Df)O;iF֌V)u5vg!uYY*E#51bE,FZ낷 r !tww#}UN2&BMkd@J6O׹hV`X(#d#kJSIΞv. ҁ0u z IH oY@lE ͈w H b(q.v5V GpGdE/N\WWE] 6`#8"W?CZ;GJ ٳ#BdkL*\kByZ!hQp%x"Z O E04Ȍe3 -3J4+ 97E̮İڦMnLMq7'#+Ĵ`4]x@lTwT#0'ys tC=t5y=H)^{_yȂo{m)r+jc}EF+2yi$Q)/_<|6J0Gٔto Ě}P2aP\2*bſ=3$h%@0V"|pؔrf+Uf~IIfRvp""X$ 0ATX  0>Fxmmm_|Yg͝s'pu]cYr"׿l6#[.F/})j]w<(B)17"rxQ8_ToBHsFb ED"S Ym+_PQD `mv$45揲2ԭ [鰌_|gǛQ՛q+eިrj3:λ l ]_i1 YZw M4L ,]= @`a b-Gm+]վƱoZ-S-|o)0N!$IrA9RV)uWhǏP!ZVUo*A9"XX B ~QMXNQpb'M;s.7&ΡGUB%7!Ki`^h3šPǟqFokO\轮9ixf+&Z|_%B {9;Ply7&ԛ¿)k$ qGg/+RxMce=ZYk1cSCZk"z^0-Y$LҥKRQ=@^{-6DSgYbEWX?(dkm4#G0|He?{%h4$BdHW饿/\X_/~;oM\$@+d5#=q`ٜ>}z"̼[?L!6hv3l={0v.{!cm#*:iӦeYOLD~;.>ON4) 63hmm]|yl=w\˖-o_vv-Zhw/ҡ2%sgA|]f,²ՆGȊ ם.Ҹ> ]98w>x\3"q?0=w^\QN9կ~5Zx6`\㚉O2%̮(My\xc=˖-O齏azш D,w>HC$d¡>؎% ̚!_6UI!jbXJJ nN;m 7b5\p͛w?c8C=y͝;wƌ[bEzEmqt$)2x9Q(` U9syƍi~瞻&;6&O:G}t1kx#!㏯ZW\qtOsڰw‰:2Z($:Gw탲 xy][;|g%ϴ'LJDC3}1TZ#š^4Mx:(JҗbΜ9˗/O$v[D Hޝscǎo9s[[[(e@AP?(xf! J~Խ@L@" ;2hϡ3?VM2lǍWcb'~ә3ghܸqrȴi6xBo?䓯ڍ6誫O=~h.hbi޼yJ%G>"bYk">쮻 O9緶)h\9"V?16۴]uUkv<^sn~=[\B@d'=tL;6BV=-_5#Ʊ'm?z(J1B@ I}BO0)!BK  )&C),dDVo4Hpy6EA?Fq)TXƍ'"=б[ԽDOO|wW^^~Y]w]{{{GGGߗ'>?wKD,[lYKKKb".\o[QHO|{Wyڴigώ_gvmo6DhѢVE}v?!W4,xJW=w,!3ɜ.'kO[WDuAϾ΋;b)hb0vcOE$6 D+y;{B 8>PciJ܇y[bE<묳^~~GuT L2cƌSO=u=[ccͱS4Hkn I?}LJL=utaP@%"$KVh~yx+ecǼ1椓NBLW!8ib!ыz#{`!շBV|zوePjh-@;X u2Tɵѿԡ@෯Մj.@ pg}`ez"XBp2\bz{|g)Ɓc[{^so=_\TQ*⛕暟-"Z)Ν7d? Xkb(շ/nA b=rՙHK(rvE+Nտ" /칟tg "]|ai~#/Vʥ 5E pop]w]/NqQx#JTOb >7JxY5ՈsɓיE$Lʈ Ө{L3J㷽2>v]Y)-[6qDN;twof ,|ıUרw&{-/ȀwcF|Э "g 0EDjز~LMD) xV*gsVg_#/jL(€\/RFE7TO jA=hPӢI$Qy 2{i6Mkm$<\ޯz1+QbFAp`(㠈ȃid{ScOVXO+B~0rKXd eە| o,~nm*Gco4,^5wLr3;aBnҹX%v(iJe]v5"n̟u]J; .8餓$Ula]vJHŨ}(dA` %p:sf [h*^؞H.u=+ YV&oU(o^< (a:ѨYof+;,dE"Hѣ-[dɒ^z)vBګ`]u`go%2VoNY@ ^scT[e'aS?! P jO:}c}3AҴ}m^Vz۾ouSf7)#|H`M^aZ2JFP#4B a(IKrx9Vj~dWX J ƍU$I$1<vXyJQQ>ub  !R=%@ffT\ \ TGAm44*ݯڝ :WU&.wٔj&JEk}_fBoZ#s=c뛆%JhN[T92 0 4)E!6V {"o~yK .UZ3uIH1mϳ̔`z<>1+W %J‚ ,~s1/Z? +GH")ϯbp IeCZr uj.Q0(UY@J vVVDYk> G RDϏx }!'' R$5~!@7Quh8 qHiJ j d}ݝxY-[Byw\lAZ4TfVJi`EŨnĉƍCW8'psD;qtP @09sQX(r?ԗr^DZk.q4W(VƄ) IDATSMt.L胗s+^w/IU- P ad$YXԟsn=*C$If͚h4*Jsהwn=Z GkPRz-oIB숋1]r3)- Pn<{`x/etc yV}j 9 (a0"Z%14Dh@+As%FzSmc&hcŠl؋ `.GފrA0eU=ɾ|WhVd>c˭TB[6ż?yBe) 1BT(y>5-hww?\UjA4w.XP; ɐ.%bzWh(""fqRLZc*d/HȊ$@1H[OI[JTe.$V J` .of*i^KVCK3}X ,鯷]Mx::j Pޥ/{sY24<|>t–/^\Fgl_l*F3(P]֑kw&@d[ Ai#&vcl۾gM|/ΒVoU+* %DaQdž eDݴl>]`^5kLWki۝q׿.%lR|EJACٲ?!,8VncȽIl[Uf.g6)(%i8 b$52к:XU#]_m09(wѯ @}N+doZ,"Q+Uy~IBoGeYZEo9ޗ J$yѣGǐ7)M&M W!"%x`4|uAGUn'aD̓4U:2d<i i*yzK LYb A-p}B`% `pSPֺlV`1RwݬYƎ^^k eK6 bYku Qi"1svTFa|g6%Q6Ctޕh?pAU;c>wW]B !dYO7tvv5k2 e@#罢8Pq9kI;~615@DD5B)Aڇ !/_&si%Jxemծn;s5d9t9mv0S*$ j꽏,xO-v@21I',ylIԟH_>{>`N0G)Fߘz> [Xҁ e '!5cdyHB++MLdhDCQ,h~ɷRhkk{}k*`*bJދppl2\E%i!jZrmPF>sܠeRQfBKODd sL(:*x! 1 @Ϗ\'|2z[Jj5 dURbMK^Τ >( =!jrmpntʨ̔}%%NAe+Un=U&3OqMVRa!&gWjZ9梘Fb ED"S Ym+_PQD `!- F'2Խv yiJ *[ak8KL>::a2j=~R7ȸ톛ˉœfjBkb/ :+̆!:#v8KMzÿ $>ȵdd9 (sH-/7pCVVJ5|ףF˦D\fEu؄B#B$L;cQ@&*IK '+o,:'(ESY&*oRJEV^KƥJ!9Hy@|j|ϳD-WA\[[3;a|ny;|DЖbҁXxe;HX9,Qb5TcG3| jP ifD{Xl6=1_"C?]b–3 !^D] $pFKjbVC(BV;NY@ NJp7ʲOq!Sa(K8$դzzG*ϚB;8e=TuqPVHYt+Dc?~ɒ%qyeݫD=yuGJPPXj^$ %IG/!* %.EN#w=瀌5&@,$ ~fs\Oph4\pAZ[^%Jc;*rOHA9@j`;q_YV]|`K܆A9ZrxTEMل"Փ3'P5jGx},vgl6191֚ˋ\)%͜@I4dp5-S(k[bP֫%hYՍmy1X$7nvW;$XqaL?"0Aú֜rn'8{bU)}Ih#Nq)B?([~gZ  DkJio?M7y-w/Sh,m2T;O"fRZ6H>.Y09^ ^2uQ79 Œ҂ˆ{"D91[?7iIRi.G㪝wgIgW?&_]>oCU,<5ƒk)M-=1ƹ븠Dm[#(y[9EdK;n [#7AGeʔ3ڻ}Gu2Ϲ=S$aik X(3'޷zˉq~# V3#RPmlc@ @PЍTꔢ&ߑx;Ғ*X[y)Oki+zוϾt5tgҋwKN,9|)0Y=Gr?@.m~BCs(dݼ>ϱHzX"0GJb kQ^aIHGB6剞wtX%KHɼDќّ4c8ǃ5Hhk+-wS8Λcd#&{浯Y_G7$w[tWo@6W>ѿp/($*te8 &h?JurUL{j }y^0iнST3#FfIzT 8*]ys^]*RE?Uo{?8.Te_Nַջ^/Cn+<!C-ofuD)tZFKߙ =%uekF2aY_ohzS"u)85|\:; _47ZNh-$&D4A SR9}2MLڷ=>o:w IDAT]4|w۳Wk=~+Wgә0p}GL(LIݭU+;|s>'沞 /ŗ|j 2wuoP0![#>УmV\篁+HD@Ø ^E{< sDcԀ8(@W^}D"DcyfDGsY{X?@6[NKh*D{C-.]Ѯ3~& ", LƵV9#=*C & Whѷz`9Ћ7w{SS6+zo :\#FkVUEdI:=jJY ~}3$,32FbF|-]*5h&>&SyMG5b5CGH察٤P9<+;ɋI&3xm' uw$2nuЉيٗz0:P1(Ӏ\xwA/wC]=#ٴHhmE\KOmx0wYL=#dsGBb;^o`]dݻ|߱AeOIR"b(b] *$XeĈEa/AkU|#y !"moJ :'5d̰0bNz%%)"e_\Ђ) zh?@Ęy:cdMw= vl{NӡA˿߭1U#FV y76tӵrY<^/;&F$Z$ӟ彪 ~7 'vwX?o_gYq+a@2f(|nV\Av|M$ 2l#A-yo/Iń#$pvK*FbX TcsoZ%&ŸiBW\yŕW^睿w߾Eoz~'HpafIQ!= "[ c yD14wsFT",5P s "R.Y\G@ 6I><3,hwN"XNz&I+"*',P}T0=N!äG>8p&I2bFwZ @rNY$PKa$,N $$XçX&I /?d&Il'Y$I;$#QIiw(AB2d+[~vM&?|G*KjRWOטLj.oj6 msmʭ&M*qewoN-vM;aYђ5qI2~8;C[1+E(ox#*`(u/1o{CVvx37Rzðz B g 5@Vv~D$*Ɛ 'n'`r 5IW*#5 U DplL"3rEH#"`-(@PQ)C'v @0 6JT%'r&X:nL.IHD#&! ђdl8 E@ 6 $DP]H a0NpzI.Ne /I" 8AAr#W ntA,I@!V j0*[H1(@<@ eK.tل|ԵhKNhN@Jj[o&S qA NRntpd+IpCn (FВђ2y]ڦ3"\C/TTʱqIH!C' C P6;?N1*F%&MCÂMK h"pA0 SA|}'-F!xb<1ԬW_7{'?~7Ae1jus:`.oI $~fyX1!{ 0B6׭24t! EE`m( +,a(̑d9Rq/"GQ[,U# [j :t=5$u9a@eH"ц:Akd:#U, $ 09*@PI>LÛ6d$$I4 2 CP!o4! j7HU<[H$ q҃E)+Mb8 [L Ddvg>ݛ:pGZhjatV$7Х en1%.{[<uf 6 vccc 5b缞 E/jH#J*]`8#n>◼/~Q*J!\[em<\=3 z@&8<#@6 Lbx=l6nRZ}NC̐527NHN U1Mh($C"CH=@r3zl y@ w]&$Yc3 D!F$$sŰv yH bȆ>4-C-9ÒL @ cKH+(scvI  bpV @K2Pa m a$:dTPDpŌI ))vf+N;$P8drJU  Ѵ''$$@Σ#MHnl$CzI@Kn2xK; ;w—vN,L,F_|z8 R#.1;!E|O|9!A D ߿VX#,Í[ŸI"%*%~}ܫ bgvp̥6 NxM@HvNVPl>`EcsoO'kݴI:\ٵ>O|kz ѿ|djsI3y+T=yܵϽZ- @q;n{v~Mb"djl +v|+^Tov_?ص^4Rކ#AJ|f~_[M[A Uφ,{{՟5Ys=Ia pbK"&k߹XO5,Rl+y~wv[AW ~WO[JyQ:H 3N5 53AjƑL~ \oY\?#_tk$!.w=>>5F6{~7 ا^ܠG( E r .ǽ=o~3Z+1oBZq%_ޝ^36=;lQ*-gWǽ bb?^l}ъnOfȞ좻|oKtO<77qŮw4oaO|/WKNg\ѭዟo;ܵ?ŷ֧Ӟ4I$K;`~F'ݟwDr]tw>b"JdNv*.%!l2i?;ݶ|fߋZDQy6$*vMWtg#_zO^cH#!o<b|գ~ӺZX ;Wg<ۿ~x'=crY}}~Hb|7\C׿5OֱOyW^3՚Xlc\v\}iekMNr16@rC>;gy_xd1Y?];Wv^gg>;c\MLM]?J[N|K^q,b|:}(?xEwn#w]w/xc+Ft4^^O97߿me^aO?=609aa )0-l -O; v9vCgVRj=Mj&];sHFXQ,XwNTL7%*J[m kśޅpK*/Ckԅ4l=dAR8$c8Y-sР#犉pf8C>vUuU"[DP*4HљtGm7+}(0僯;4l:1dpdhIR}2]4d1N-JdC +5@WD*Bf(VeeچHm#s2JX4u@>i8DS\f5,ɰXCn1EbӴ8krY~θw)myX)Jd¬xbV]xa}fW!ջz+2,&kޤupOHRY8ھ"E}H5(Cd%}k< 飙h޳lF&4/֘1'jiCvXsͽ15H9,@bE԰'ƁV1 z~o)Dzg]Lh1<Q4 ѽŨ5CX#bd3YhЈzzsHPbȭ_;w,vq;ɅET 5ZG#Sz(I;rG7qR+D>T"$)vE&[$Y!43lFi⋔Նnp^e8;Z*bʾtӜmb@DDP 4"ʼr4tW Cn KY"H"XZs#}Jt.j=@ypQ5TSV+mJ%#.XPeMBN}P=*]>DXuY&LD (9!fFVHٙbJK"^/ʮϚlcR {,.e= ɠjqSw)aŸ$-S y|byUlF0CI2h@vTE[chak"F 9E$Pt57,hHrM!-)pѭ4L8 F+5OIL̥s jxET[FzLt6f{wpW\4I nFI ढ5YxeTswRJ$;XP:XiK`J9d ^A4b(0յr^A߄%L2TeMӬu#Ӭ6Q9@Х/Hh5#*ЀOLi)8@&ZbED- &]-d[IYYKdwhVQe!P\",Dˮ$I(B YSף8U}6VrXMWMlZU %PR鑚]45&Ei,*H"kk$$ۦ7"o%g a5լ}4dLvXZd,>1>8Y$ hYD3tM$ғ䢾œ"Њ6 F Lkk YlD.9w۝7ter@: ]cI%-()GI)>_k1F15ё6Ęe)F?X ΅h0d )YLQ#֖qbbc#вf1 F9Ũ^'ccB$Fқ\b Y*=#{( jD%&F)v`roJ?y<!7Uule5A_IX&w7$9Q|*"5bRDLyksbM@ jNBh*r4)43X RN0z2Z $" zԜDhhSR! i!1рNLQs7.Ě[.bI*p&W3k!Gn2F!APOXrIBSШ5(h $@*4df)MhR^! b =\Q;UQ+SP!Z먊Jc%r n/}Iعʆ J19N̄ҒL(<׉_/Y1n_Ecw䉡M{XZ!ƊN¼nk>\Z;q{8F['my;2p_̬챵E_pUkcMS s[s<3۾# $#g=#|?8Y8 n) dtJbuE[fdk+s7Au (' J @6\ ; yCt?'Ok!K±툓y^]ݷ> l122~x$=ߋ7&B },MyvCw<׭4)0Gc"4./F:p}[ukڋmͩ>;{'*P`zUc8̽0A9[n@:@GkR!(8׻a])4Au^jgsN&0 J:3(-ֽA5 -BIGҸ5$$c{65o<3O_Y&U,\[Q&B 5G1cDme9F#AaX; ju J"Nkګo&b/-2B84W;}Iv^G [O[~(o *z5Tw(7_&*jgPQo6<٫u ? [t8F^p(o* k]=)mp#v#Ⳇ2N`'g]oo!N yyUyıR_w}z鳒UĆr;5R3a |#3+v5DlgvĔ<;qEg=l6fE(|lVaXf\Q, 8{;p&{}N$H6Z8@j?Jwf#8;2.FƩtoAu! CLw^K{@#M)sP'6dqO5 m'f>+-45b7m$HG5fpdbfȈS,U OF<q/`ct;=8s !$;hC\(> kbX*o@B^#Nak*S.fEE rR*KF{u~}}]^~A`B9J%='Ey7ﳬxҐ#ߔs'm idA #Su^N /U/gq5dF0UܾtIQr'{@!#N~&HH:WٹZm^chAl|y}rT <,. $}IO$ȸ9i)b~o-lLg0k7ڤrfSCBm{ioG)"21._CŔml%K wFXF9ղ2 swaTIENDB`stimfit-0.17.1/doc/sphinx/manual/images/batchanalysis.png000077500000000000000000000271041517235503400234260ustar00rootroot00000000000000PNG  IHDRssBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxwxTn$@$B" z*!^riұخJAPłpHoiL!!f)NMM{yvs̼93p=o "+[ f$.ЌDChh@w~󹻓ԸŸs;zk(2(֮C.]1nF0l HV`e<~s 躱( '8y(zrL1lYTYv2 & 1vGJȭ /V!!!~ F$2-'<b$P,FUn4[}WbJ-`jZ٨xfȯzv-;f(;-:!f!43"jnY3֌le |rBU2$g";XV+O jMCr8)Ia_8i#]bXWMɵ5z:*š3V.˒?|.MDBk_忟 |K"S«iNZɃ1 3w?9bE16™ì˲pQ:UV4" &=,#Lzf2| 9*T#;{Q+Y`~Ri9WXz'eo9.^t+C\W$r)(rlQfM[Na~(|jQjb6%+HMfjyZ!!J<&R 6I۷&}GdcjX=g5mr\n;8">S~r'Q+蘌;ڦ<ª+o+f1ژP*ӕ:xL\k5zt~eȈ3Rѥ9{>㖽HХYcZ #i[\^3ud_>!!}q׬u c4yq|S5EuFJF"{eo>at}eqݚlY I42l_a%'?^_eYTQH2ΰTs6M0궠ޖw>K;0kHz55c62`01z63c68RڅՑi$>-9j!Yj;϶CԌqFdkb]I\1{t:k?kaW*7X0 .q1,l+Ӧ Fwެ!&&TAil p0IJ5qsdHfD_9{t-XK T\cςi1OA D8N摥RVZɤ;CߔASi* " '^c&&nmYh`k1-C^FK{]#1eR^R Fp%•MD&y}vǓEfTAA5t;2t:]ϋbqWf|Z\ٍ?d!ܰl_¸$ [J7b˜(j^ϋY.jRJ\} 7X;*P\僎na%7 .<^[? 4q?+V2G%+U>|~9;aSUEZTߚ$ U~z:s^7I5Zqߘ!wF1ud_ӂ7ެ ,AMgCJV16ȗ:]RoƋL60xY΄pg3Fu%o cH.YN[9r8G/ӵ 5w4 \Oۭ/|~J=MK5ٲrhdQYQ$WQQ!t:gˆ<#nIs)QQCV*oHs)Q Љ:JkܜshFQmy\5#Ѩ>BdFrLCz"Y[- xH-=-A_#FόhFq!#qz3vQATHsڃF"dEƽ:bU><>>{oIՙ kn y&9{Nġ'ulM6 6 a"UA^}X^H;3 {[;Šofva#1~㰪c0jJPY!ESq}i)L /Bi&!8{MyyJ!*<2UI?_oc<*&QIfo{+&QU@Uɿ 7Ga]X5{~0bۣ 4H'GIjsYգ 4c/ 1vMo/FW?P{^^$9FCFߖgyJs,-gV|Ť}ύ2l`YGRQT'"[F^g8zbڦX#QrB6a3|1ox$-*WWڳf :sb<ۚ+?g>/7-EO9v{MĿjk4uE!rvAר0*H2l_\ orwRN"95C>s+u"ڦ挪19@p͌g"cvO1("3B%Q$B38BS哩Lot-Kw%l=O5fOT'cl0Yp̊pXu Xt_P@aM}n΅D6>1K5cA>oǸ\ǘg1?<qKhm|ͭpQOP /..$Ї΍ &]B(HĬ4[; Ю3tf"qyo oD/AATIBδnٚE͕xIۧhuhxPէf?ZsSx`o|OFI;MS 13¸h5}H>__۳wq;y=!zվƪc M$<<.v2Z-љUfJGZ}-tkV34r8Sqy1x[aŶ (,/?96fO7d+yYfM_k y>D6Oқ}#isjV^+.[lnyĥ>_{~!Ctw.z7~-|}>;Ҩ&lݫq)( "g7RZ݇n8ֳ.y(ih or'>MD67% TU:NQO-'ո%Exj zյv 4#pf$.ЌDPYN+drU,;coeP!3Nysu}E (3_avDjDsc,Ϭ~Zv244? =ٛ'V@bkkje%{&peQ[cb {Yv҄p ,W㮦pgL˾Kqkmp(;-2?y̘-;#d;xf3u1,J Tk$MD3 ›5lܬ7|bγm55cn܃'Y)R\99g6Yzdh@S>Y26fҿuNc|*ڼm_lۯ7[a6f+~m_nrZlXYǤT$E1|+wmV~&nlJ4GccIUSWf|}BiJʇSIMhpV^P'=UN5|qڅBek+"BrrA^G2W -!A|ȲsnI,ynHJ@>#3sEbbbrÕ/>ƛ[pXʮ9h-AFMDsc#I4Upm!ID>z(\}|-*BrrChoO^L@oxSN<:_ƞ3˓y^!9r-_ oŚ+H8F̥7dnԌm>؏fZ,wʊ";lnn@@ > 3zC\wS!F 0រ2.}i>x*ǫFQCۉ:~}6B<9j}GIgV3D)vstzF4#ѨWC86Q5#Ѩrs Q,(ٛQ'{Bq:V[*U0z{WDeBjc:Ƿ8ՙG{[焰q̞5T+ IҲ]gO%NQ7on%HR>n$b,iFr P^jI`NGEҺmR9Yf4SQNES7%*lq!U)$=^4Nw6qhhlTFC3 hFH44\ 4#pf$.ЌDChhmEnҕQ.\MÕf$ qzRR]z[@ZiC%N{(b$6[gOEӸY+{c_[_i]aj"bLˏ+u&4{7IfI;HI9qGs- suCP\U,Z-Yk$X(Y9+m աIP j>8'q}zLS*GYk#h!$EUEUAi7q*U>Wһ[D}aw/K=}A!fB9h`4Q۷iֹ%bw?&S*,9v] $YὯ0UIEtEw0glJһ{Dr oYΜaߐGءuCt 5:t:A2SP3RPdECVԩ_C !hpw]%PUFRWiZ&(txk%@ J3Dn"K"JA%y͂ ~!:( D 7Y(1:tܔ/LիEQeCNO2;vwwo Y CU@4]UCI[Rf&z/B=y=AHgNCAԁN/lg**^9oN4 n;E< J"rjpww>| {yAu$d$E@V 9⼶N)ZwS@ IDAT8w7Xlp1W/1}''1.ٔsH>ƭ~k{fDne֘oڜMZa@ƪT[˩z%UU)Wn'$^}Or4  n]:Y"F K&iؤ-=ΆcqRO3֕I;)#:waR#_dEAUt^^9ox`4 _FoPUN=##S@NI ˾Gl 5:jz:Q ӫ=b3 7v)'~c8|Dn"+H']kiɯiшGz@o⽰Yt/Cyz%GmE+WKyet_ldR+Rr>e5+$c$,dt(|&otT0jفikm#6n|!뫣P5;X7yq=I^Ǥ 3)^Ԡmd{vo 6uł/30X }n kƞu?>MEL,5E_"V]Sudư/b>4,o- kMYXTPT$"߸G^1o4Ԥ&8z:/xtxE| HLIGD1t5=KVc{zK5S>c8×+N|3G<6RJSG Gf&I "YPEQQd9!!Fl UHS!ǣȠ(YDcg`{+kW?MEU9d"#{O#Nh8|3#zDɦM<^e5].d2%{M2w]u"l͂y;h\3WPK)D_IԕN$sj \D".h!zPUܨtg)×~bх lqϤ 32R[UԖg[}Cinli&GzFf/ PP3"+r{ڔl:6wi7ȗ]?۪?-Y|h=m Ø3P5Q(2ܑTg =4:mм53[ G܋l4 URսk<iS $•;x%K ,bW=<Vc<>3ֆ# ߽3S(#pz~Cq-zMgE] [e #!߈MH$4(0S=L k :5mhXt,7L^ݴ=ɼ4 +u}/yt|,|QG3sՕ*"}7y3N$N0rWkװO|Pkq΁Ŀc:|x 5kcA~nϻXV d j6H'?Ap 7a7 [\{̗N/~Ȍ%x@}zn1oD?OxݜJQg9N+,mPB|?GRrnEWn-B7Ҡь>z>w ޝ;QOU2̴=nxB:YQ)>:*4_#kjAAe v* 퓘L&eBo0`4IjؐK8ΜEwHOF` 1ծMZEڵiҤ Nѫ5t:|t:TooEAQ| YeUN5(UrV#)bF#7qFvV+tl6l623`퍷ћL&0duo. ۈCkvz mnixMmF""*揶(XZA{qw ԩSB۵nXPp BW>SeZ @lUNEDTC2 H\JW{(f$h7T} MǕ'ED{jhMGvH44\ 4#pX3XIENDB`stimfit-0.17.1/doc/sphinx/manual/images/bla.png000066400000000000000000000000001517235503400213160ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/manual/images/channelselection.png000066400000000000000000000020251517235503400241070ustar00rootroot00000000000000PNG  IHDRC2fsRGBbKGD pHYs  tIME 52TIDATh]oG3N!vR!\(R- VEɏEo@)BĮ6UJwwfz^u$V^ۻ9̙Y_[2%C#F#L2gd-_>|Dt^_Lhuڬ5 YnuQcы-anǔb:_" ǢF{W"w?k HUMV8>:jȉ @jS;X^a :*ko;mX0I-MK[/Gi^ CT^, ɼGDpӷrbi!kx^nˡzᚽ"MqkA1&X5Ϋ0ZQ,ܚo鮕+%P77rG]g _T2[:s/QV;u#łaJ98Q!6]w9^7 3-ֹ]*E֋iA)Q6 @ZZc:r-# LFW? ہ6ݰd6OWKc5z;K%]axCIt_ReD wG[6}I~~+_,r0\bK d]n-@rį,pSmֹٲ-eT)DhK@:|WIVInPHIVY ef GMCunEIr#O@ϼjsdL>g-"9E^]IFBBd唀,-f鿌GB2|(Y:VO`W0ݹ|ޤ"ڙ=XÖz4w% z{%!Kq~}Z^8k'$!g93iYaZ{[U/5ZkҢ$K_<&9O᩶Ң6֟KᩮtJ.wN.l1i^Zy`Y$ w%'~}e1w8LE+3|230/\ Ou{nnǺt5'W1~胴h{/NSjсHn*ٓ3*rfRϰB"ˢw% |=冱pZ~W-q8_ob׶،sVu#5 doZoW%zBTuw&^MMKYϦ:oDo]ۧѹJfe2e&rnɬOd_0}F!*- $ǘMyhs*IpwgjL,$7>]s6GIQey]>X 6ly:ehNMC>)7կ}ѧpF }^yH+dխ&1C?jE vݒ_'Ļ e#񖾄 npLUiV eer^$V0&0r/?o,v\Y~:x>wN0s\E6cP [iu|'6nb1||,Lz*r!̯4G>%Q&w`Yt})1O5 ǖ&pgi|;q;2|>,#bVe|ʔGOfI̛u G3|=}HO|Ћ#ҭ KK&*05wop׸I@@m{n\\`gYYY1oL7۹Ρu*yl%LT`EFRRy w#6羲|7xNJUڧM^xǥcJ>]׈/&|~ſxlk"Q7]>+^IBA$'C Ymٓu#o1he݈:z'$ɣ~Nf`4% 9!8$p롤-3y d5H:h3h$ˬ櫭0sX!iI K0ٳl"Yaa6OKב.:xwVcUt]+Ѥڬlldα:j5?Dj^֒ɱ o4ƶU;83~irԅ;rjg,qY]9% ϴK jY[m#~\;?MPSGNl&YŌ KFn! H;&L{}!Ǭ?y_|2W>[^ A hUPN,-GE~>)m7_c#`eo&;vCFgbss ÿ!/{U OuOS`oS7f4cg./j[C~du~ -C} mwFPǩ"yz{/0x20u$?Nb\oNxջ3n\U8kvG>ˠ:9Zv"<o{GN>ZӰ3P}<.֕z9lI5+ݼKyzJ%%qQ?qesNsJ ZX$oZwy #_d.k ñ< ؖk)p%gkrɖaw&P>WYpZ\MdStzy:މſ[_7'&6~3H 2ʬdfL*FL͊+x"/_ Db㺦b3QVO09]k({e]k`sh 7fөtg= P3<$QH2}a|0o^6E%, aګNPe|POrz߼?ihQrπ{Әѷ"3KΝ@bOP."%UVOZLx(:dHN GN0o׼94W6MhPܙӳWBߙ5όz^(Ew֥SΈ|#hV 1G2Դ#1،Wmy6OEw͵0se0oLԩSuV$&%0砬{zʕ \޽hk :L<8 ߟʆ餟>"riPmXHɶڣP3\WIh sv"F̟sGdYJ3j+ϷKݖa[Ixz)vE_8 c|utrT+F}1[\,R@'_a!KμT #1> euc EP]FMZwV]׽twʒo攬d߰7|hѶJ}3J, Au#Yn?t2/"n*pf/*PQ"_Nb+,SB5#r k "zo ̠oGJ>C9w!(0&_#""Gs(dj٤_Z@D/>nR}H C/G#H1m9f\`4#"%6M呈 M-$֙,pcbE >/"_EPDQK"٬EQ3K*Y^D/V1 "^sD쮯u6;ڿ4]R9Gw~-b9RO$t9o|/et`乢9⢠xj ?^On֩{6 edoJȿtH/.{10k`[ ]@Ǫi(^&cl#hXW]¹JU@T{`0|D~]װY,XflV 6i_CuN>üov1NFTl6=%UUK&"5"r!~Z-X D7 NPf'Ղb5X-f3+װ͔ f"`7," rD>*Qۗ=*EهtСrO<+o&\=jyxG"M7O幺!ȸGsu2ܶ#Ӹļ2޹G/,jT·0zԨ^ԛ/gyɈ\ԽK'BCB {NNUঁay&]/E?<#ry #ޟKm4y$M~Cft(P)[^)n[r8bϺ00ovmGOc.`#in;}+Kϑ4rS؁c-硹j\2<;,Zgi}|\=P_0YJY,EaKّ "aFCw2s$ɵ$Ik#" @)먎=ݼ҂iԍiT5$Y_Y]5\ ǭjqaՂ.KN" Tu4jbRrRMr옒$ UU*$!,!˲KG%fQu@7iCH8rwp5;aK*6ZD=HPPjjaU3jZ%EYe%S%BX'Qu=MN;ٷg;rEτV|7fSY{@%װ\_gY턖EQdE1PtYJhp}DU5I%I'{h5E%K>32JE',CFIյZ-L&CɄa„}YJ mrAx?Wws]UmF\3=i8u)*PbUU)"T̰$;*&^uM29jY3TgJgu$Q3Dzin!PcW`}!a.Ʋ`dhYM!ՆX(:k6!Yu%n(P$uFxJq :lmI&]/v/dFG8eAcT~Oޅ*yQC7: IU CGWѭszM!,:)[^m]9q.n|{NdlZEa a= ;!c"N3+9W148Л u댆*b68{4”٣9<3cLt jnٱ" \FVY?<{؛)BFɇqd)Ruwym0Ԍ5WaYn\fv^C@KOư^VMe+tq*T#"8(G-9K&l+ߝdl&GZ~yjZ!e NIjX/e,Y ,IT#n]E^FKKF|hnC% <$-Mdp"͛YD OSw]a@l[~$͙̎+Rs7w`ᚴڵ`oWa8:;2NpЬ;/6\v՗UFtJʧ_T֫컙 bF:6իfRPN8fcBz9fb6shnv0_ &iFin p ,X]bi(<969~͒'^B2P5ϡe\ jPVMFK[F|Cahd_zD9%#,'T^Jrν/l_9Uٷ6CfF^aA*'>t R\ezj`Oh`S: )z%Kbnu d'C^ɧ M˛rZwK;}{6!6PnjfmqbqW:Y#DZ%MŇV*˖zsK5_+n&DdRB+-BYU:V;@'6,<dXDNՈ0_ErpLҎ8WG0,yjdyfpSyK`tđ`}y9ql:o`If.ʦ W>@Yɿ² ܠL-(T֖$i0v;b#h4M<ȒӀƲi;JJ{ple4Zey66WE}?|5##x&~ odgzbF4C ŘUzP7yQ2_s_=gYO0_2|T7*Z:|ssg:S baɲ*.SѠ>Qh*o?E ܐUjZYߘU@XVo*BE~QUX=a- 02!넡HJYJUtqu'R/ @#xNz!"2Ak3d.G^SUhvCB?^j1}⨧X2Nеκ~:{ \3\/NuTUCUUl6Bв%Z~a,bTv7~83Nf(.^͛dmۦm&hf'bl6AjRB-\' s~y]욯9Okd;g%ntG׳:x{įͧS$4>>CP/|z=st{5͚6W7(vS95mDT^OAGgi /Cʹh\:B? #O?xsBu9RW)*p WOXve13o=>ˬdzLjXFZ,vnxa2ͤ0dz4AXylߤ@Lf"5&wlG͙*߸o!"* EN\.G`lǓ}6j~:506f"EtvL|0GLtF']]XIDAT홲 :f:jkHՁھGkPqRTAVqsjDm͘PPiZVx#?|֕ԚQlYҋc|Лqw@KF;OWxFDrOA*;<ѨZ;g䄦kL sh攓OzoQ/VN|\%yD{g.YR\&5f6 Ӫ]ǥj8ς}xN2`0}e0os3h=%Wfrw UR8tJ@{C:D 8kg`n5syS [d3\ڷOњtA|||oLگ_ tU3i:V٦aQI7cU.Zd{#THɶ#Fօ1vӣhCvIcs8 9fo˞ٯ3{hZg_wG2$ʗ_ē9(kIujI`Y%׋_>&|Ln7Ib$;j\àjGIb.oaxYuNg X>w?Ӎك(*TKF1kAKxW]j~Mh|XϵOFlgi[._ϸAXxa.rd16eTppVZ5.W~yeUuV FEhD J`avIIuV7Zyҳ)u(4w"ض!NdHd K 62-S C~`JQO*Pwsm;#[sh"&8|Rpws zXV͢HȒ %Y2,ԽĞA [@ Že샟y Ƃ;HGj<ðgݚ 4d[Yґ'$(dO)BNhHX!nkcŦcQuV}}KxSĭߗ'wy+z)z`"XV 7ˊ݅S$,K촰v]  V9b dE•ee 쳗.dhz{U6.nr$,I(2"Hx)2^& /Y$;f1Y,fduZW2b/cd iZ+L;d.:#:#IihI\% pͲ:,Ȳ(&Yq{DNU,Ψ9 s;57ݸȝ&w,+焓$(vy:? *gF:9?=緫;ԙ1g~cHIENDB`stimfit-0.17.1/doc/sphinx/manual/images/choose_values.png000066400000000000000000000433641517235503400234430ustar00rootroot00000000000000PNG  IHDRÑsBITO IDATx^]@π@ bʿZ7-uFQ poTDA(LElukp*Nel %pa;iz{_޽}c "@, lB[T!E.UNLL$VGisW-Օ-^t ^v01~E&ōM JxB^`aKK750tssC<) @dҲ [9'm9Ȳ@얰/?0y!]eGwƝcw?ù?Vd.e/I$r%ۂXLVACtuuUf)*+~V#5zN;xd9'vmX)7&+$tU &VIQS޾Y|/(ݻ{[l:?n%NrtDCU4>w@cpXL쏅-:ދ'S=~C1Z;GkMr;t|fNN..*rvkԨyaq |K\{t)4+adl_zud&j۰+<#A&.ܯP~P*hvd d :&+>g!8-=vN>~!̷zߍ\%V{H[4I#Ǻ HwY(مyG}Ty ܴ IևԬ<';t`Y}fȈ3sIb'_:m</\87ضGco3b!%AK:~uyGa H:jZF@qKTf:.(s ޾dBG[,aێ M}\7.6m;œqc9"|oڗ Y-;Ofp(gEzvqs{ u^̙ ˃oFoi?C @RGe*}5̷u0x!5iBn-ڱ)oAn>UP8nQ2[O[pUO8@Ur ηzbWk*L3֓Mu)QT\Z;ƀdFPM-(|zwa{Vw &ۨIs[W$ :bX $p.Ov 9&Lŋ|ҴxGP8naFzYB#b7.v91TuVba6fPX}(|zyCY+}f1EWOt=1[,aY2ZY%5"oi^^ϴșw\+@~1]Q@̷&|0˽z,İ^A֭sF XM&کj{TǴcρ;g,FͺmoԀfGՀPzy⫣ "*|B&\WH`U!P@̷(O :@nՁNh!P-X@9C6- [d;QȭL,[dz"@!|Kh`r ηWMG{>˓ ܄AQIQS&>L PGmn.0ܒY{ HFp? HX(֋Q WҲ[X~@]wD_]xoYy5 LR /)|/3LzN\hojmz&4(MZ]{vp.O>[U=?V(06wSXX ޲k}L/c}&0,>>,kb_*: :ȧ5tTGߨ~y4Umb-+ҩ)Ǩ)XV>J,"}Ys5!L1I }\͛53 -1̻E>.fPxN$_eɭ c*2޲k 6_ 9U4+(=cry2r|K9,D"?[Vs z<0&=pAq{:xcAgjV𔰭^J=mϴR:#xs~泛xg U"UB0@7-![5$܂[`=ܪ-ECKBn54`>j"&`P4r ηHBT[p0)C:+T-#N *IGBLeφll`ZNv]N9R[ z3)g2\&Xh]YqP㛸L˻w$8nٱI;B %|F~笝>߰>/1 uIU29cη@<< `Sg^٥ʠT8Jbټ{gtNomArt {f>gÖS-I󟦹.W+]6wXi勪I{eǍ=qOXZX3J][`r摂~E`JvÇ x}v#d U 0; KI\vNspt]oOrp\L?ݵYҩINK|t&tP-2v¯sGܩģƘ%+o3mք;X+#|TK."D/Fesz<)v}ݶG۾C|tCDnfTymTǠOAmnUçZze3JlëYSO a}??vӤ 4r?e mrD"_OPA=g)fD2//lCJ\a A\$.—^ݽģ7YE2Td~)d> f09 1(<*_OPAoVN&K6 ~ H٦>;[ i_#dQqEmF_> $-kxA!Wn]҄'d6|xϼՁMO@Ǯoep~cL _e=7=ʲo6s"&x"1c۶NզWoj;OM%#|qSXJNIINJئ}}!ӓ;SPMm nj3C}VL3HOq׿z;7{抾UB3tl? ?PV"V\y ;(YRL<'YEs,t!ܒHωb2d`XQGdk j!xt-halF-0$œnA%8к)q+PPrYnldD%vڒK(g2YK2zTg ~so 'gB>_έZ#{G 'hw?NjBRS[7!Fuƙc}q-DRwtTsK4gōM JxB^`a ~~ LLtB|]嶈DWߴΉW 2,go}VPng5aHC['_<%CoٱXIu.!vʲk5t_=zF癖Nb`*`"~kx2yعyo'?e l4f5q|\ۼ va++_ n<,,c6Si/ҔIW3rM: CG5橴euY[uuY{6Cc  t9Ҁ tllr䐠_GϾKL{bu?+hނ-?zNj{!@âbv` W7E[n^L2g2&\6[4bJd:gO)yy22.{畓~l\w^tН3 | ŷl2Lf/Q8lٺ^**0_6Ç<:u͊c&-{+sBa٧Wₑv< '0y9%Kl%JBcA^y*~T/+xbeWO3 ~|^(M ?: K(I+y x yG|ޅI[avB{C~P ^8r/xm}stɛ$M\}wk$2#Є+iY-,zYvPkY%kve'VF:/1DV6LxJ%3 AɰY#k߇aص~)۔%6 Q5YOG79%N }WU,"GdN21|3wȷe 6/xJcG;O-)M ss\ȁ} o؍8d]YL~Q)9²NxOڔwR_ ߿ \ŴI?eRGBXfy鐑GvA$e|(GAb6qˑ'YX/,{;jrzbQW@?Ie?aEʚ@2n8(=F)paBټF_-r]^pe7}9ݓJĥGL@bB_lnDԦk':xlď4vs3 Ay($vc!#!- ωY_^pT}O![ Qח 6y;ڬJi.ODݸ{{ޕ7E~O$@DP}__|ø{e`Cӷ(*:H3ƷI?D|kS8n#+T!|zvqsY_~^"nӶ]<7˷B֗'^?^e>^0öK=m4\_m~n-PyEL֞Û ^Ca3"G*:#xs~泛x<@־Ek_ -bjh]X_өqS\jsƓ#dt^ӆ1 HG40(!L  ENlP\[}ܪ6r ηp0Bn]H|݌cJ&^'''Ct@@mnP֗?s|ժUSL.񕘣gHs[pt3yv>IsN݃w|EsW-n$6Y9&t6^G;{:q"xӬ]fF_G59'g~z!;?g}ʻwR޽'NPPoyG Ŝ=޽Url~M3:z궠{r&Ǟ:>H6F\cIȍw=AX@][Ί~~_#F &B֗gJ%B DŐJK7m!+ϷC֍ףi˱ _D4wgI&&-;-2vWsnSl5AS[tTQr}8 ml1:<#`Y0ss^}YTo;qô[EЪyS;\98.7yy'98KJ.$0j=k-.+~ 3ʅ0˒Twn b1Y} %6ISF#H[X>!ofTymegj? ݴ }9拉9gW\GeMa y9'vmX)79~ӱ{z?rd"tݸl_vǶ/h֋pу{vI`}yIEA|>%ed.ps߿[~C*⽲Q?fBt0.qm-W|?iNs>+P6$VOkH}XXܬ,oٯ-6.Zr/[q%Ӡ{0S.|0e(_^p]c*=M.CGw)o4"gF˖G6g?co&Uq3}v@<&dVDO+`0Hp_o`~| Cﯳ;ֻ'>8lۤ&7~ρWhWQ IDATqm 'j;@cչ[SG0Y]/Wj`W9 YN)o6¬S7d}y478vGȭŻ 2Ho{&oQ<ߨbDr6$|m0x<2nE,X;W2VZ)o1KW+x3dhrN˧f9.hߡ6CFmB9WX@Ē/n K))I tF4uR6ߪ8ˠYVO7J± L8t]y ^TEɸ/캠50z+ __/yEXZ[(z:+)OFḥ^k"w*)1f>7G:XV~钂?oHй@Ʃ|i<_w/c}&0,>>,kb??`bڼ^GDҰu(0CC*!پ'2Ք%g-:LlRQJ ~V]1I #CeFM˘Bm~*簆92@!0jWw;MV d!czN4^]crKV{H[4I#ǺDotcfHj#:&_]z$æZ]o\.W_]rl#[?}tK೷yܔ-+i+~W;RW^of\/*>m:MU95Pvڲ}Ä%kKm5 .<;>G;j˓.9j`6J .+|Ԁ+ 1mSܢmS8ܪ#4r ηj= Uϐ4[5( [4܂-sK{.h5_Agjs EpiyEO^\GKDe)Q_ζswVPxNĜoe ekfWmAV`lⱈmAؼ[僳D_.KL@u&=zr 18xr"D82OzWf]+SC]F]m=U*|g887,'6D 7s؉Nv3ְך~hv(&\V.nWoLzjU!2{ןr`֮#dʍ_TN8Cg|U "Z9B!k{vO 4rչWmt]CY_6[obZ i?xG҃xS.*tռQ3sPពe9E>.f2Ϣwg~Iox̵!d.O`N^O{G1X7Gnj>+~AٵŬ>REWOt=1[^½3jk+%(r s[|/wY\GقW~:KׇaxgfջN W"pW*8ne1ך >'V\_QҴc mc>fWm^Ee%WQF |>??=&0bL2jkC @E(]ߴ;:۴hOƍ@d#te4]0e視O۽Ucڱ@U!*ö qO*ܽp*ek3y.H1ךL [//W3嫃l[]jeUݠaz}Ukk=H y?h  w}KkAGܪĠZGrֻ@!|\br ηuARq2B@mnyoJ [FMlOPZĺ6߂KyM-!o\]V~tgRkཥYY{1P)#*ABnoDgb}J a<QF!ԽP#j0DREeU?"o\/WI ueU'H@- UrS+U !LBḥn@ 5*xwڲjNƭ͇N[{ejyzyUzyHDͷj (DBn-sBn{}=ҧ[ ,Z@nTV [jCCT[p FNjYv3y&xzrrRG*wިUoC*Ԫew9CL?X#1WZ5e̴De)Q_ζswfPЄ[B8;\ K"Ylɽ[~VU+gbpˑso2 *%/c}&0,>>,kb_78!n5_UW8Ah­G$d*ݽ#/Z YBzovw3~%B嘤ԅ>͌]*,q1\|;Jh!Mr;t,.*ڿg{A·LF KДoZZpLLȏyEs ʒQk}֋Ap>~Ĉkh"sDԼ;vɮ~Qg̷YN)o6¬SO_-b=6#gur 1[w+ROJpУJ*Wp\Yk2n}Isr]оC'7=lx13;8k?z^=bئAVmᛢ>xyl<`>n:z0<0&=O ?U8O~W[!`Jhv^G7Zk-<8 Q5H"P𩣐[[/.G&\I*nakZ^>yG|loѝqfpnRYwWi%T? y&f$TZq9:$\{*G3ZL! ;POtSq'#tĴ<-22Rܦ,!6l|v_TJNfEj~y%wg=V|::7!"_j?2rWQKж6,vtߟ[R8*Y!1K=VPQ~= waF3ZL!S=#*k>DcZF #; PfD>V }"aȉa5qҘ[aQܑ} }n|hL^T)/2[!$o1>{ 8g#S)-#h1j TӚ<85O[^ }˒[ujfJDXZ6 e/}1~sYȏ)KoP}0BX'[xU>XHi#W3wJCɊ7ha.^)t-/.~zzH3k*i@ḥA4Mj4q=c|υ`3ӱK9E兙I:x0b~P Al~fT@qKhHiɻVn:l7u:9mZ 6\Bx0@Q`]8JZ8kfM; Ԯ':G`ѪIEI?eMI<[:oi }w⪙vF[eWoΉu lˌK> ufsuu!0$ȭjGc1n~O$}K[B?ZEBnV{9[u/YV*ܴrEj[ZV hZMrKp[BninZ9ܢUwk5Y-M+g[n& Ui rVݭd! 7AnѪ,Vᦕ3-ZuV*ܴrEj[ZV hZMrKp[BninZ9ܢUwk5Y-M+g[n& Ui rVݭd! 7AnѪ,Vᦕ3-ZuV*ܴrEj[ZV hZMrKp[BninZ9ܢUwk5Y-M+g[n& Ui rVݭd! 7AnѪ,Vᦕ3-ZuV*ܴrEj[ZV hZMrKp[BninZ9ܢUwk5Y-M+g[n& Ui rVݭd! 7AnѪ,Vᦕ3-ZuV*ܴrEj[ZV hZMrKp[BninZ9ܢUwk5Y-M+g[n& Ui rVݭd! 7AnѪ,Vᦕ3-ZuV*ܴrEj[ZV hZMrKp[BninZ9Q#GT@2̼?~ON'd:uP? AĦ0PnF9O*7!p `~!a¢嶚IHҸܒ@~…Bp*2#~vv>ЁgbR+a Ubbwzz<@/mmlJU 6r?4ynxՕ0[0P%Cx!+wu_b-(%3JxRAIwf zlӰ9Y$uݿtyk؉[0Fh>4,ٶ\]!2ȳoc)e&I¶ȃܶ 5[˔'mz@'8Z)[|V骧+Gwn8$f3y!Js)yjʄ7Zx|w4_&Vpd-W*53Kuz 5Nhw >2MM9tm`n[*eao#Qjz:,hb _pߛ]L W#9%ozD/e0%xȐ (P9J zyy۶uڼ2b_4A |yT8L+>9 rߥ9= b[r{v{~Y_2Uz7`Շy%/r`Fu"dMKm3JRO@uלmbbQ %ܪRyD `|w. 1)IKvXRZ~˨wb Yw4p1.Z6y/WD~(ŲE[766|8߲)ǸD к#&n 2pFL0,D*}r `0cUEz_R@OI\`YF.a+#x/g|9ګՏ߶M~V-zwnѫSo,[5㗋wP_wKӞOu{;bȂP~;.:7r|ܒqHnA!} Y"1xpɽ{Y&oL)…',V;GG=SSp5'FfV EoaЪ(;?ac5cB<\y;=KLM[;9n^΍ܷ=#EVQ &2d:}ZZ:;f~@kKp[ MSI?t Q_بpwu2q rlgOGw٪vjFRYfw'~uMqd׮رCgIj*E ^^\ΣG`]pL,u۾}>}^z`_D2n>};12xrEL]$^v$PCxh>n2|9 PRtX=$-sB)1'NŋLQ q)[saʵ $?!A\;pߟ>}4@ `0GxT[xF{,[.;hP=2ag70uB &%.:+ox5k\B5$'`sIZD/GbKȦS0mrx6-q ŠC|^(Waba7{n^XSG<#P <)Mc-e!@)OIr8Zy ͹03 \x޽[ 42] |^j`p511[gf6k֌,dD&R- e7*O&"_2ќ[N>ߣGQjj̵k@PD --}VxѲeKpY}#H>t-k6dnj E`g9"xE6`%4Ѽ/`.vСUV%z,^ yqq1ظQF52552`<e!Q7f 9,TGZ"sؚ6mjaa2tbS*kAAe@<̹wfFGH@  `@ Q>&lDbi oKjd]w;OǬ8@[ʤ$®,)z}}IB"`dTrH")znD=kB_o+;$I{3DB1;{zxXըn_gGxV#Ew{C:I"c)z#wcNNԛ(*ΒSKN U~fڠըs5ZXb[ccz{q/@/Cx߮1q^ RT+=W , ێ(ѽF$# !"BwN8DwW\RZ4ǣ5BAē l>sNX?{/Q7ﶃ OGZGRe~>/GWv4.D$VTٜѴizRl*]=ZRA*`Agxt+uĞZǟ7ߗ@,W%T uŋF)3W_^IH.gW\\}6eA?bf8H8s>Ȍq*Ogma`tlw ,ri> u$;ׄؒZ267t.% ,6|2db^L| j~s]J(%5Xxtn)복eAC- ~¡L g`mKM vx=pvao\BL8Io^M_SNʪWb}E>ѕJȥosScb\nCh/9Cի ~ {0+$ٔWϻ0tOäy' EFB{כּ<-ѿ]]=9Lܸ}O?]]xgz ,'¦,83Vk03P\aqJ}Çrt@<zf*n}?lih=tsP\נYn2 ){r_9[bVmGNBu#^.؛cbUP>/ʨKAx63U̲ȝIw878R,;s\[d n) 9oWcLڰvM,r(QiZ}CĪmRZUHjO k̍=J 5q=[i?R`!cBRR<vgHI :9%ehػ;-e%&h:mOJkȽB/[S0{dy(eG,qߓ浦1 nTcA&A LC1(m"Rd>]g6ٷ9"7yDm)o>r\6R\gyn1:N⃔#e_^j6tb'hdO /'Cvqjҋk`ݾ0=c\N5tZcI %wD,tueMҕ+ꧻLX߅ z?(cVQHn bʼ?h3LQm>GKcT(uL3d[^i:|%S]o#^ u}K2g>_E +I璕jRztIX:u{8XJ<=TmES2[EcQ#FZj=/>>͞aߜW> =ڨl *OI<8RcxQhZ&A0mr!bØiͼMF|ӳ?}4yhu^#LmRkG*]egiQmQrc_įVqEy[(u[G\-~;.Ҡxt- ֤}9ٓ.}Qu*׼nW<%`˘ *ըv *r&:diT9^ 6QQ'#%ZUQguh/kc'1fо_o Tػ|5ԅyQ{k)f8gLqĔ_苎|̩: x2dxm/ '<oB%-{QTu~=@YE|Ri֥%nBn+MTfݘMF9`R ͼ+j2[Mθz?2_Z9AgӤv ؔR^>;LS!dkJmJкVL}89h&erP?ߚF97Td[7+ k"ӔDķN ywPc4㝱wLfAxznCu15,aQs,Ey4k'EXӣ鄇$wwt:}ʿ^[]G|N.(LYhM<ŠVSnT6Փ~.u"~7XNYhG3X=`=zѥz7r hE&=΄ ^ J` E Mޕz{/י1 ^]Dbm9EZX!s1wkBo};6P w7<ǂwAlŜz@,Bh! )9bK[.3!I055ȨŃBo$+!}xL&Mڽ$h1vyxPdi!څ/Y6\rv.Svl6SԿoYG@A+"u uDGaWܱHƮ84G-ңi |'ϝE[ѽF$WPG/wj)LtgE+N8Dw/9ae-~ Ys^f^ xLJL moы⧐PnGXp޷A-S^4ȴKڧXܷq.GOUc8gX:/ jeRFZ:IHH8DwvB\*@Al䋋.:1rS"gg끋kzvM  \B.ᏼړҋ˯aLG|:7e/i]ggg>`w~}+LYyyJ$ NkH'|bj#mRZNE{u寿~߱ڇmh4j ZHO{[85Z}d2+L$"3,.cԦϔ1Ա4IaloBoS%fv=Z{al;jI>t!sIȎl'T=SǙM 2Bu\@gF){$/To΀yySl凯VqC ;f2.WE*^P  %%_˅mjM)W$RsLL)Y,:c -E &4Gfҫ;1ar]K6pr*SIڶi} f9Ve}}5A𨤬SӭuWr"R*:;/l"`V%"X*5;h2>ik V>xް=}d޿ -Ī 2`R!םFd$72 ADb$t9m/8KЖ\us90q6lr,[eKz?!l^tê~^MߣմdU lթ薕z9N0I *Nˆ7 } 䮁g삇eZ~dT=|^]raUIa(4]fǢWh2)_DԊ\5sטF/,@nϡ9l j[2{ B/qf/Օs&Qpm6zU-s!5Wˋk?zS2>'쎗|-LJMYVEN\$Hš. ՙm13"spvA,\;/RF";3==pqħu;.,zu6鈯.n0yʔ ^AG/9+sfCYqyj:F.M O %C%O;f .p AM z6M]#]IMec^9#Ց- p|]kݜmD.w{tHLӇhn0cOfp,֙ ^,Yhk*j%z6{,Y+,eV:IN+"ࢁ \n0O>w*^Ϝʗ<$z`r?A ;HYՂ'Bvb .R0z3uW0/cMh|[*9!Aӎ5ڑYJxyvCTV%jSȧ_m}cgw䯿aoo>B^pQ@Z^WEKٕ^UגI8"IlÄޓRbh;rNgvؼ߄^~Ki7zxrEێZ85elR#ۓ¨=YSsGjMLaPSPв|qLjD/ǧV꓈Wc#Kmd6+Iҧ i܋ރH /_RtgMlYP5RsGjE%Nٴu;$@bgp/: Y9 dfՓ,*je$ERىÆ0hW # SߨUIhjyXzS*գ׸/t(7-<w#BӖ📣8e-8ĆҲGmS> tgX"Ӿ>REG*iP|mBJ#$>vv7g/4WM[HI [$0OfP?޿=΃S9A 9LW NO /[bbII6|t4r!x)e6Ě23֪sLi(ŏ̤W=w*xcd6nۦNN%qr*I6DVd!/w,y1rZ5 rn8S 0B6jVL\[( `ɘ|ӭuWr"R*:;/l" LyZ(ϱz:7l!*ӹQ"kg'$F2#X=z~]pmkNu-1ll1uϜ5Zl;]n|ҋcX#ܫԠ{5~[ IDATlor[1V3AOEl6à$a=Rۤ,}(G({Kʚ 0iwFE,=HnxY'߱/,$KiEFFXXXbaa*EC efFwRG ]JYƅnl5?3Ah̦s]'t?(ogWl`Ȳ}W{G&H,q;N\-[v ;l]pfP$ۥ|e̾=a5]y5>ò^o$+z?|~7 ,q<'4M:V 5L=|gl\tQ@#/. @Cݴi ESqJ۝:+ܻLg[YĔB8QzIf;Y&t:-Iz!NqG'ߎƮxn? p=i F%0 oO\>. JRշVzoܾ-+`5z>;{{*W\@1{K dy,r33s_,  ,,,E%t#\ B@@  `@ !@ ,B@ zyٞ+̧c-\#Oao6o~>Bߣ'e Rn14uD*<"mk79f 4/9šd!4(Q][سSƬ8W"s x(VBBqГ+b;_GZA!CD6D"|!sy o>f0Cq]uȇxJB_yC~sꁋ#M&~9k%`E6Wy[2^6Qƍgq)&a!W@QՃ*͆čzu6lCUW\2lS m\L]͢h4:u :ΪLI.|#SaOa^mԬcQD_;138%<* }^?INR&C|cNfjM^ɉH9윿'BcFa_3^ŗC6Կ+ޖ/c&6$|J+Tj)ІʙI:diT9^ Ӟ(mUby6-):R%/I;',6לr[mV#J>#X=<ۓkkǰGWAh5k,29TNu#J`gKVN,*+BNuR&C[_/g F6A広i0H}~!z۷cSpm|\+fc+@/"7}^,YhV &@ !@ ,B@ X  @@ `@ ,!@ p}96{r!]zZmRR(@Do=C\&tYkxxkwUE0:QEr.4k@]Y3a~]e^衼زt xEYu9,mQu` ׺]zUtؙ9ږ (u//\=S/ 2K# ֧ϊKEG<.ͿXњgknzsCl |J?эcsYAre7W/amDk8W/1,f_ډ^yi/"@ɕ%_093ꙍ Йa<3s\Ye% I/.o l震ǭm^]|Kx˼xx }%VE7S^y3P^9-)e j)r[c*a{R`6H= !lz/>?=7ޔJfx=&r/:f0uƍVqbNeJN2yD-r8?IR`4=̹6ݾK5K!'6XDD.tRVU{tO:u>8㲰OH!QH.lb- F@Pal˳+XO [ql0.OuPl)-&k WjMGm9@3vG QS NeU-dUe4Q*jMM/ff؛{))@PdHa2G}<⣡yZsr"m[Wŧ4N-d{~wWނ ->XNvXyޣ16 [ y;]M2$7Wb/QP(Ǟf>FG۱8Skm {tV_L~ T7tQ~H @@ `@ ,!@ 8WzTJ%HxG³8'R*_$o ^^..+$jgqs?;uHHCQ Qx%Q)eu $>"! 1H}J^WH(1jqOv,Ө9xWϟxV=&&nh2&Fɟ_T|n[7fӹƆ~ѵ4~|)ϻ{^VR"1 6(QXؗν!^ͰqT&}z= KTŇZvѩ,&R)&R)%KV]Tś剆 G(vs"v$iWSERNn*]iQZ}TP'lXnQ)S0_*=#kg;u(fWGQrʥ'juapaN>UH!運kMLX0#nz̖/5W@QՃ*͆s %e./.Z5QW\jub+&T^fjE6S.qY\IaVt8&sS<U${g.4pn`N`<\=pqv2rתKSWU/ΆmꁋgS,>tN u;(= \̨[ L$ZL$Zl-["L\bp{-j#oݽxju}T#-3]q0oI#r6 'σ.&w@F`XB ;;$al f`_>ƚ,f)d)u⧐PnG C5q W/qioA4Ur\4@E~':@$hL%tΗ\G_*?B?s[bLIyvao\BL8y9_SNʪA̭ *̋iǚs,C%<":1Оv) ;T[YЩ3]:PLIqԊؐXX,>{98tTugo1YI1dԼ !yNCMGskwb懷al;jI>t!sIȎl*ؓ) 2kM C_F"EfY](M)ct}2YW*ޘp֮F3IY\DC=n%2stAeXLiN 2f@=MkV<S';JD-~-!pz7p wCʛs[|nT ZTKnqR)\x i[(&]*l[{N#,@k.6;U&԰52|LvRɃq3📇G  i2HDx(7e0a,.:V_e=lRҥ:ybV%è>ue`$ѡe$FiYv Tjs9D\񷷯_sl#GWot(16-ߎ\Y~1 NO3Ds3#o LyZ(ϱz:7l@2[ }JxTR4Sȁ'(dMCsYe;S؊QmJp&;_WG5+&حxjd N>OUh0OM̺ Y4ϒW9!LFMW5WsG=uۓl,Ų3 %/:G_M/q6S=.\xjG).5%65T鲄] &it{Mt*4k޾>oLɗdcGj(ҕNUC?gPV ָUb`vq~yHYΖl]n)O-^;U>½J NGi_iL)ecXMK#EsTxnɇ˼tf+hUb~k{_Sx[ؐ)RmpB*g %s6O΁ZI*\*7vm{ï99]jmO6^y#)Ii^́S}8?ՇRߋUc_Rl2{н_ IDAT`ktT Ʒ_oüçT17d(DOr ޸y 5M@S_@DE|jccgoxkM|QT,0rHב$[Q,2j[XwF"&prMa Yi D ^;ܻfyN֮՛_}$FXsb={).푦ZOԸE1ā?a6;[ro$R)lIYW͌JM"HDmLe8U£l_:c$>LL)^[x4iE1)rYffEi"'e1oW͌H,,s| 7;aja p͠@ !@ ,B@ X  @@ `@ ^PH}DBb<,4Z=VO@T׋d1ry|aG?¾4v qjM]J}_oq!QyxQN;I\=Yًp!~Rl˸Q{}х:BD;(= \̨[ L$ZL$Zl-["L\bޏሜ)ITK0wvP(]:G*>|Բ Ne1J1J)Y,J*ބ]F.Oy8X-~ v5".g!|_-p&ĄVƭCjJ*xv"uAl䛜ƽV'F Xޙ|運/$$^{E{f[6jHB Pґ **bIE?+«إbJ`EEJBz mS?6Yl(u.9H4+?w䱛iٴ91}d}iE(v=iZ68ڻafo+<ߛ}9{ICG߶SŷL`HǏD%>4hٓ/-`c/die쩁mNLlnzvK15d;J:k$WoѻlWѨ nJ'a_$Lo7{>o\;?r7glݹm?E=߱`29 oNdצOywSSg1m?I)/Q[~~.#sdY}:{"dm~΁e/'mxie")1@=wTWo'$6]Ƶjq&wݵ4;@_ϴcf~))4vܔ|o, P8UibTEYG3{I+$#ɤ{=YMe}LX*p(ӁA'F{2˿1rVK`<6Ew6\~vOVFNA5y4ѥ/+fۂ' C=?>tr26rEU3Chx* /zb n@#"f+~ct0?NJ-9`k9~qX7)"Hj1xij)!KVۣI2 ϼ?io h0r8p,Z)UwtDO=R:2kBˑz:yK-KbI(6*OCrKXeU웠mM&E۹ȷo*n>LSCsph ^|r>M p=/<=5Y8T $@ݱO b٬ۛe##i =*zkƠ^E,|m13820y/5 54ʍj#7dZRKA  |$ʢG2tiy'anYȂy/-Yc-X6o O_W'j]a0:ՏHɷhgٛ#֬;&_%5Zx>3oq|G3lcCqXZ1S&s\C\An|Ih!B\vtp)]̏OĄ @\'+v~'ܷQ]վ *f3uEk["A-Ԯ ?9ۥIn=nogpOq c&(&߽gDQw HtWwo n3)'f/R€kdT4ƧJ$\.'E=cG(,? ZuSaihF44a༚onNI[6J^^3ڹ/+m;Z >_=  U"ڭaW~2֨{|~ݯ;jqV. X (!'ӗN硛l߀n#F yjbđƷrݸV9~ .WuX{Vk-doDL;֏o&[,>=Qt4D.>InK+Iپ2x%¢jxfKgòEbokM%?/UAA^gDD`hV b/~7f=&c>'v+׷OJzC9O+-"TM*կOdM1ACqꮹQzuesi;IƙY'sJGm:Y%"p1rJ5S+LdPE B 8=q=+@_,}PG[k, *r9  tGsH FgAԳfqrdY\r$u>€瀄ѿ!=F?/r5LDOKr});]0:μh-g͸g! ^^HbG&潴žg ~I=fGx0`Au(2) EǷ݋"\ lNHvmK$7;r2Hݹu`2Wa ͉iڂfoexq43q c&(&ڒsS[Ŗ!E8Aeapռ03#A#`hbDϩycI׏;_дyb0oFv9JZ?J脯_$fYZrk7`-x{lS3ug€WG/l BK6 ]=U_,&?/#ҮSw&q+0`Ȳ\Ȳf՘d" 0FD4yɄEо4B.QlLxzjX:l`X€!MoYg/צea>]B9"q'€B K"6ѱ- .yӅ@@ L"\,@@p X "Fb$g&€@@  0`@ a@ ,€@ X  @@ *|Ϫ/ u"dӅ @#R@ X  @@ 0`@ ,a@ X ^bi84MwgaYl ˲кh-t IMN"';MSEOv4Jlԩ]Oh]C_|݅WncOj Qb75l#75||B달. tM'3#oA$t]HDغoTMZ_-:n$:3t0o5uIڞ(/j-t+'Kqb~n%CG`{Xcqz-?ߌWZ Ξ_|E :}YB߂9F 8dy۷*#2AqM v5z IQΣa%y{F .6gQXy:pVWuz5rhJQ1۟zc_|Adp#  \E6Od'vޤÂjxvN}bI|&M]GA}Rۡ1/qY. TUA ,\0D NkG2h _ax4 du+KU\ֺ*2#F`{T;-N|| $q(k*?v@+3veklt(ƻmq Fv,u쥸Ib1,\0ɦ7jKdx%roIޱϷ#>du1r Ah]w~nՐZuQ`dnCSu48놱՗4reFPր|h.1ues*χu[$ 8T h8/4ŭȪj* F׵Z榱*yFroG]d8N\D*K*^ׂQNjaUuEuj¦{FФQmBkLD*A%dl0d&3 -i3>"$İ'=k{ۦZWGY~rӾEcAtpiTt\Kѱ;]%jj9݅{QF絼n7wBvRTUaGyIVWk8N]M!.>Cr2|gЈS+ 2G|Xz2ۗJTl$;wBA &ӗ1nJޣym6R[G);yr//G9w6] EvtgfmKxzPwF7&2Md?jl=UтJY Nhˠ7t>tM4tMc̸p9hav=^co  u;>mDI,XZmoǶl;rKȳ-rعw:o,~V||'?NcɈ6߽2qD5j5g6h]K/Os))?}-ݮjI+D>xNf>{'s'ŢWX(~h<ϏBUՐ29`-ޘ}ՉF 2r ;ƏdjeҜ%o-mw¹0`/c1>4E-77]xWMfl4M,۟_Ẅ!)|_g3K+;jFG $m#c8k 鮓P]y-$12f̔-y Љw泽n5ߧ/ g ݆8Ы9S.:dvKf7DŽsy̷p\?'TдRT/[9UݬJ`HuLxh%cfm~֒껋Imxie")1 }j1{:V7.L!]~ȭRkv3II]xcu"6}CKy?UOZ֧)ζ{E}^]ȝ^pv-Dtr8yeQ4XjeԤI^.}Ft|Q}ؖ'G* ˉa(Bq9NWu> ۑ# 4mjIQ@9Nѝ$(Q:݉Q6;U_%6?f|qWGb05cJ^MD?<i_׊Niv ݖIJF8[12׽l7FOIzVL14a uɎ|'NMWQ3.[Υ{y}\TJfMh=m:pab dIv_ՑtE7UQ4UqKj6FF:3(pCV^y'b'Mc\?$/#\MSTū>~_h.yУxzyТ͢Hw$3㯴oy>\:>߹1Z:0uLVgR23cSl^϶pBi+Q%YdÉu ai'0￳}Ǧ-4d}]x3BΒ)l~ g8u"JSb }IDATf S;ƫ X7Y(+qSvp8T7|̋]ϻp~,'D?Jى^LU; օw,8E5=yNΰ4 ]N?9>~ CsMP |)βW`wj(*eRrT5 Q&УuSڨO \s)T8[cOVfw/űzh&:^q" B,!=ʽi_i M+;Ec 9(m ?*=$ h)obDf&KH̝NX4l=n_wZ^7K>M@+!qttuy%05yFlE'å7õ;w_}vN מL:SϺɇ"E'Unʵ8?<< Rm3oXB쪌_~Ƿt{l+.|qg_K_Y_v\IIHq żہ|\̔mWTi\,Cmc_I"AYw:lUn-j).FЦq-k$2b¶=LY+f[ĜFC1ylP W^/f.CDu/IAaWhuglt$~ jԍA=FIj`+Q q]7 8MS?<dԥS+#IVZ>4^ckHӱ4]>vayu>~Ww`dFӵmS4|kE> -4ü9L2SL6?{&Cb%jJ&ۣ,YƃcG2:CHA\p !fϨ}{n|A׎"AG. ùwq,;2Eo ~fhEq}b)|6nX["C+/VxwGxi;[>CӣX Dӳ0 %c`h4V/: Ͳͽ~yҒIur8q"Kϓt9KSϗZ!2N'Ʉlk_l ڴ4b8OݺuG rJmi~o4b40MLF S   =Ռ€ixp\ѢlPbb!44L^Rpb\g$1rXY[m}9>.ʿKFUC_7^hʊJoZ;Z /"CEJRq񢃞eܕZ*3 =_w{I&%]_]s!4kOu9B0`nN3mLP}dYb2O&_|݅ |b0`@ ,a@p9 3w.IENDB`stimfit-0.17.1/doc/sphinx/manual/images/eventbutton.png000077500000000000000000000232341517235503400231560ustar00rootroot00000000000000PNG  IHDRO@sRGBbKGD pHYs  tIME 9a IDATxw|TUǿ̤LH#! &! kCEE"UvXA:w]UA(UBE$g2sǔ$3$P9̽s=w9s l{<io'*y 4IfzWÓϾcip+r# ] P4ۖECtwTMyO<̶?ACS5$eu}bHvVz2222a @z ^xU4MC4EtbEQxGZ /!9ƒEn$Ϗ xOwKbf{;bh:MgV ۤu?C'Nl {!:c{5/ty ]WAo#;oBRouL80U%dzi\r%]o 69@ -E6p/5UWQ5EWQ4SSuQ e8}$GJU~]XEiA7nI%.bwIЁ&^e9*}aG SZjS[tt Aj1_뮿 &=<C4CUc﹃̝ORRwJ 5ƒ*\iM#3o *<슊(NI\j!mS"8hz X&á6m0vQ9n+:緋b{> N$IFzǨn"##rĨLw߾}t֍&Ns^~I*$p2hXtiT/6Djw'NE3p(:vrzNCk~p;eJr+MOCE1 NKp9,=iʩ7RRq̻9(e0tWbKDS8v4MJMZԉn:=ܣ2ו_^՟gxJyj{DȒվ۝*J##m_8USp2CnA T*:%v=}`[%[bPBSiȣnp+tHҲy=g4DbJT "$w]UDAHC0 >\ Ν;Up齏L{ƲzF p.WK ဢ膁, @4 `,2tnSюi:U'*Bءqf8Z'(4A}%JCj$EN*c,:۝T:8Rz-#8PEvU[YT" йebA[+5:tVV}{ {=UUk%p /6|< q44]6Y:?e xAJU~W Ӷp8q*:v T*"NJER,y5+T:WU Q*Nr T`ßWÉiT\ S5Ak ~z;p{{3դ+ߤj~Ma4}}˼>e222UT+:$ +:Ȫ u`~Mk/u8% e?MDGS50ܕHYt^4GIݩajS1~O mÞWp1ʬ\Am{~tRxa+l8+**P],{h Jc66\}N k6⊳l8D3iJ[m=m_fwP4*%v 3N#8*4 E30*/|3!̱)/qrnf,v^4BS#"υl0[e6}ʼnݩilSɶ5#TG=(^u%~VEu]GUUTjZ֐*=!6<ák~=$ p IPTs ӾE$~5Sj8Jm>ߞN7䢔95>j϶ 8tLpMLnCr4qxөh|K}%ȁԖڐ;!*Biiiqg 8p4.R5dDϣ" hkHpidn<w l[#ǮJ:éytšb(jyt+24$e506fۂnMJ:o."7->jQՖΝ;7f 6v@+4G; ٥u 2t=-{Y]ۃk%单0:F#}~kޱl]Aj|r'[-fvMlyG:ޞF6zomh)l;Zu t|s*T5 YJ+io~Mw>ݮ54tzgMGkrM&+lSt8o 'L'm8ZO1! ?b GSP^ӏ OPCD k;A[c! ʸO[L1Vmf!];`'W+͛']D%/15#q#]񉉀ShQ}$Lq/\;GddȎ<6}aNx|ϰ%HlB:ubx;:߷HC3g<̶?>HD@U:IOmiB|\^" (Tb[}T :rݧiGO"m|/Qn IrY8 tE[?wnNſ(=$}lcH~!OS ]H ٶz#iAG 4] OR]#_ e**Ghf$0:<" (IE nF%cT'>!-q 22aD>K( GqK$^)<:laki:* {kP￧W)-:d)폱ԁaH",#,![,Ȓ.J.D!"j:j*3nI?"{ D%BTmt m,/Ȭ]&NRl}q8ޅAuNѕ節Ңijn1aT(kk(iH A61 ԡk_0aSQvMuݵ(cI3a Y^< %+!wx{x ZO,i}&L1ƾg@ۉ,1|1iV8$zFc9l ' 4Uwemi~GmjK@9 +>y6[_yr/N厣(Hq َ,l Vq|sް3+_?ug9|'4=R%j¯4Jnn UG3Fn^NRl}5A98~N8 p:7͖?`]Q5ń38;/fYYbP[&d[_lt+Ҽԟ_llZ)C/P [uL_l1ù֏TV[Z5a=uN:K͝v _,~a d?Å(_7fxOLԁ u nieh%3 `T71:{EXri39O񏎃@j/s_<_vcZm@\\Ɗ?պlՑ~ (y^xϏ]%צy9,MtrΈiɈO羣Y7y zdl=7|BnY낓_˜ g_>_#F \;kRZѣ֒4vyWP?g=~A(e=_z;_札_"` ӘgOn_́;s>bx~nLn{''*?Ͱ:¿w&r['TUai="ug>ׅ]],fsQDĵa!z-y'[:f]y)Vƞusi4߸!t-[*A"ҢQ/pލ;1!b'Q .Nt?_Wac[{Zi3_rtx!e3ԷN*v1w̍OdsyfĶh)rq,B%5a7o-,zoFL 4odsE4w)Pey@ƻ2u`q܃=fgfb9zQ P>A*JvݸxɁC,f͹tj}U:Ğ/s_66pLֳ2` %C=a,?bcL#GAOpPɯsVCN9; lZ;*tRn7uݯ,\̎s2ЍbmKHoUW3X'Nv&g0̜Kִ9י۟ǬXCO2+coyWZE `3ʭ.t1A뭾u{Y<L;j1kqJ4iq%wrD W/ˌ|h=.2 E/bD$$['9gh`Hv ƐM*}k9yZ#UOE-၇Wj*27դ:4>Skly4.O &p#/c/oU8-G%|5yWYc8=-*Y 8'߳$#qҶu{zxxO"+[Va:ېkE_?YCwK%^{1YW~5:] m+d%ım$H|}F ~~2,>½VoځzՉ܌br "j7XUЌ1mcWdd|ή>u)PwנY> Ҿ?HBv*b]t⬈q+Q8Dg {7̘38Y@@ M RafH1w|~* Md*7s_Pf^}67&tnב^ ℆I"/ǘ.!Ko&^(.ʙ2]IɌ>I J7)ٓaNL:r%y)xL&Ӟ:ܱ?/U^t> nn )}p?Y/̅1 /MeJ iER,jyJk>}݃<ꋘ &=v[ӓꢗuO2bӸ塤}iٴh63/#;~F ȭd4"aó5UUNI{NK.;Gr6<{Ӱ&>x n!uwbUezQuAPh藯@4 Oz"mu% mD:wy >WKW;̻׌ca,R<xB"##EGETd$X I8ZҸQ{@E$1uYlx*98x: HP@I L?@/ UO@ɛ\ĂXfY% Jg@G2#c fWL0aT@y,-X(SL0aD@K kY&L8h;1 u䷜i?S~wzGq̝ ,{t{Qw I>fcCcyV3BY3p uID gu#ifvWGbb<͛'Hrrs[4E椴HXMU[}'_~W (MΌ9hn9םӔ͍< aGu Ӓ;a|7q9Yk sqyާlu.,ZXeyvb!rw?9K,޶NWt T(ykpp4F͐[,O 0|7y&\.M6#&R:ᕲFRCք6&$d?OTsخPvlnρ;)1Tv-v^]qͨՅ5-!gSuDz:U8)۫\Atjgl:D7" e\GcJ›7[kxj =T]k#;* )PFE-vօOԪ5-GsA@ p|7 >Nʝ_MԚq_=sޝslfT AopKDTb*>A%ߗHpGk-LE؇O_]ٝxw+ MjIWƴ69ZN[IDAT5wJ7kJkR,_2IbEI&itCq T+YA%>mH. ,B+XV@(U:-\N|$G!=]5dQun\Hly~bSI<ŷN-ax N' Zͻ00y'VC\dkkyِ|@WX=*:UY~i}q 䁟S b/^E6؆Uc}^gAn\FyGUlVpK)dKOćTuTd(?8hK"NCCT^B"< 7n`zW#S3knf r"\/كTָhZCuLq]r^yh%81{bvTJMTƺE3u/g3*e{7NEf[NyVGY u]ev^o;eR08f\8%[l=H/13ҩE Am?5m ӦĖ- s+h_M+R@!:i)mH8vEX9$ }ӕ@Ӹ\8}6?݇3Aӆ3Y$̼ױ(':"v!P4Lᔯ.sigda,xL48ER ܥIAky_ܑ[${<<6* 73 ] (8NN'\3 ( plzx;9/2: @])ݺ^hNvZ 3ƐK6/6BRjj QzwᩮSrjbS=0爈 **H"VVYFSC4%Q$ceAﻘvmyp%NI3S:g:MzhRE*^h2dYF$D5EIB=gϖa`YBr%<ӹ*a)#;>.Gg~Nḇ"MIB2ץ Jk',!x8@& AK dQBD$9/p6&L4j""$".5E?!n$X,Y&L aX,XdIf 8&1AJ!n K2l`{M8%2zDdC3DQ1 $ݐ Iwmܰ{BMUհWU$)Zm8uooٹeR'xߢe[R^C1q@L' ムD*"ɒKpaȲI\Kn_B !kqɻO؊,I("KtL0ax܆Pm$eE"^?2&Irs<~V;D$QBȨC;0'/=C|vKU,!HO?E?Y9Y$ttpOwt(Uyav0&@piWVmsC>i"h/IENDB`stimfit-0.17.1/doc/sphinx/manual/images/eventdetectionsettings.png000077500000000000000000000531661517235503400254110ustar00rootroot00000000000000PNG  IHDRx=sBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxy\r, rx-xWj]^mYijVYbyW8:~4KO/ݪ!Nn1 SʝqO;n8:5턤jIȷ:䆣'~01kh:r_C |P~{pƽ;<=_Vj([ Gg_Oݑ3D5Т6_%)٥8;ҥmMKu\Nkx"Ɍ`!z\fDe^j\]39("8*ǻ-a[6ygљ]DǷR釔@Ty]ݻ,_3/_=-|^U&T*NLixEdĤkTe˷#N&0$>V6K 0+ؗrN9FA+ԂaŢ2:ėBeW>uЫdVأ$Wash[#ԛŇ/|bo,ek8q*q>qs\hJE/[K H'7Q]X}<ǗbF|ēc~A̛S~\=F7s-tkێF{+G3n]%k'-@Fqpp -Uګ9 /},GGf֣X}1ٲd9q>n&n J fӄqqp/ IY5)3];8P޳9_fNL#8#\qvzL:֘JǷG,۱,w]h=?Iͯ_[0xY QVJ0[>L8h@{ 5H9~Nuft;}tZ.3]j2 Ullo{o{`ccy.S"- J亐6E'!Z ^^fͤx{6n 9 )=K2kTOIcvf=Ma_R95X듏h!/~'L37>r-kclbKw)q{"9a쌡47Ծ)#f glю3#6ƆHij^jqȜ??Ml7v3lPː7cA~~ObLqTbjx3tT|:l;:͝3ҼcS{Z Ky(5l}Ws~yȅ\ l-MCzܹ͋Ħdn,rٟ\}3i¹Q_6 |n#$l$u#{eڴ;+d=|YId]^/-gٛĤi:MA|v5r;w>odc9"\7/⣡ܼo&P93g0z|8#ҟ!s$L׾!o\Y݆-t/Ss<ﺅbMMʌ SPf|-+R+jZ<2yfC;ucbmڅ65cYt# Ƣ g.1.mGcF&HՅ8 6o j44W#u{N@gdWv02;HSr)R p7 nZ2¿R=Ќ[F]att Wđdz~Һa[~fm|~`|dYhc8LBsCHƶRozj.=mzv\c~#m@Zƀ;gׯ#;3ry?ToZ@}]=)\#j][PY{@ xRLhؚk:Ty|=oA6V57lDl55yAWgw& di@LWG+*ΌęUR ODiIFVr3vDO=%t{BjIuYayF(XY5 n2Wsu.' ^LVԕwPyZGʞEK9ʱ5#,*1Xe_qG-(P\`Rƭe`jfL96Y܋ e. }&W9@}s6-\ 2t$fUŢPAdee]Ni텿1f#o䷮sp5<ЇyLʇ!<6`&~D-"Gr/h1z>O`܆a3'|o50Dy?gkI%/%f<̛7`b*Wrn,{f.{=4[ާnIddA^+/eŞOX*ođgg׆46|`:5;{z6|>VVF)|Ir{mq +gm&-['b;ѿI>lWQ5Ӛ<{mm O49Suz[c֥tbN高lQ-r|0>nyǰnd{\ݛtj ̠lrh%`Gq $tuO_7sd^ϹG?3Wq'fV&+aafHzi~1Ht/|,aRT)IĮ+GS@րo)Y=u9n&ʣY N$2fg[N'S.3wĺk8(GgX:^Yɻ=%05l"iE 23cf&/|GGWN_ IkG^/; zs3Ot-0l ޣ5O&d7|fNEebZþoV/ܬk4e<{I5Io_uEg %[JtҞ/3]t6O YDėlEҩOu6y/dsf~q#NנIL9Usf|e$daZ'ajW%~_NmxD :|ec%|?f$b{i,7s)\:ek ^Zs<|Y73lXGtw]{ 7+Y$IH(gPE:OTwd2aR3\ˎZmA(':߶ʑfo'<~PV!h.$PIXt |}G!d*Wp+;30,$V C-7(8A('4\8MǞvBڱvɓS3~0T"1wV E $$L<[(oO?޻|~yS$HB ވ z# 7" z# 7" z# 7" z# 7" z# 7" z# 7" z# 7ɪ Txii\ :M|#j^c100=^>dz< P:]U8a`PFVqv8Ļ^c)L( ~61F:Y6yG^!Ѥe{+;,+O+FׄAjπ300`yyτ8qJ ~<:A zτƒTjA9!+AH:8C_$3zҸ5kD* NBZsad4s 7>`d K^̝?ptJ`ɟx G'/:[KPbi3Nn8äWIR< +5S{솣/ݧ $U}#YlԃNn8ztb3ĩH:_ӜA(?Idz|+IqL;͒3aYB3%L}I(%Wg4?ʭar ЍtPpehf_9 f$Y@jf_x2wO\Key);o, x׏/Ō&gO%h8bÉ \?< { /{w#whę'*hI̝3ҼcS{Z KD(r˜??Ml;*=K2kTOIcvfiT(fuX^Z6s(e1| dwgם_Z;6c(MsʎI28/ᅒ~j/~KE^ң ͱȻ#FbdTɨԊVP. ۜܨv6FdtX*3Y2yf&ئEP)3Tk쌞*kg /tXv2KLWolwǕ$?FVԪF;SHCiC  ;8Kn>$, Ze'"ţ0beհSR+ VUvD+VĔJ$2;I7TeWT>*.SwPfJDL#z ˧d2|VB N82M槯6r.Z"]PUƸ9&lKyh P]6.p4$* d5vfM_!xПfc BtKٓrۗVA\ UH *JFuNÂNBIsrñ"|:ߴs)aсtD^d49.y*r>i־ $upH*lZ!ecFOpFczHex#s'_]"0QWAe G'75u{T7I=h䆣G'.;C\>u$ l煣-0iU5ӏ2+jRo9䉷7>̫[KY;3_7^g r3tF$570n-AES9l4=ptjNI IK՗}1Wӡ 3H̩.#x1:B8^[H}1p~y/Vh꣢MIqluԇ=m7?޹ލql<}1!0߲ H:_|9u֩rvٗSwMsV`MY"2xv!yA!az%_ևDyDlǴ,9Fؙ%83q["8>O{uGͬdtn ?%wc붅w@J;1g9BeCh[͐_*ADZ0N\yLXA̛S~\=F7sMځTjAH:b5r ']%>r;3A,24.-ì`_8Gx;ai ,`_!w2,q_|pvzO혥Tg}xKd?YtĪL;Mz7(-dkv!oV%wm}fc1)d(lIzf-m 3E\ etgBpl;p9<߲SwXDua _NM6hM-*%%E<ȼHϚH{9rLٞrf @"`ĨaFar =K2kTOIcvfvpuNS1C>n]݉>|,%w+l |*+cL[,8뷨-h>-T?oB^6"~1bFK;l3P^*Q6D.ӛQMyZ6s(e9 dwk^r rnCqM:3f_=BIGPL5Z X^%բsy7k FZϚ.ъWGJHcga_ Ry@d5mobɹg銱,XKncф3yb"Zfo`p O>os+*vec1,"y"lhg3irPmWyM YtfG{ge(kQ)+D)%D+76+H7$t+/޴Y;ۨ;?Ś~4k62ԛ}Ţ_{noЁ?60< &5˶D~@@x0mw)i.(Y: W:ǒ8¢/ţ0beհBq/|jOW]jBe@"Sųx\m$T2N'1M ىHH%/ ϧB e3?luSBv)lBPE6|;PifO[E`X, :jYY'rlJNRi92 c *j\6ȹh󬟳oZwi]]7 ܝ "RghZ/(N8I5+蝺( '9ͦ#] mk)rqk'~1Wt.ݾB33@րa}ބ9"3/hKnx7Aٜd4YǙԱ).-DZGg &cQ㋫o#η? _D'mc\}GLks]AK}ڇ5bRcoNZ9xg Q$3ϠanuAZy\]mصF5츙 ²VCg׃@:7ULϨqm9}U>ffRs]qs?6bx{[ $`Gffx+>Y@;xҚt98 GX60~]Yaƥ&~;N^y\_ٞ2cטެl?'g{nMo0o텓uzӗ!lB p3"A^ Ż眚)ن bpVCڭ}*gSVDAw/rzfwz?}-MvY!30Ux"Z3 +\h â;;RgSߛ {$~`ߐ[Jl|C9q Tx16y]&v Pf5!AAoDAF$!AAoDAF$!AAoDAF$!AAoDAF$!AAoDAF$!AAoDAF$!AAoDAF$ҐtA#;I߁hӫO <AIP%\bˬQ'7OQ_x$|䟾 z">'EGz%G71gU_}(I(naܤ4eYeGZ_<IF8s!QN-e; =q|/xA->y'Nn$bP,\)Z5͓c\9~mprijl N!K[LIE,WK'7OvuWԙF~pɽ5LhjީcVjۦMc7OɈgW|U Iԑv7YZClcVOs6ƙ$>3\lǜ`yǖ+¥wxWjʳW^OGBbN e>.fcV|qI1]meCg59&.x"ň̕gc[̑>wGK?7>̏fo縫B嘜! }S>_L 2|6f9ӇQۤ'wNgޫCF;}N:5s=~8Z" 'K,iAR'meUDި 1J%ü M02*%*]b*t9SjTSgf"Qiִk3. T+ngrм.A'U$* 4nb[2h8u2fUWmƨZGk7ʦ[S,GJ޴zvDY}G{RK kGƣ0dUXQ,ӣÉVdϮi=BEwXV}zpI $Lwjz-=mmD \{f#Q<$8Mt|Wn :f0z:;fQmDʩ,'t:V2ERZ SI+swdoA4?Jre6qnoŝ`6Egׁ &$o#yo.y ^S xܕ? 1 W3Y0hG`;q}i̵mee4/O0Mo<|>Yd̃}gގJ\sOdlf4hWȚiMɾPNOVA m݌OSosKW$>:>i5zNasdwa]jgBd'Q7)7цn}އ&ulȸHOyǔ~^#%fo$ P.]G|IÜiA]O7H}~dm!xP7Շ# ^.Ϥ^?ޫ Gb+" &q\ -:bkiTB*QakeFˆucg?8V #+G|Č?1lJb~3rvP*i+5gk ƭK\;ٸ5lZiݯ.7] eˠe'!eZ G2V\J/皶T2J#.ʴdA7>-WIoopZ{zPץƯ#(QCK:ĀfpmA]|GEՑtM{3TzlD]:廓c[7o~Ć)GIsӃ.޼9y!դoA]F %}`WChA] _DZKl7>,-=WgxxP׳C٫}N߷ǵRQǡ|o hiؒZ^d Zk׳ujB׭8$Rdμ9j8.!槨I#_cy2M[_xA]a&ik}|,w_ZDH%_ԭ"UfjS2UU Ͽ '? W.r)4'\Y>|s,ngv}Ă{vn9>Ost#%+LyG?{L~G#}me<m\IIr{vg"F1܇i\Z8!>,'答KbJ(;垳\:X6n)R8?%aӉ\?7#c%UMA7+Ğ^oٞVY:5i!uU\*c ܰ[5}q41f,%CQsv֎iH%Poj8ob_ Ⱥ«IHIJl$r3F2h-eFG6"HJU<˽X-:k >r =HuRge sMli01Nz<3cM1o1=qYe՞#6ƆHkQ $<͊n-}/)grL\5CZK[.3w&@jrMh7sDi|Dΐhbk]c|>խ$HPiD-1~r.Â3b b+5f kuDDkcMlwۘ+a 'dQ+<:qJlvȸO+~o0u?RZĽ_r.L~wS _~X*5Hs0S7tWfJDL#z ˧s2Y2 T6',*=u*=5[ Q&{_$=3 ,d(α\ʽ>R1هͳqA* aYgStd.iy\Qf .tʒf=4g6>eҕ3mY$*QeJLVɊ6c:VIoѸ'_H|]ǚ x;_ǭAs:s>Yv >X{n }HӢe cƺM{7R1Е܉OQ{/Zf~ڄg4k”/6; 4³NKn҈>蓕t:ΤNqm568tC+`Apk tb~MֲVqqW8ygh.,ֳ &cQ㋫o#ηnu0ݛPyh{úquoJ)9J2 G'7qiO1/fc|+%r,lZ BK[7wCh#-dX$QXCfFnpop1± F9[Rq;NSXTWq5=Un4xBחfQ[VjBE>׋57+I\˿(*5!JoW9z)qmrnkNU?#hr63u2.qnɾ+p*9c?s?Ҫ]"P W'aHa$#FA 3*md\O0nDZ0JA1'{T8 z# 7" zSaoLc 'Ă ވ$$ HB ވ$$ HB ވ$$ HBdeePD'DBAVVuI:_ӜPTDn ptJ`#_ӽq( /׈_*'ֿԊ~3y/P I(R SG9(7ï@fRa^$q] Inm]v-<ѱ]zh:(w1n=p ċ& (!>O!wΤ$q1'v&/뎶i=(#Ui*e׵]~3mhޭk\^@I~t?}\*|"--ޘ]a_&R##FFT^׻{#B#55E y* 1J4JܾbS:0~ _*ǣw 1R ~ v!(bN aGp#=G蕣lOrKy)mG~:ua7ѥ'[PۺAϹhϬBګ-ԢR]ĥRUᓐZqb<6U')1Z !x =9ߥ 5VrL*է1T;`M%ei]C+>r -]G 92d>sû93~zm+NLXo9c[;bclԼƍvp :.13y@WcljOCpE)OqEQr:,8/B#KϻmEm[)&2#!52ZX$HdjR 5cYt# Ƣ g.1Vζ. YT$ixV2yfC;i&ئ] !w$BjEMBk鿅1(M%9vya U+XsO1EQ@9,N5ZQŽ<צ!Mqt%ti#+jUsodMM8Beժ@T7M(XY5@E:Si)8|%Ѥ茝1ѻySuz1yGRv?OO{eٿ&5˃(IDATDճ}vHyׁm߬@]:MMMbijK-]EU8##cjq'ֲCRšV 6e.;8C:#{Ar.L~wS 4"0,J  ++{xԝ=Q(ӈs9iͳr<2P,Z@BFE+PDg$} WY1:81e)I4 Ńsl y8b.)(iO{ej_%{Ʈj:kum(j/H[^mTFu,'wݤn/^_6" SzMB.#!.r ф]@j502.P64ܓFhA!r6Op@w Fս)K,ױu݋۟F̑hjf9gRǦy[e洘vղ1-DZǬ bT1b2bꌶ{Cͩ:=p-'krvoB]*PZ1Fw]4sZh75@6P_ХBqs?6bx{[J@Uazv-;Sgf*I385٣1F&(3;<8&!+!  V"[BQkժjQA-U"r+uD@(&$ܬwyqCH@s{ w gwEv9xR[4$D`LXy?}*^cOڅOp'C]+_)jGݣeq?'rIMKGu㷼*tII#3;G??I8x8bʛ,,_0 g+sM;Sƺ(IB\n7]RDN ˰Mx06{/]B{5KGrKY $Ԉax^<^o"< WǺ"N!#IH!DHB3BL-LXBzqrj!WI'9!!1#IH!DHB3BČ$!!1#IH!DHB3BČ$!!1woLQJ)JXW4 </ĽZwyISK(Z]@EyyO3Mt?n=ZĽmZwyIC` 靗Y 4XWG)_MQ)i| Gv$ !4;ogaZXW0 |$˖|Z?{۵&s$r0 en >Z2r F ˉ:qO-q;x C' Z4DmMDlM0_:YK[.:' 1v(eou<8~ Q1M0-\v wtNࠞ[) JrŽ=h X¥ ; 7nCG{JQ`+G@UtNzokE$=8F);ڣo:ٺ "agw =闥e}j!s69;?U+ٱh^Z6U__fpQ_Ԩط1^\FkMkW+Qjan|C'j٧F|еP[MF/~?Y&GkG+>f sXzꝌH:iL^trv$Gjj>y .8ڗ|=S2=?7O8hCkg1ᒗyw1dS̒ W{+E2Wq|y^F{]tNX㛃بvc&;~EߋE+JH}->>~o q6Rs%(ѻJU5~.B_W,>ȕ/}ЅGo>1-BY/G2 29zR<&kg4Sf!Im`r%;o!B[x[6s}Θ1)fdѠZQqo%E%9(fj/e2Xu[x]& ^7I~/eZGa^'`lW_''L߂2nB~+V*Lxꗜ6* d8.}C)H(H$Ht8UhQJg|[O³5$)-E9T}ƟgW_NLJk,='G\wR/}EVsOnG?C )\ϝSc7a}PU-f\O'9c k4ZYdn+8.f͒\oZNG7̋8`nvȮ=lgOA! ǜDnZR 7(`햝hsE(PLqY+)fkޚu* xnzy.V] k7s8wK~jWVfw@E$=8CRmBeBP`8ї %T0y`xppKhT0+"4yؕ%=lt2]Iw/Nr2Ϝ.EuG09$0|<*.&̺sC>u{ńg&rb7Z']^ceq (!t;l_qwibaDy s1!ņu=ib}@GihlL'.$IX]P=y.$?*V-c]Ez-.-pv- W[8$H{rܱTЎnH@`ffЋ xIzEvN<$crIHTHG8X7*6&mM/^இ5ewm6egma(34Opߔ JTʈ.NcT3o7%4A &qpZBHt4 8p9&:1иLM6͆kMqY&UM{^#t#U4|va'Jĵҙ˘{)'#?T!ZBa͖QmGO(ѩY6 )$,hp'PMЏb\[GyX|)?!]ufŦ5N';=۝FN@nz W,]?}ޚrrt-762T9l.  C R]&) }kNң5:=L1m6W+#╻u흒k;q萫 ht6@etx MBOwu;?B} U6([:ps zw2o1m]o30l/1DpW̝8k}ok0w8Hr~I?;컟* ; ?[^i︷\|Z?13454Sƈ#q,оYە~9m/f{ ~vB]̺^M5"5[|Le1dpؘXs~od8.Eн}(VFVf7Ub;v\ƢvDTVLt}e8B#%Zu 9=?ϥ38 Ta7$8u$qEgX F%%2tʟ۹񬿰<71_<}/>8.cWGG4;^򝹜xTgL= =G$.8)߀K= ӧΘ%=t W<OvXdT$!+ Fm2gjkys}~fz{Y#w]Taޘ}SB z׳AZ`1{.yW,,xSlKV5A;Q0u1ܤ'nj4ē 8U #z`ϏŖ;H<./\y 󃱿URӯ~m;h4F"4Y\#8t88$ ű ][J[HajrSeuG툾 Cb r{fk5܅RjVꛢ9SJmƶmƍMT7yϙaXe\., xF$7D(-Nw;s瑝kZ˄Hcݘ^/ZAEe5vS5t_M =X舉u۶D"ƶM`g R 4\.\. ˍq?xh0ё$ űGD#GDYVUsu& D.ESG AE"XwhÆ5`P(edimepR99wj-ª/.ub_$ űM~rzr|䰱ȺX6VBud겻a ;5T232%; UsBe`YhJ7088h eN@qiuB$8֒w^݋p8LMM 5CAB0avyx}^$'%4o2&~H$ űz}x>3:FA%MPb$B&I(NFc2tZJ9ث]k.:/IBq0 23RXPA J9)XEf,Hۮ5q'NlrV0 t1n薸Mk.:/IBqJ)E8B5kbLĽZwyp\2M/!Ո;w!AU!1#IH!DHB3B䫗9IENDB`stimfit-0.17.1/doc/sphinx/manual/images/events.png000077500000000000000000000624561517235503400221160ustar00rootroot00000000000000PNG  IHDR}'.sRGBbKGD pHYs  tIME .nn IDATxw|U%B HY) uYEW\]{۟"l*."vTPlؐj!ғ{1䦑\t|nr̙S=sfI0PEQEQ#V_ UEQEQN 醠Dnl`do[UREQEQ q+ (|p# .0pb0g崺AGcy(( 8@P3ʲ!" A {k;Y(|3]8 }ŽUEQEQ*Jq.0akp(h"[AP8^=ᗻhl~0$t3N fP3raM*(( >piz>ePX`9FH(w&A=3E J鐞 n# B>U\QEQE<  JnfB'0qX\[ށ?=g;ِnνp3l8_QEQEc|2a" Rf7aq Q6M -u'mwf;ޭ9\j/ ٷw7:tȾ}z*+vp RSSiۮ6nauGHx}8 wY)I?8ª:H6}4.J\6{5zHMI%ǰ;zv={vCTtlR E\P_VI r:qfͶk@IA.jm?/(GsiնC=pSZRgm;ж]G#ܮS`ۺNê؛f?}?MBBk¥E~mgihي?̈Q]}_~10 Af2lvϘ t'))޽x#jƄb26&:ZAb'Ci?N!IdNVl9_/z{UpBˍX6+laU0mt^,U`y؁t7='{\MRX8 FE >ِk_"se !U"" 0mm{w&|o!m0ޙ oϴLߨ 2:~.l?]`{]bVNhN}_(Sn2 j7R#|*d ;5;0 'hr[ Ielǎ&Ҽ/>з=G0*9م·]:l+O4Nmb*0XwQe'syxcռKݳηVZ_jҥ-f#m|5۞$t8k~~ZlNJaŦc؉+7* ¯XCoPޙigoMޙ G߃exϘॠ >ݐ˂:͖Hb~5_VΕ-qWQĕ/ ؘ_;rDE8oP?B+ *vYy]J(u A։2cǎ1R:йk0 r#QڶiYiӷMe&8N "¤ BY5k297q_(-s1qܹvs # 1,ߟ]ǐNE\pF7zۘgd|TKiYǟ r-rJXh+#Z?&<*۰p*Ǝe_v㽻^`sU~2xU:yFI575\.a<-IdZ=mݽ3:vk7Evumҟ&a~ߞYǨ2܂:t1R{H;PwpY[r3qNW>1]rW8>n™N{9r5 8 #$:G.9>}{ŻlMAQUCxw+ѯg `ۉL'$=[kˆ_ZFt)ԍo|jpwMRn|} c`C{ZڴoD_:0ػ/ bbgrN"J\fA~k.+_خMD6"#p^1%C3ٽ_N(J -LD>/W a*-]Vj3K}I=Nmqoqƒma?{kY 7]UV]lP D0"&7)i,{Yrm{rEe^3l]CJb9N7n<X{ӟ;Nc~lUp+ٰG}mc+C9LQ~'^\R7!$sKkxoY% {ճ8KFVVlDI>v.U{XvC'`:yaԬq35 QVVJn0 B)bPϾ0s1,`;$zPf6(䟋!M)?V4f,(JJkVc<_meCxL>Ygs8M|0 =E}cpʬY,?ofc,.;3%5;AvX>l2Xř7~w./~uNg0=w+׽7fwV&9w`Opœ6|s}@^~!} n6WWerl8ʂor 3^I>ϓޱ j_e.aSۘVlFwGܵ?ۣ;o Ċ<09% zؔ7,|w)pֳm;Ϭ<@Yw8Wfŭ]%DC6[FY=VAθo#;/2xdg|jK u[} ytuO6>Bc}IgȦۼuȇ}2t^ަ^ub̼՝tBzpla)1yslk>}XW<̪Xܺs{ad.u/.bhXk[æY:_,a-X!dbB#=PR%r.)b`[F_rn.4G$qGǛݠzL)~<䖑-xu>x.vb c5/O7ӷCgU}P9Rp͈ wob$%Ym6vxGEA~wbL E\gubJ8?wvF-LOaNrL:Wعud ~M=cBJ'tسv!P|}P;XE_;1[4av ir9+.t#Cxm͝cZRZ&<$fQ!6L=# 9c0'vF]jPj  2k">8wI{iJ $؉˴Ufxꝲ?)Oo:2:PQ&lT*WgtfPH#kUS"&_gNl]FtE!}M 4u\0% ӴYv!/UZxidue>;.)1m~u svm5FA6ނ'/mGiᔚv@{~ՃfDCAi019o_Ӆ(upI|tPND:p^hitL g?OU"0K l;?ñc忝̚?%aI|pw I~)Ą+&A6`VS7^[5 e鍧5).C)+Ax6m'~Lt@oF]* tt xɓ%N,"=y-bװtH~19yh1'"X~-۷%1<݅A]gPs$; JJ4h?PRUR1j_رxw;n K] u:wmUk OaNf3fظ~|H oG&{`9h3ʪ&)Gw¾}}VȜ%q|ڃ=Tf&B#O8:^ӏ{'3C9?䬛{ ot .s]ˏ㕻뮃g & mW+ Eޭ<6,Z?9 aDAlb{:-ܱ%{9~4&'XA;!6֭+?aq2m,xŠ0!+!íH*p([ SH[.|t"Z-7bɮ0k_q#p jl['T=zUܬ^p[ngMd{($sn2.-9 Q3Y븑ˊpTzetnQiGd;&O? ?W( UWYunWxL qy/y]8wY[roR/GG>W #<ؙR4`An=h|c/ .{s.;xmc=M}ǎUR@Pܼ߶-U}mXxSFqdspLUutIKh˹' sp.<_‡@hqZL>f" ϵ/ڍ/yVk.Þc'1`̾kY&BXܦHQHI%c<+S駿}]^yey:v4o?-ˏZwoYUv˭Rtz<Ӕf}k"{+D?W>&$9oYo{~5x6lqήLS$'ǿN~?jt]<7vëkAd͚wcgSE3Tdž sY6L6m=/='QUlW?65>շMc??_a~x3ߴB+}AŸӭ߫.?];Sx}U껋?.=T^!ҢEݏ}+8zEUT[b=xw^mD4q2=~{]翿Mr5YU7a~*pHbȟ,'|H۶"G[ygE :Ɲ;E''L1c4>rܧMff.EbcExu /XWtOj _}%ұȹ'~H^"}lhuCtl9GL,Ҳ5XTd5m*Vwi͜9V}-V].X`uHAȲeV]'%zeg-&mH"f͠8 ry"ډ|ȱc"_,ҼV]EG[qYy5vg]{~b~-ټsdUwj g!um8+Kdr.(>*knwQ IDATՆD>y$6{5@#ҳUo^ر U3gZ~y+ͻt~+OeO7`…V^m٣׆lev+V~i X,'V6ƍV;Ȕ OtjٲmCYg31QdȺiˣvO W maBȠAUk%6'^}Nj+^wWooy 'WXҺuܓb}c?y-ZPP*|Պ(gx JGlг&xpjXx,cc1:̿wͽ~/}[0>Y >=i=(rl))P"df;hZ@XFQEVV ݚ}mR((u$}UEQβf ,bՇo((VX(Jcc((]@v*(-),f0m^RPEQ9!EQ!o*,R1EQ |O(Jc4Ɯ~Xb((Z\\dEQ@PB1;I7EQ GzO( xnH8b((!,LP%pO#ykCQEanBQLt񑊡(XNhn.;B(88g_ds>CQE 9YP%p#/Asǩ( B(8b䒽LCQE (d?GCQEЃ!+KP%p Ec_T EQG6в (JH)CQEЖ-Y3BQьqK;}G(öw/l{@F (J8>nz֭VPEQ,'t~8xPP%pdGwiCQEЖ-!1QP%p$Њ_>g( dHJR!E i#(ہB(8ͣI==UPEQ,'4- W!E qs[嫏U EQGfB(8bhԩqmEPEQ0>c2l*(J0Ҷpڎ]PEQۑ#B(8ͻmd*(b9۷*(c/үY*(b9QQB(8‰u4KJV1EQ:A*(#"JT EQ[a!bXr.Gťb((mle\ϗYt(XNhP8*(É6Q1EQ]@v*( )|$>(`3MQ!E B)%VcQ1EQ ݺU U%"7?|b((vۭB(8LJU EQ{BE9 =K8U EQ[p0 I֋&MU EQrBm]TEQn0~|CQE(,T!E E֩x㈈EQ֭!)IP/JYiYpCTq }2?8994R M9+/J@ej:|VS_zxTk *6fV-?ǟGo Fon`W3fwߝt{.OM.5jHՅ;<յjZ[?o8:k<ַl/ 88эeuР!iַNflŸz]_C1Mo}Z+^ iK)-[HOO?i_f9rdʶlٲF?06mZ0 8222lO>_|{o ;dc=0mgq_|bwua}w[o~a1 /0[.ۨ*{ꩧt?>-[$%%/m۲zjze]a̜9c2sLRRRh޼9a0eʔ*m0 [%>W^駟ҥ/o+W]v|w$''r*00`ԩSKר(\.+WK.̚5WN;-[_}||ǵݻwf `„ rmk=մy椤裏rꩧ̓aЩS'/_N/ٳ'sCnU'))L:uDJJ -[񫯾u~e>}m߯_.]֭}0 }vq7/a0v*DEEpҹsӹsgx >#ڶm'|r1lذfb |oZ۟=y?^=(**m۶ܬY3vӧ3efΜGǖ-[|M6x+-/2))),XϦ-Z+GVo0 kQFquUsZZuK SN'N>^~U=..NڴiS'M>oq_żmذAIIIwyGn?q^xq?ϔ)ST.@:걦ϧ~Z81 z.={oVFEy駟@_~KII-[~~w5J,Y`jҬ.^{2hР:6ȃ>Xr̘1J^*Klo6ӳgOYj JհQl~Xɓ'˘1c䡇$%%Ɉ#d̘12fi׮=4i2qD;v_~aÆɘ1cdeȑRZZԤI;fygdڴir9爈Hbb9R&NkƍP< L2e/QFe2p@ɑ>}_z)""W]u37n,ZHƌ#X Q=*Vn:tYf{ӧK=d2f?~DEEIMx7n,^X.kdڴiBԩ%$$Xbc ljek2b9v오׿Uz-L:UNDFF+"'NKرc-""!!!2m4tʦMDD[o_d:UD~AM.ҳ~9&"kG_W·zW:ȤI|Wڷo_#F~ O"]¤`$9n˱cǪ?5+a1m%~…oȝwY%lZZt9>bӕQm""&M}3g\q5ve׮]Se^y*}رcϋH֭eԩr7֭[͛7ˑ#9믫V9+l9r䈤ӧ˹[m[n-^ڗ|Ŷ]QǟÇ}mk""wuW=*7jԨ*p 2~x4i"3f̨1-[G999rg޽{EDd2f7oرce""ҧO*s9Gkӧ[O4;0MS ՘hzz#Gj W9=oVWMӊ&7,kWvM!2~ad5믿ʗ_~gk׮i᥸X_xoF-ץ^*56bi +:wB^Crg֫.4),,t9z̙3hUSN͛Ν;_͛7믿GE[c~jr0*{uiҤHV"6[sq:HbȡC⻍}EDj-咛oG<Œ)` ]<6yWm>rss}߽/W_C:+""m۶-߷p1Ob|4.bV޽{7[nRZZ=lHӦ_ -Z4o.rAMQm_zH"AA=p(&w~~ [oy5wמ'4H~ '_ DUqRrT_)<@R]X*~C~im޼F^^M֧in:8jp*9{ew!!S$)޵KD jի믿rw m1b5A]SO=U T)oQQat:eƌ "";%$d$$lxUDĺӊx ?.:W6mT{\>Ts饗;N!Cgfff뭢^S|uѦ^,m*7z &֤$%$$f ٬a}yf&M$%%`ݣے.ʜ9&""Dx=8 VB.{С>xL-w~q:PJlllOl7<<$&&V[FPV^&M|YUhh(IIIDFFRZZʓO>鋷7E{-lҺu<"qTݦMߦMNqUk :@a!s8&SSY3ˣNv̙av0`@ tt w< g-CAC4YlYy7࣏8yl.ն',. /Ν} rU-2??JPytQE/ÇlaruN_|`\t?}a+,F>BE>֬Ycp@&D 3{kΓw{b"0~* :ڊBB <r\i K/sf+ݮ]-0 gOŅ"##oc2V6uO, n7_.,;!>y. `<׏:#Gr˘P1Fwglx|ŵW86poL8w,\>HKX[PL~bW[Cҏq_&gf\o40T%f󱙥\ IDATtLS$#rϬ^ÄU$$HfLS$':fJVϰLrRi>߿QӬ|.L:U #RbcEvJx^`Y37ǣuPl{->>7"aCq͟?7k[xmED$4JXdȐ4ڽ7ƍ SO-; dĉ5TL{܊mx3CcG&P J+CIqqo'>lʭ,"\`m2ݻW-ZT)c oo嗭}%X.\蝕=EvJU?#f] yzY233}e{1oy }ǀȳϊ8.˖-r[ |]vVs))봴y!35qE"Mׯ#b)))f˖5fxO,t^)nrJA5̈́VHfϞ-YplݺY>x-㢪YfIiiiu}d{TH'Ke+'Bu46$>+{|ؾ:}x,Y`O0om\X\.k?Yʄ9s3;lଳ`nO\v9j/))]tCYeg[郕0̞mw<x>ba:x1u.3's{isMBY +ïnA CX.2*)/ٳk]òe`3ee6m1sT޳5krUe-?oM}8DY,Y11Ш7VZѲevkZw'x_C`^n2uZw}_z~)XO1MX(Ôrļ{~~ \c0UʈmJ˖b<ǖaMٔ)Uyq[ss&8th>E!1 !exh[. '寰Wl+."6MvӒ7p~Meee!n_G.P bzrG*uZRRW\Q}4K[a9487jd[9ڵk]wav5"= 3OS60`@Xmܘ˃5>XY{_y瞃9s`\xYOyq(vXqw2!7yxƌ2\yx'sᡇ :fO*5|39XTvvh*kB(æ81S6Sye>} < {wc>;xE᪻zwv],))1#G=7׍w)˫~,rs&tL;@վ1\j)א*X.-5TVTSѫ1O5O ۧaD/_/yc7m>U5r|ltִQ:/7mۚjvY֮/-.?TSTd/b) Uhޕk/3`̙̝ MI1r(ݳw?/Ԑ!tH4Ƙ2'׆QF7<_1>AMcЮ ~+.6{!+R}cv9'Fuv԰}ۣ[g$|~QVG _}UҥK |>.>:WF'SQa~{y;]ˡysض `o*.^kM W^^[hC&k wdeAN}@ζڲel-DgO{vnjn>yrOl,a#t#v}|#8(.||5+KHe)=yeptiİzqe7}Ml ؼ.t+!Clbvs]y:vvV;?>޾c.]lW@Ɋ1СرDOl?u<Ynns 7vMkO:`͚55ޗ7OV߾ en)GY3m~پB'c7<{$**K۰$ԝŢFfjXw`.S5֘mr_ֶZ|qȑ5o1_ښ$/޷6 X9ّz[j龿e gِ㠮9$.>ݘcρZcu;j9jʩ k ߏվ)ֹ]ױtqNyW7 u1Ą a,&^X̝[wٚ5uwvo>WV۸x0WǢj⹈UN[ox#=j@Pߤ.u?\jo;{w{reUܛWݝfNn<`#CkKysxhhw ,/.cjvG `kךmfܥף3&X[UZ bk. @aa!Ǐ[o ;Ǝ87l nft[7T'#F`СtڵjH]pYKאfjN>6o_ޣWuo+$'ہ;wqAjާSL$\`kA?aݖ;_̍7VwۮSSOSԼlx[3W^ Kv5&5T?v*(Ш|Eprs[{^c[>^;y(^k'lpkcc\b m5ݲƹO>U [-[~&Ra*_ -.!5QQWC;-Z}s&<]CׄFfGܻS ,'81nu{W2 w̿5ƚNf~;ukΑ"Ɓ1˗ms-+/wV}ׄsM,.6c*6fj;/Z|)yB1y' 0 , +my;DZOȰ5h _Uks믷w.7+eP;I'9Oq\p:ŋډ@ ت5{t_O??LNN˖-ݹdzq\o6VXA~~>'O֐}hϑ"ƎiivŋuzP`]_;Ӄ[:sf-딖oqq1[~32~]9p7kVc[[;xMVuLjg0goVZekaC[, vkhBgPZZC/l3oY-|Irjw2(x]7gРA,ZH: \݄Ԗ^vIܶ-8(.66D;-[貚O \ 6/KJ ͒ҰcG}I-l!9p._q~ Xh~,F2o$6oC^ej%'k@jKB]igۉ<|Jkһ}aÊykSk ><6䚑͍Ĵi_t/![*Moekdޗe'S U>vFy¯|`g}y}3PPPҥK̞9Üyn?e׹]xaub *!Խ;X~2_7ؼ͵7׎9x0|a^yߓ|륜uiHTzF*-/u`_ڤ@ +wO?;3?!7( "R#7] ׬izEDXpl8ZƷV0DDj+"$cG *""$8J) ص-[ڵ xgkƇv!""6 DCqt#CDDAJ!"I+ӿ;Nq 4偈xˡ1OJOxmw:s!""6 --426fPTKrP /%G 㽩 k*"Dk,Z8~CDDlr%P D;dC2/ Ihn.+"lݔ`!)It&7ٓ:wV0DD&ZA|!"iA NtJCDD^ j!g-Wݼf)""bЭ[a{!"6}w# $4%:uT D;“>)""ChF&mzM*LشIlf3#:ƢU I @w װtW ڷW D;Hv)""b.] 1QtcNk y3Ml#X Iڵa!"H#~`MB۶VNK2$R0DDnХ!"Dg^EtT!""rr`NBDG&_Ƽ bL `}ԳZ SϧCU`:N&+S|) 8 Z4i(2O8CqLfM<]M0Y ӌ[Ӱ4͚iwь'ӦMCDd13" O?A2y9/'{yRX;7ny׍c;rՓ3wƷРP_j*$'kwƔwpY qj2gO탎rtM{L&\HLP]]۲(mmZMY̚g8)/M`vq՝Xֱ}1 ~A׍ζ u4@_ؑ3atp##3}rb H1oxeh:ܛ99ۙBы-hNiD7W0DDѧ=4]s粽G\u|F<;o\}㞥߇,CJoBېm9: ]8ד6AJvx'/LC|CDdqQUfXzrvا$$qIhDiy $VݎoSQ""{Oىk`sį'G_z2XN32g[ q"IhETIz"SV^`>"$ƴH}g!""bb &F4"%Ѵ\ED2 <"L289.\@a!")RٺIݻ".{=9 $4>N-Tb2V(""ojT D;Y|w_ktT&۶ xg'9|q6Y(""bЮ]sgBDӑn<~4ǝ_AB!"I%7m>G˗7*"Mldx/T0DD&6- xg+xe/`Ν!1Q'{oIe 2 #""Rŷalݪ@wGX?(""bu`'"zF޷}`MB۷6mNk34#8V)]S'BDӑL0(_@|~c;E[;_`MBWLBDU\HC x'}FګX!)It;p^`(,T D;ElR0DD&+V!&"u3lCDDlڸ1("ӭ|ZR0Ds; %E$´ũiR`mFvJƘfZ^$"ިaDZ" *"L͛MuڳgfɇᇫЊ72XNS祏f xW>c@7 "ⵊ Z >"$cܳHySCD ƀDe k*? ;'b]hv?~ICD C wǴnCٙ8Ccaqp 81J2VzAzj! M<"ue`33CDξsٛ?â'nΚFm9Lz -ff9c}Y6{rBkFwW|t>ΌLp:K(۾Y@IDATьί8W_Q!wJ(dytgvlW0Daʘp@Z')p0kÝJ.#i(%k{rxk8+ڴm+9cqG6VλV,xn<6.3)NGj˭| ՟ *g".0壞~!"Hj3aȩCitSlh9>GEjNWp 8#hq֟8?+÷J&7fwGMî+/.6SY4%E. x*U & C. l<:× /^~Νhp>~KJrVcSU-  @F4^z-:u ?A][ e|wX%C͗ 908>3a@-/pg yW1)#͉|"嗮LH.نS:.'q1@cN,bi gbsDjAãfTD?OifqoQ@DoOh`e&S _Տ5|g$|.UD;Ƅ8A jH?aOZ7Ϊ8Np!W{um߶ j&"iIa8"!"19$ߖ-}!"at5[7(""b5k +Kg 7włO?V0DDB+"6t옢`3̙q FPFt \W D;eC!""6 ]2t]e?q6T6iM("XrT[""b 9Y$GnU"CDD@Y!")ð3(l`MBaZBDr&s`MBcbQ!"މ4NolIENDB`stimfit-0.17.1/doc/sphinx/manual/images/falsenegative.png000077500000000000000000000201151517235503400234110ustar00rootroot00000000000000PNG  IHDR{Z LsRGBbKGD pHYs  tIME  ĺIDATxy|uL6V[JCEVDDQpGqyaYDXd=V,,>ZQAETp9ZPG\Ѧ$L&I4I?o_yI932II$Q\DD {""bÞDDİ'""=1쉈aODİ'""=1쉈aODD {""bÞDD {""bÞDDİ'""=1쉈aODİ'""=1쉈aODD {""bÞDDİ'"bÞDD^,+{""˰gODGaP'"s>oBݬ?ץk [-WM{]i| :`EXq4y].'3zuԨو!q mm,sgcIDN̿`>*֮r+lYk?wϯ@0He/RjꝈ⽰J ,PȆީycF{UO>ǰ㉁4N0 #5FB=Uuny.FU8xcU76bvv 5Phr'?'[CyV:y[/UuΟ+ h,X}- Ycy77u=\Mcn=wBdear(QeĎ/rX9z/ LxA!l@3*'H'L}NT'H-r_ ԆU$\]f~6]Fb\cEv7@#>Jϗӆb>g F*w?!շ| W˻;3دjP6rݥJTZ?/~}PW8*P_׊F {g-}g}lj7hc2\ըқ; ApWѲCjUX}7Rk$:y+qbp(#Ѓ߀pV=)WkG{bwCmyh]hI+@|;WU5՚z6T_Յ{Qk 1Zp-gX=1Db9} T>bBu?w!xW׾վPn|( 7U=ƂȗqP_VgPJXxm<_ꇳ t dYxE^Q$쀑`(;Bn#_'PO'Pm3z\lQ[g$.NNj?W09IXcʋ}v7 s_r(u#Ʀp_OYMt:n+Pܭ;~&oj7p~> vv)b:1J/`3!X8be{A˰)jnZD4ėK Fw_+a |U3^*x7 ax=fl!ÞGy20fj?@Dq^ L5fҗ57-+y h<0x bGauA18eIqW3|aϪ( =1쉈aODD {""bÞDDİ'"bÞDDİ'""=1쉈aODD {""=1쉈aODD {""bÞDDİ'"bÞDDİ'""=E!f*IRP5f Q=- bk ' }jаW v9CH9A|>Emep:'"(z@ a/W;vSE sWȻ>"^{p8[.{U6]vU' +݃]^3A/xT!I4M8QD^ov6 v\5Z:ΰ "Z+׹ЭW쯧 {Wwl6}q+ wTUUyf)"NG=QD^nd<ްu߻?XS+{n1Xvm?{NE6oLj]w Qjk''j^.+3_ cR tDǍӉSq1M^nC)]w+)>FCʞUf;dn{ܽ}5H{W;A$ WK+a۔y2EM{W:Nɠ'?x<gГ/W:; yTƨ`kE7'jA<^ow{W!CX t IAJ% Y̛NQYKCU@UTwypt_1t 0ޠ_G1:L=ǟsMar/+^>dѐA9ekFN= n &訩 qSrԷ}zh[ 8lQ\}22 $\#>3tǃڢXg%s >X_)up_k\rJ5Rq\9`N>*5{t8倱E#xxT!;n&e(Ƕ<.XA 6-We!F ' Yӧ[:h4։3[LvI0;Əߏ2a In99yNGa5GSmq_XA )#IvH HW9Da/yv)+ᰛ!ht`CEh3'-aϟ[{`5X\z֮.ousV׽_|ݟ{&#Va46; M%'`.lylކo߼괪?}-rl^SV`0~8,ؾ{܎!)6Vad:eA5_jXMzob+a*U껍T xcȘJXZO(ǯcXJَཁ%E̺)r$>kx/<*g6L;idNzK}́p@[Pu0VbJJuiE?cpTGQ "&mz+~^ Xx]^ YpYh}0.GeH cƘfn^wB(,3Kǰ+'=>K# K>`Ś/N$ ׸~,KeHzrèMן6R2 WΞ‰sgoYTߟy1TܬIi|Wm|?{xpd[8CX nܹǎ; ق O+?츊O(qb \}(\[R=Mׅ8%`DZBSAGkZh$'rsPXrK<ַ)BeLjgEϾ\Wݭ4 P{\e@PXOvFuh#&4X!pM7^mNv|?)ꑙ\\j{Ta0Q< n_~c KNy:u h`EeCk:]mp^3MQu"-+eu@y>Ş12]w]zLL{p$bv `r =VT,N$%ha))Ś5<Ɠ[#]ªU9N O[cz:݄xwl4,,h@S%$lèLW_mgl@@fM|E^9< ?|n1i6C >~+0ېsʸfeIl x/9ϹFPZ3_SS<ޥmƤ 0>i@b-*tq)o ?AT;I<~kjbl6W A޷s.տTԢ=L&L&F#^NW[>{K{ {"=y+{"{A@$!锽y(&>5#ŧ72܂)fd1(>>㞗qf--MB%DD {""bÞC60y(a/ߕ:[o-[ڱB[(y<]yy:rl$DDuCU}/^^0309QQALgdW;*PLُVg<m2;&.+JUW(o};?nce.ۆcᒩxSQ;'cžrHe0D wpbRi#"bG\e6vC ⹧7! ߉E 3@?s32^E>]`Kbց;y8qn\sy)Sߔ[|+Ċ_mXQJy I/s!; 䱽_?rp0{} '4\Al#"b؇CmթgoƠ[3C % DUx[46"`.v\9w.ZalE_!۬ńSЯ l<4k*ҿل2˦6/9 U?b== MYfc̜$zeOLC'&pJay|Ŝ/IATUqdrzy5< ^Z9 X1bm?]~xK(,ڻW Ce^RLw_@_߀S1+KT̚&h|kr}N+JcF| ϜFяKpէAJxG6o1VЦƌΘq+:}qc=WQXY +`h*r'XdmDD `H0&#)Q;伴?|N[.␪OTuăV, ; .fXyş`bCȎO0l{YʶadXd*T}uXR;>Fha+M'`'7LMKyorƹ"+.ێtҤU0^Y/PB_98/tES H3nxi4,|c!,>ɷaw-(kj?xUߺ j3%CZ4 `Jpzl_wYY:v4Ad͵ :pxЊ3ageT8 K3_{MGm@Smzƛ `^((3ao]cRD?UۓeW1죐R|<> /O-_? 3l- +F>6uWFޜݺ "v_"n}q-no]'Ӥ!яybrlOdnN`9itW[g5(7]Tjj3K1##<ҵzMCŪ؏u1ǸͰivp0Ϯ2D IR Ip8`a`ZaX`6QYY}_Qq ZddhDbb"jh DDPa///Bp X {;(Qh4cwE=HDAX`ST{ȻD6rO`a})"4 [aơ{׎ZO$׽r~]Az!ڠw=ؕC>s8ܟ$ Nul6laN'¸xD}pz] kZt:t:zZOyu: {b؋zQp {nF6Ԙ^.]wVԠa)݉ zV[';J"he~I}'Nj{{kO`aߵս |jAվXѓ$E M݃[t: CD⾾SVrw {Wށ΀\r'|t2 j'D?C:쉈(=DD {""bÞDDİ'""=1쉈aODԨ? r#FIENDB`stimfit-0.17.1/doc/sphinx/manual/images/finaltemplate.png000077500000000000000000000205621517235503400234270ustar00rootroot00000000000000PNG  IHDRujsRGBbKGD pHYs  tIME*9 IDATx$}ϜvMĠ`M}qD[2BMb,c RD UӺq 5"bBZVQzJ)֎1ɵI|g'uk1uW4u+^1:H1\hR C~M]leo@`L!CSj8j=1uWoo >@)7u][~V|U"e пuk Vrj &˄.:,+4u_|ï@ZVh.nA׷]sMWj^lV5}QkۚZE߫VLu>1|dӵX`<=z$иvSȲ,"CP@P<_J9sh\W74/W^cUwms(SYmnnk}cVCA[4Voc.ogT[ºmTt,&Im~4zk?;tuߩ)\-w)lVwza+׶ތkL] ξ!jU]\;e,9Lk[Xgkm:XK(kQ+~^\5jPgLrAmYuO% fEk:MݒNj*go`wC[ylV{U~c uc_W lY E]m/vsvlp+6u[ iXԊն[.Y]gL݆ZncLt55άklV{}(mK.X%4u=tt Mc9 Z[k ^E@k;aqfAQn-vE,CK՘Da\SF:_F/X=juᬮY;YU[=gKU[IS/ʟxJ]Z]_!"5rkjiƸh6uwZ抟5eP5?75lMAn~7g]&e'YܢWWSf'! bVhꎴnO S+h-_t܊ДePE,jhO]N(7s<\ч%4uk Y]EY SBS lT -.C'1uIB){+wme Z%W\g--ظ"̕!Zb\[u u_yMP$\E'(*[ΡQNS0Қ[o][rSytl&$SUי1u@nY`Wt|teфc ɗ IzҺ\tƃq.:"tV,2+Xk6eEk k՟7-[<# m㍱:ۧW`V0}ձn]/Z_77g]/Fc +]th1uɽ.Ϊ-, v@`tV^5VzkgZ^Bxu~`PX|דP65uip Xr׆n qCuھW9!.n6]y4BBHKPPo#eYv5L]<}HlԺm  t0Sh­3` WÇJj:Z0uM]ZoV4qWU|Mɼh =Y,FO@+yպ Ր״\g];4]a\rm6*OaPTΪn@yFM[4#n qO!AS֛|uebu۸D`\4uIYqߺkqma|u8'M]Z;Y7誷MkVÝ5u)יBahTm3 cHԥDS4ڦ1/󓤦.fNjX4o[3W|Hԥ0Fg^57&M]R!\Sn/^CM wHԥ1|5A.j0ƀM]Z;c`eR/k `ovBʓ9s vn п;Ff,Zq澗.F++lvU`zoe)ϓwfN y[:!WmHܢʇZëj{SC{N9u~H0.&:cHDak#W,kßp5uIU,E# W A`'By ᫬. $H0U K+|>'1 WU s!BxuV t]ҸqulfV{6jr3^7Pc ᫬.Ń iz3jk4s}5u;䊀Vƕϕ8|ԥ­3v(̕C+=4uiYlAc檁xNVfs9iR FS\>!1XcH0.nuR3njsEB 4%"] tMgڎ4ui,︳: t՟vا״Bxu( tdmظbl6?Kא4uk鯰κN>h+ߞL&sa|e<ϻoGmbL]R!|uV{*ZDV 6yWM6BSwuY BL@/($h hꌩH+OKRF.@.K.UZ6(@K+$Sl+ӓTÜ@;M]R!\SL+PkZ`g0LHԥ : B.Tvg$s0lHԥKBXOHԥ5uֶ~{4uipcF(,.Us 4uIpMݨ\U+\Hԥ$]+3[)i ᚺф!`!ASV0n֡vM]Z!\Sʅ@]w2l7$h m,C\qՙx{t%(v C:d>gVMdOHȇu5֍c0Wd8l'{#uM4ux2 8hzo%htkJO^ ݐ״‡ys&HdK*k t K+n@7Lp~؁.[9̵$nHԥJ$i+J$5uܢ" icsU :vdgL]R!\ST+nu ԥT+{!ASV-x>_E;g9#$h -Ե<#í4uipM]0M]Z!ܘ:A.kx;} ‹1usa!WM]r!\S7wl670_Hԥh;vu\:7$kZ!\S+_`Ck|L]sᅪK)e$&1Qn'D@[H0.>@S1ƶm:Fɸxs_73~|㯌,:z7v,;ӧ0Bl6-|"eb=A9F_?[Vl8qMqkO?Yɸ񥯍:,o҂͸s*>?~^<!Y*(,f\QyxUYdoKx/<~Y҈c3S/4rq}Yg@7Lb2pF[y/qg|u<^u?cG>="~9~Kx? LS]_gY' i8[q|.".yE|U_SOKx?q*rx%{c|^eշO~Ǿq4u)=Xg1t~)>vYD\v,n>~:>~3ǽw~O~p<} _Xxw5G/{>yC󙯗_Oko%ͯ=9}5W;G zs<_GngW859eY`7)3R:+ZCgVZQu˯;l63\>ɸ[??^;5_.= M κM tk}Άԥ auu 芩J?AѷOh0gW\g`WF+ ]Y; $85)C\uۓW砫<OHԥW\gW.E@wyM]Z!|nvʆ.E+eaxK*-Pb @CM]Z!|MҞ@CM]Z!<+K+qL]~e53Nk Bؚ6t:C.>1u _%Е04ui4u@WyrKw2!4ui𱍩 ts1tK+dh tB.>pSWlr50l+$o.n n>_5t0G=n!|Dcꦥ!fn-M]Z!|$Mݴ*yN8 l"$h #nOl $h [n,٬_ CM]Z!| Md29<&nfYv.r+B.n:&'J7`!ASV_CS%՗)ZZl $DZ!| cꪁnp-0iMZZzcdY|пr{zd1{Pw/}_F4ux2mk t /#4ui2+.U u9H&qj#sii MrLke85uR- rSWjh5u=?Uwmv탛y8b?'_hvkw\1-dٴP/[dL4ur~9MO&cPg@.RSWn'1u@Ch 1U-6@Pgm#oS40Mm#S45u̇:ny˘:!mC]LUYycntrdܘeeYdٍq}+#˲x;⾧Zg[ NSnLv-qG~Wx{;;X}=;>Zk[ B1yT|q⚣M~"N=W왓qK+oW_EvwʼnrKwxp㑟{W_v!??o'μhGKԥ`L^x*=8vqg^hX'㡯<cǧ~/??O?}0sC8sמ8p _ʣ% uNJ@S#kHƷ4+G~ϛO^Et[||D\g-/y{/r"O(?OmQoc7ldٴ74u[ LS4u oMΦF2h`:= tIENDB`stimfit-0.17.1/doc/sphinx/manual/images/fit.png000066400000000000000000001535041517235503400213640ustar00rootroot00000000000000PNG  IHDR9CV^sRGBbKGD pHYs  tIME&1u4 IDATxy|Es&$p%"7+{xuWwG]ocUW Q]WK BIr{&d3Lh\?yk]5]5UU:X3.\W^ v{Y?֮|ٕ T0`'%,Ye]= g0r;:%%]+[Ts0`n Ha#qƲ2HI)r^ u+}b1:€ G'vuܑH%s[6_|{Z٦;1mft 8ivbWNt 0s $oiip}ʮ4!CN0`'-֬YvbWΎHΔ)0z4G¥BF\\= }~?{/$&«j*)'$$ Ar2vx1p:az2&M#G`^?N; vֶ. テ::SHO\.M)3&O"سN?.<>ٳb--3֬ZziHR3G+':<lެ yZg~>0`Nn-iY9qƊ0H?_#K@[ cBQH 0`xBqq1}i=qRMbnDqF,$ѣԧAS,BUr= 0` ~K[6]]8; H2~Ftm꥝|svQw  0`N ?9ͰUXXqI󟏝enFUU 0`I 9?%e"Z#.5ezjt' HodLuYm'vu:9PP0LvC .Hy3Hgmt'8imj5[3i~-4,ݳp$kxy:θr%w^ iN8 ^yeBkt'QUU_BG8 fDtB&m2#i& <A( qca ]#[Iѳ ~6kRxw}/!bSݻw3zY8;!iU'UC'ǀ8P+;$$Y0?bZZX,L&S.:9?#e<ke dG$d&u?,q4/:hoj @t&#VÕ #F辅# gHr"ѝ~rEtz(~r 8!ɍ(^/^WAt7T'%8 ~: LA[Ly~V^H>ru? ,>=Gd;U.~JGAAA-'#)}N<ɓ˸|y׿vlWEr4`D%8B Zl! n0ˠB0z4 L!92H2;=Ҡp%ČAwBM!iz d }'kҝPuD ͐gѤ 2%80.'Bo!.?E{ 7xqI#:R'5 A7BӜTDgƍm'~Ar$Ibԩ?\ع.keGD56ϥ'8iqP[G߃}TAfb,HH^mA4l܂&ѱۡrTloI0A'P)$r-k= kt(r;'lx M^r@J(2q`O9̎93wo<I>C']rI!Z CԞBNDQ!7b J>8 kU KT0C*?:'$ ,hOAAE$'^kh GEP5$(^=U$iߕfK) K^(7(ѐvYS&8&[ ms9ķ2HO-l\֬Zپ]nft'6AW6B|:$Y#jX3m mI@?IcbπcF e2~,3BH^ 5I8j\)HlD<@+=&kZjC'$9ATսAYYY-2Lng@^zX389&FVTTD߾}d|٥!蝖f< GPx^<^/%aU֠"qPFRU# !^dM7DH$v.G)GB`>%=OKlLud aA[ G ~t)٢) -2 PjXA٬$C@Gޏ@M|4bbbt몐ZOyJrV+wuCo; w.zjYz~"r,V+x0 8 iKh )4 !* jkVM~0$Ir$5Laڥu˗d9]fM2$WW`Ӷ?mKۦ mW5vQZ $ //G^`ٲe[e‚F!~ص !B0`D LqCSH}Oe !ՙ8q"ݶp$GJ-B睍ZF)Oaa!~p0zv5ы+;Oʘ1!0 8 7Bn0НP}KB"C^'.),,dРAr/Dvv6=zIF|饗xǘ8q"k:t$''3rH"^8Ssi>z+on['SNo^u뵎EpB233Yt)^{- HğVQ2c xyƏ-[:655Bl  hON!\.º!^~5cGMM2gkXz5/~>wo>P@$JJJ>|8B/7'[v$'66b, rKGVwԫJ𭪄~ ?;zke+ډ-5 HSNGh* mMMMF@o\tNC>;vuWΎHiqqʕ~1o@?C:PAՑ$nћ6mj3E^DA#7&M뒣r4<!W]uUj®+#GɀdY8fSk,xիm*rv㉜X>gwe""osvwc6Z\Ǎ֮ibF%L&9^-d,^}Wݕy\r^o+ʼ˙396x#In^wP]=:e{J$ uߙLݯwO[!篾o6XlYuMM|,^9VZ (IHHh;TV+^{-YYYL0l2.f\5edՊ,b222HMM%pQ~YvTT~޳gOݲD(Kz|O{Sq$IfBQH1"0pr@$YBv>!6\r/{)="3}ዄkώ$CeGyƞ9(㝗0wmַUO-I8up6I2s~jD$?#{qdz'py(#00s()f꫋)IqL 0%{8vg4G>It5gn|/ز9>_s7@3#T0~N몵k׶:.̜9?πڢxw[4mB$IYIIIi5j2zh$IO>ᣏ>jS(I{ꫯŖ^Sx(**ó>}w糟NN,]J7Gh^|6lCvv00ppQKĖ[ybG8TU))͝Y6Oͣ6'V3֨$H)j>`7[Ip@?6wܤQ?y=*"杙OJ L`wU$@ƀ4$ʙgb3/\P{ޜ<+YsOG2I0kc'^1gM$cPzkg.3g^|J$1k}Z=z 6paVX7|yK!,˭|Ȳ) :L^~Ao9[F@]]8;"9T0kƍꪫH;^[k/Ƽ9 Bm[ʇ XoeR$Yg;IxE[lfSDu:rO%=17=̜9B %8956ϰ-6b6A$-{1lf3EUE @$c4ĦMkf,M~~Jm=ԻYj AmBB!Bpwc[\b `vWVyY0x /Ui;yj(Wx,`9Moȋ\rl1,c6x &<ۡ:sYhN(};v7,MU:PH!4uvrvX"To&'x y lzV2Wor봒g¥g|bPK-EUz~aOD;lc=6Z`x pa KLfR G|Mz;;g^'mlMl봊UPKY̧| %:M4 e!#]Yk3|*rɥRT 2ldD\I {\‰l)ݧ̺̾7f_fƚGKllX9b:HĄZQK>JE)2Αoۥ/qrO9,UA&VW]7{׳srw˜rk)K(b&FWQ(얲PV-/CHbGځ_͸tf=\5P%BS@5˳CPjyp+%U{(vJO>f,4^w gر&|G#[ۡr$${@VXvv.8B*HBL.cU#An@l,#rXe+{=d9lP.X.,[ȖQeA\^y/6FG\6d*yd{\jZ,Ȗ1fJR =rMr~O9b=nv<ȎN|9R>FUTg! !xOz׳^^v笙lwynOܸ[Y߳yx9+Y]J>Y-ŜS p !4h/~!sB|[o @0uNB!DZ%B6BQ]U-+?_Ԉq  X!ĀQ;E~~9fH&m&qՕW U /B;ˑ(q!p w U[o!d6mB%Zwq"$GbĨ"cpyh.>'N8sDbCyQV=(DhnԤJQ!^ԋQ#RT JQ)V gr!6lR_OOw uB!*DP"DZWj(t!hzDP׉:NN>~t zz@Wx2kDh zP[*Q%-Te6DUCPGxMvS[J5^GCB}1uMk^cvjhvδ[QRh6# G)rKsŞ]V'\5U^LTqM7:Wp:SԸ*DT./ 'x9J@% _O" ޚ~ '@}pv@P4O-@@x[oI|hl!^Tוk,1ZPPr9 IDAT"'p Pi*_.rxBi\/nb{[ZgD۴E;zg@PM!J}(nO4 !GoQ|E@UEݑ |Q\_'|(,(z[~ncf᪫ծrQ*.pZWuUU2Q*\5劼g"l<%tU[UX_+^u`(>|H,lQY{TRغE+NlܴRl+&ʏ5Duc\)91Ƴ(DS6gޫmHM(?&GӗছnbϦ=n1ETm$ӟDtT4vI$%'a5 o&q'qÇ1cƄ&~?:q,BDTp'[nAQM,]ĨQplݾ^Q.wήN?t CIIKVO+VnJ`nV@S@N$d4?773hNCAsT=e'pLQ+_훧GNZoq̈́IWk̘_vhNf !kQ9ڡ!̳B2,$/qSO%I$ɘW[ /7/3aq\Qd1Ml9HT~LFz5! 6(q0z0$!+VH9r0BEd(nB"Q{[É̫א2B.;7П#w{cO; &f[Ss>ңз__ddTU"ikY`E1mPY {k&dLJvZӌ6^JoLIYHr4|$!i:AEw;v+6}=M 6$$zЃ@ @qa1C ssVH7Y$n۰;/YM[Hʻ" Zp Z`kܚmF}}=կQMM m54490nn}u׷ȷ`NݍJr\`IIB^Mn5]w@hO}m g2XO핏xX^7c  RĄK/Ĥk(R`؆/1a6@} $0kdb@A`X{t~EEL&xL ,1'4ق$h! {UBQ"}%O*/>&[Np 9ESd$)ٓP-/Wf18TYzx<1L$%$0bP$!@PUDp^ࢋ.׊]X# |dn3lذ.$ѣGk׮iwy-{yk?C̘1SM:SN9C#d1cxIqSLX;<֭[a=m4Z5WJ%EsN]٫Á䫯pi-Z !x7B0o<$I;lv)--R, k>#G<@f33g~^pBUY`B9d68++{+' dI5]3T I 11d, ̓鄮 Il1u卜w\<Ԏ2l.,TE_"҄Fl"* XbF-ciz]BjN$Ie-tMJëf??A#nP@.!+kFYC lYt%KǿXl3 [+wm90aB2$I[[ /)u71NĈ)--e=)S_[ UW]źu"ތ3xZDuu5vTgGfܸqP[[$I8pEQt:4EEE,_<ڃ>e]֪T(<,P3$ۺ6 bN=X 8%9!hR$. N)UUχ:X?ZGL jЁ,(~"* &FhuA9쳏!9$9Iljd2a۹曻Æ kїv#gyG|ﲲ2֭[KZPoS7Z|9={n 8L&Sz\bK 4Spk'wmذ2 u]m9~_"$5A>ڵΩۻlcU0`$dbtx޸ TM}ֲ{nz<aoNFyyΦGaA;w%CرrPR\)-)A eر#*jٹs'~y=464huػ}:(((`׮]N@C:TVT* š:"T2rrr:Ժ\λ:tOcC|}^!77&OSyKn>m)؞5⺪(X&TEKS-F$TEll6cϛv|,~!]Ӊ,ɝ]=&>hjB{׮*mRlY3gԯom%67/Ԭ{,Yյ=B$ъHQQQ$Gwтlvءo Ԡ(J|ߌ186lX[s!N͑B0f*[__!9 Ցkt_쳝 Q X 8) 29{;xMAJJ2?RƎAUv+Æfrb6d6(;<@^=իRIII&%%9'1!Ąfb15d {j%&& U ޫ':(ԔdR+-?Z]w݅'11Z 66Ɔ:22hC21x@}Add ٧E][65a٘={f`٘\w54={6\pVV޽>B#蝿TbccX,|9r4Z$<G%99~ロ={2wֿ`? =BiϘ2e Wŋzrr2?8=zpIro}'|ۭo-z2==۷oq$IbرZBv"o֥ē2ڭW*g`2uFABi 0ͼ\wuHKgyߤŒ$1a[lv^}U}Q^~?ՊdRU, 6C3BaȐV+&˗3iҤDӄ7᜜\v;UU5qXUGbb"d*Izΐx6l/֥\4}GUUo_Eoq3<] l=ӥ=z~G?T!fifyQ^0j4!)Iw~!5N V 2U' EXfzJ'5={ci$g˖͜>t0ɎErUW/;|bzGjZ/v {wkZm?Ox虖N^-ڽUy<I՛\_NjZz= ^7GoĽK}mTx4y<7ן[1ᬳXL2={&5u%ܽ:e3sLn7ǃHHH仕pVpDsY<8߿Çc2xe+<̿lDEEիWc]6jbdf3\x >3~x^~en7={'|]jrWx2xUUy駹Z4>Gr£uBP^^ޭ[5!wv{3t^ ÇG!DFrjPUضXNHJ}={LB-ɉ∶ሶai3q(6S!I Y]9gȶ-;UN9e$58m2vq(1v$ :Jb(YʊjGTKI#,,kqєӧo?b,8 Ϻ"F:C3yD*dРA(B݌"ሶb6HAQbdGդ-ʊCLU88mWp޹gV b:*b0?ՆG2yd^/ٴ9jo=c8!X~} $Ib( III\.&Of/c?m)EEi^B=O7cc횿2E `,kN n#rwúu&D$, ׬L[,~WHGSe>s-Zdd21w\nfTUfkbaܹpgġf(((j6C йfC}rP[[KRRڒ1"CguݻiھݘM 0-B`X4Jg#I $Idʕ\y466$I|Ȱ$@ BBrZB)wl֥Gy'OΝ;#֖?fFeZ#y/tҧOUI/G\zNMё"ʑe ?~<ٻٺe+[6oAe&LG0l~&I' D0K3B@TE=(+G{7 $9$YIĉ; dYfܸq$'G0#ǃ"ovBk.jjj"[VjkkYz5ӧOv|9s 1coFĵ9.\9cuejxãt҃7@gOjډeR`ZO"m}Kl^x6JAB.[RRW_}hO~7ٳgGHS$IҷCuN8BпA՝>l0##Y3NOOg߾}-蒩SN9%B SW[MuzlټʊJp:zȤ:5N1lݢ?Ԏ~(6emb:Y \0^/C36|O%1!x-drД<55G C AMCa,xRSSX,/PB9YY|9eeesUjH}}=fGzzzKKVo>qqeYee%TWWӳgOn9hѢPv$&&-ݷ}PrXlݲjM*9k3{p9{r0MillsBlaٱYX,b=j$ 6A@~A>;vsd2qƙ$ggc{Xg։b>@ Z_)aa.iʔ)deeׯ_c(^|>oQQvm7tTWWcZ[u$=臨_K$p8<;5BxO<_s/CZىk~r:ـwQTT"TMgсΛ9˲Ltt4պsԐMTTn^Ç9{!L&ya] a455@LL(~]Q8$az ,TUtJEEETrdeeҶݻwmB6H۹Ёȝ;V|nt%+w}銷2^[nÇk,$Ib͚5WbѢEx(lb,[ Jnn.x̞=_,YD" Y{x&6F[K/#O\~?rؾuNN eKzuڧ>UӶ0L 6+guY8]NϘ01  EV$#Z*ynعsuuEQX90e[.L'^k]8%%x<3m4.֭@ e IDAT[=z4ÇYm$6Kh *oEp$%%1qĈk555|W|>44u.W_u?tb;,̀wQQQÇ[HXCNxVX3"LCNii)Ce{T~sҷ-bccyg޼uBj ~QUL>K x>2V.0444騨*)))hETB=C455;EO>ա*s%&&F2͝ܞ ˖-ka%99Yzꩺrє0`ba͚5mWm}q===DZZ- 9͑N'Z S̼R>Lf jeŊJv>ܦcԩ_M wQTΖd+@{o "  ?\" bWJ"޷찛&J0yDsfΙ99yzZh($ZCh۶-mڴ!++5k,G Aغu+(FZĄD7k8u_O'?51Wyad]̵t5v9l6[Cj ۗ#8y$zK.4z!4h؀4h؀WlIJڵZF죭DQW^tjժlܸ.Dnfid.*kF!4i``Сz O=Tˋl!$$J*9{bn<_4h'{nϟO||i2-PbXdl%-+JEvv|^Iرlyg۶md2ѱS'~\s6k@_YiO ?3 ܾmO&Mh۶-U(b0Jo)hmtc.aԩ'OMϰ=233=k;!f'^6k!PLOםV() )@jdp/j~m`/p5h@v͛7[$A1"009[0ddd0 0ioI%??FYbE9C kX=$#ϲ1 ;wNdZxwZ: (zYEBBB$c/. ^^^ɖ *߱,HXT;H6m 'qQ~ݼח/wbccKEJJ ne0#$$Ç}ڵϏ۷48^zRi-@$IƍDEEU̸Fѝ.M (( ;JMoРAج)-jҭ$NsgvY&O'NI7n&L('V c>v`߾ ;9>9ׯv  8sL-ՓȡCl;dݱ@ZZHh$>>^>gZZٲC۷ٵsLٽk7$gMO6Y,|||p뀀%r4UVmiۆ;兯c0m/?8wO&QgpF)򹳺 _k~~>/rZE)b;.a$[=IK\8G^?Er.-NOaWЍ+zkH(P77\$|2~!;v~sh;Rob'`vO6lWly駟ѽfnܼ/q56n0q-Pv%^5 3dgu]H J'(P75jpSU¹1l+|ۏJ"33SHKKm݆۷m5XT*1Rd5J ??@T` 0FCmhӶ ۶3g8T*,b#X>HxψM1ȓ-))O "Ç/b͛7'<<5j6ѸqJ˥E-fлwR"VN{N[Br$.sٽ%*{H81kG@XۄJ u>___BCBټi%'[#9ʱ8vGr%Z Kf2opp0jDLDQ$""Gy^O\\*Tl6kӦ˶ϧzH of>}hIsA0R-V}R̿T;N6"f觿l}dAoM%@)F4r`Tвgu{;$T.>mbꫯϊsһwbIsrr߿Iv ܹ3k7nF\lFF9rVZruvCLL+T@Vs1*EFң{wLfsiȑc-".\ZHX&9My/QBBD>Ӓ Y5g(X$pѰGT3$ˈ#XhܞG]d-,WZ-UTǏV$zAZc>VQPV%44$Y-Zb 'x"ݻw΃uH租~"**"V"!ԴjӖmڒNCATt, m;t #=PZm0 *5FM6EWbJMmiն+I.^EvJKKCwRnիE X`\ݻp"9VPHNia';+xrZ96xV>?*].A8DΝ;wsss ۵B Bfj4nߊg߿t:)fX`0лWrKԽ3޽{VZy7պB4 v4w=ҳC)PEnn.'O,3+::LYj5K4֯_`ٳX,&55ڵk9W\`0sML?~<3g\e;믣;w.ӧOsEQyy{Ӿ]{í4aaŶIfdggV[3bt:>CueWJ֭R໧ygmbbbYS?w.W?zcʢ|vԩS0ׯs=̙3y뭷8x ׯ_ѣܸqC& ݻww1͘fڵ`HVc6 6f֬]AN:N|my&{FףFN煪`a_rz͛7yv;Nh],N@/n:E85ۗo!G88Z%vN+8pcS7s1" ,5/2s+fDNn@9J'((38wӐkۄۺuk9٦R*`I֭[\t}gĉY-[pi~W6h0̟?F? 3ƍӢE "##Сw"g?L&yrߝCt"[ڴiC-Q*#Kgbyi'xIEjԨ(;E{6qntЎX9~3K v:,5u[T T: ?9ݰ[&9O'Ig/J+[VnElW.1νC$ o0Z|71*.N{ Q߿? ,p:nAhذ!,YF7̛7S.Od`0eBVw})XEvt;LRG[_6OYr^["6 ^y,7'LU=M} A7ѵky3vj# |Ϗ򿭧'~~q[vK6iK&*pp1_ɪs9qId`K,P 'Yp WuO,]E?elyg gϸVp,I&ΚuWR q`fE>z$$]1Iu8, !, ocȑdZ^]#1Q ;qFŠ+?~Lp{1{9|||6mCNI^___>w^ h4ϟӧeeO epT*<·$`4Iuxs g@} S#kD,j9 )Mg>/B0pz$ gw|Ξ='|rO$ V=,mF.]h~7yf4 ZYZ9[BllD[nٳgtRܹsI;v,s̡M6y{ [9Ξ=˓O>IFFF{^őf͚Ih󏱗j{:A|+tU@fM@q*OJZz;6K_>@19~ܐ_';iidsOT̞=m۶ IX~=SLʕ+L6={clقVeԩ=4hЀ[ndVmEQٓ'RRR#77`lt:""",5M!9QQQHD޽*wI+ 0x y(Iz| .Ԁ^=;lH&[ǯNnK+Z1IBBKn=XokP-Al Xg*skחOHJj,T^z)drd!UH|S iPP6#KNib#+ؤ P7@̄ xx&LDbb(Oe9P.vK"Wvo޼ɩSjT*6oތ(h44 L:ٳgsU?**nݺNpp0 ,ԩSDhL0AV:'dNV`6PnwI۾}\cǎe.-?TTJ*!Z޼_wil\3u&6[:q`Fk,hƾULveJ69pp;fhZrniGݙ+&W h٣5ިytdw~ۼ]eԫ k7GhЩV[l',=Oo؆NШ۠MvMFRs::}z6ToXa˂ N>re9i1g]Kٮ*帙l 9k|Lf@J |w fp9y'N[O}9h4$&&:XPT* 4ZjDDD0sLj֬ɔ)Sxhl29]6<={dҤI4i???ڶm˔)S6Triiil۶M[Z_KUq IDAT.Aػw/YYYXF <ӕ+W֭[}lXҥ] >ł X ThXXD$~BrJә^-[P )Mc\rkנz"a5V}_aC$|n(EQ)r>{7Yf /"}1WNc֬YW>YjCٍ7ҩS'}]fΜݻYf ZԩS1̈́ah}> 4iBdd$ݺuiӦԨQqƹ 0eVXX#G???YdsYs!ۛ'N0h =^{R0, [n-6wE*],5I]xPk4:tyd*k8S@(-[o_&0, 0z4, F4NOH@EЪG||<+WvP֭+Wߟ-[tRF)JE HNN۲6mҏȑ#j"++Y. Chڴ)o&8qBj!22ׯBu5bΜ9ƺL(HԩS5kc %ݳY5Xd < je@{pvNJJrnN B/MZjRK^Xu5!!4 ܁)))evСC1SZK] V(Z,и#Ѫ\#::Zz\z!͎rqիJ"%%7oRJTchXr'33aÆn: ¦Md+VYf|zy嗉"''3f0fBCCG/@6mؽ{\hD""dekONNO]>P[hZ]-U*Gj Õ`ՠϪ܎e/{C·3Y!5jOJd"##^:H$؋5lJEff&^^^>ӖM~W_n:EQ7n0vX^ʭ[%00\/\֌^:׮]s:a2Aڥ-fI۾ۦVo_\)PpСC=8npýP̠VÕ+m9zCJ'1&ϒ#l)<7?OBBj59cbb.uٳ׏-ZЯ_?}Q"##|2?#~!-Zpp5 TVg&r0ܹ780%Ib׮] 8. ٷ:&ȍ]s\X,[v۷i{p.;.g K1.Ӆ x:q*$3Ήkɱ YiUZ e *blC{F9_{KO@222H/؏QԮ]@F#5&֬YÚ5k/9p&SL˥[6g'u)>9@{٪ 0.] **EL">>WK=zd[\`ݙ4i [n^z([d{z5 ѣy&gŊE7N~:uϏoaI8tLٴi|c:nCzz:f~J/_.t $IT!oXq Yd;R)ě6;"c lyw~e.[INgWٰh=~?xƽ[=~ޅ!#F!\†s3*A2>Q wiaLƋkx)?UzI^Ux}h2O݊E b;Si׮Ǻ]y79d ?ʚ.?HІ1yrh-ǯ&6>q)<8Kg+طoD'7.ЫW +X+({E=z;ڷo֭C4i^g޼yn2dˏ}ƛ7orIC=-[J%44fϞ͌3/VСC$ 8\W\\|OAZZ͑#GHMMu`o})\h4ҲeKwAV`0dWWZX00:4O;a8w˙{3 ?Ҩ]6r-%Ir>D Ͽv8L'0ًN:Ea6$Q!]!7/C}zrtf[a@%#htLPޝɌzv 鯑tfMg8cZ$`m{cEny3) T+ӏnN\\L&T % TlS6jd .CiӀco^V]f m۶-/lm!-[իyyyܺuEa0v~~~2Q~jdggK޽iҤLld2233Xwz 0`KРA:SO=% 9#HI/Eֱm9jrO35{k 7aAB-~PV)n1}\+}͚b}r=ZLrԋN(+We{T+}ˣs:tQoId°X,c800vQj"{2BDDjZ˱ߢE?JQDEE9G5xȖ +RL`rËcF歺7 &1xc&O;3gwy+ s ;2QIIIOFPS!TwEn! GɉnLAE13_ R C$JH,&v.ds>2@nF*9"dg-'"xEQ1PmGь$P!"ISM4 27xux넖۷>.qS(?X>AOuD Q2B'Od 6ŋ˃>(GJ<&Jt:G}.]cǎX,9c~~>aaa=^x`j5ÇG$/^L-8pJiĈ%^W`` ;oMAQ+;PH-HPaH8w_ M=wD[^~-K>MQgoGjݏso\ɔт! % U1x#qv|U1GϪT<1,j:?(>9YpINVHNiC>t`>PTn.D'N ܹVn-)Vӑ([F$IΚm2337n*JފRcXOh4*n ֭]y0m+.#ij+FHPa S; +I]xA_xWvis@*AFh!4=e'Iа(v<}H-V'ӉS!9uM# )QfM;Q 6}2d;wߟ={r : V'jBE99/dԨQm-z>}O@n#ׯw?_ MUiӦ)]QR}iZ$t8>6~$qhbV;'ǘss*zRkSkO_Kǝѷ69E\BrJoMׯZstw`0WNYItFѣGپ},:2`YRpoЮ];-RHNi-m+X5A CO0] a JÅ2k,Z-/^GߧO>[zL&Z͛3yd78 䔞@$Lⶲ_qV瑚ƹ3HDHxS=7%w5MP+$0.௿B׮.U}}ܯ;Y$zrk)oooA`0> 6dرDEEꫯ:8PH E#gX,T*5jMBRRR/Wݕna޽ogWHNia#9gB1^^ִ|??DQDqͼΝ;dmȑ# DE8)SRJa^^&MbڴiK) +P ZLdg x\ Y^:qVVɗKtBrJ^.]@% PAI7FLח{^Oll,5j)NA^Y((L}(}ϣE?w. T^-`Z<Vg֭+mq͛7ٽ{7Zya2HMM[&.ڵ ʕ+iٲe\ Q@(VӉS!9>`[,I:t9S bx:I^ClfԊ ţ>oM #hQDǩjFӶԮ#/=OK-2̾Qi_mm?f͚9?8a̙sRt·|^V`\&LӕN x뭷(m[ow^N8ADD$Ǵi߿Lpl'%I⫯B7T8<^} AOg1}s, :D|BӭwoV')NU#ق;d;$ If~^]_yشn/&܄Kq!Mow]tk_WDH؆ٓ^zDs[?D?.ԢGF$ق4VV,XE6ymՕ$.('ORU,9/ n'Gp5f HO(9lDe۶m:urC=/Rw-MjYXz}>:=In`eԬ?>W(5ϱmidߺA+|~j2 *o 7!qAг=kgƛO<&ݰa52f~i0LYuؠ "aS ./A7d׮]$Iu:l6+ô_p*c2rp*4C_<1}?GwꮽFf3^:o%hC 0$a(pB%&g#s45X_3A잣 ?S*P#<;ͻ N@Z'$F-DBZ*)Y<ܷ3I}͙$Kr~[!9,t]g՝s$9ǎ)4NG}XdDf̘!|׏K2}to+ۋ7*PP& B*Ө#47u1L@@7X\]:`r6] rغ}j3_S9pR'rG8ZωdU0iݮ):5QzyuX>p:HDKo4J@I*t)?P!99ccYaad31H}A 22R}oh4iժ5"**,RRRx饗`׮]}1Փa#u4 . QٽA7ȖT*"I9zRIWeTg8; ڪ;||%'u#bB$![@ίXvʏCgKQE5Cd%CR/MdjGl;).q?Bٴz}:{bp`n?j] ) t`nW0zgut ={G}AxםX,9={0ydhL}"##+(*yiWY'#>_ q/SF$6̇4O]l0}B$Ot{':[6$ACrt1]yڬ IDATYw 3Ԥc~;~,#MG:H-b5޹߶!Q/"iڴo$ r{<ܵ WwV[ʜ}.0GCBחAٳ0ջfx٦qqqXBH ͼ<[>s,hJ'֛O&||\/әr`>?xVwȥKT1X"III2>dE___Np]% cOp(P@=Fǎ]\T!9L2$z=͡RAZT~RF{l$""YYY4hЀǏn:_NVV t҅1c`U{w?x X/$9id줄 IY`4RE!9Wx=A5k{) xwkEȚ5u @߾}eZO>zN8A||U9L47uod džx722P!t|-e{h>2_ժzd='n&VI `|]zZ*aF /_fUmxr="""ۛsҨQrš@f8*/7:{Q!@&GePjq5%ȼ~[TOgg<ã B ])EEiJWaA" pkς" UEzLLID0 fe^gךsc D2M*}y@%?ʐefv5`9?|vd$tڸp$~<}J^عz8qU/r7osC@"'oBʙ EUfn\AL ):/&9˫=])ǣ.fw}ʠ>qF/({&~޽{ӣG""" 4T$]}nnhI&N½S9\nЪ3}(\)Ϗ__-";T%YQV| uQϳ=(bʅWx,.r%<[e'$6n5+;n￧B =:K/D$Ol6[)SH k9Vc8yG7Bf̪?SDڊ jF&~*|i˳y=nd*rbo޺ %^"%*K$ЪըԚ/%X̝hW v X,fT*C&u1+u_K>LI VP _32;H"eCֲ؈~L턇rCE, ˏt5~n޼^z|q@عJ 1z_JbqJglŒAO˒ҥK9q3Yj3?$IܸqPgMJ"ƶ_iV}Z3v|?Œw#L=B\^Ɩre˱[&*5d{ Ke|Q9L1{cFg1{LAh@|o 豰,?@#`Sy֊aٳ’Sgo{{ɩY%?x#^pv;:ݻvZ0:֮]('6mJDDk%,?ܐ8dZ U)! pW.?8p^ lmʹOM mcDnϳ}z)HMA0)2*&3+*C_[Yi֣g!|eH> V=ڴG0f[yxB4wB|PrF4M062 2c<_!ƍ]sTXd36£>d'`ݺuqi@9>~xg۹;95x<UGB4,JPp~G] tt.۱L9,ׯy 9+};T: p.Hk_/=wܧkѲPrILC>.z<5GNsa0ċ|NVɄyvyN̚5g2w\nTfbcc u?nI P[!u <(H$ZN>gYQ"J۶m}}E(9v&x񢲵bŨoT'<|)0osW9Ppl@,m$€4EGet:W&)) ڵkGZZo#ܖ3PpJ׮]sߊ,0 v'wS'"#z0##bcD€X:`J={dZc ,%%3gI7o<?$wKnO ޝQ!RG]v/~Pr|uߪS@!, Ͼ!:*֡mm"fw|͚5ddd<$ @rg?>AAAl6, {wPJyj ?$N?Zj#Y&[JU?%''l6j d 6@Nf"w(8,3}|YݑR,u\QwBnՊΝKPPۗ1cư`lHH9QPj(CTTdjC֠є%۞bBΟ?k.֜_O>JNq#?:[JT߬,|.ېn'*9IDxx8}Y-+W"iüy `00sL,XZfܸqNٰ0֯_ϖ-[(M,3m4tSPj,+hBBDdQJc8 өS+9B)N37 ?{?lWUmW9 IFt:2p-[0aQQQlܸUV`:v$Inr+3nvvލjSpSjv!hw)ҲFK^f70H@ŧe iЯ&9>jIbt~313׎vºuؼy3_}'O˧T*) EZH|Νb]P3 ! &ʱ$[xr~(imuY&Xh4b$@$fOh$==7|ѣG3sk#FxW*uFF})e$ND2sJ*2Or2V_W`~lJ_ûe>P:̾Y|W 8k˖"rl ]i \ۆWS,_Ի5_1HJ >t(9O${xfÔ7qDFn+IAA{%b1`ɶ-s̡CL6 )S̑#GA'/'7˯򸉌7y a-m1NpZۗVuBhԞzxmBIG g/9w8IJ6<5sg2]TGzҠ,eݐ$?,帺&@ƞ $meZb>ޝ YDŽӕ/~N~}0=Qy"-KlW$O&ز%_{jyh}v p}˕"8$S, jY[X (1_Ϡlf4e.ѐNJUB"16>Vz<5/Sxj`— 7rnҘyջۜl$ڶ㱇 JU6_E]5B}:o3ݱ©P.6!\~wO5䚑pons/;FoWĢEjՊ)S0gΜ8W E[ª{t<׿S <'Ǖŋyɡ>mhԈ̦MRF:vN###_\*G@m(o&1.T9GX2~߰m`1 3yML4kޘJ*}yԡ,ۤJ:`;dʵ'Ot# %DžYMpÆ|>9HSHyAffLdd21o<ӕ / @PBJ>(azf+`e%'+= գSǖo']V!bQgZj&mlGYmLlV fdba1Y 'Lw3 \ٻ5Ya.TH7q,!+QG'@Ot]J&n[6 lvnݻw{^8BOz&X.xE3pWcO33 w͚5~z%K8*;!oCB+ߝzQd:RQ&5m ؽ01mdByhЃ<'zRۙŕ'8uDl̞}hվROVG* ՙCI=u*8p&Fdhh {g|<2Q<MM},Op4iN\a@'ogw^ 0"6.!Kq>rN'#Gf*QC5 ƣjRIj^OAqvդ Bbj>FΒo6i_$рm^E򪭚He+\(9Ic&X<<7_V^=y賷If͜ ÊRX,7YpB>ˍp:'=|oݺH>9.coz^Qo>+O+ZQ6w dYv抒$_deea hh&MA$`1{MfTZk^H߸.p(|H(9nNtmKǚ ֑-|ĉF߿?gϞ cǎ,^X  *>GFՖ*f %}x3B %DžWyLSXR;t3h̥K}lɗ/c۩Pflܸn?w܉$I<쳨T*4h@f8ydH۩Z<G[JM}FDqB)+ҥ\#e˖- 0 /]'/D&yeJy"^;nGUBqrT*Z/i)~gy衇Xl119qLtj9$!TGRޓGt&=ztT}}ʎVD"|ʲFARFZ*fk׮1k,¸tׯ_ϣVc $1-IV*T!UD!6;w.h}qxط*%Gy+V8gϲk.@Ge0RFݻwSJ/_.@ pZn+& l 6H>_'En .s^(ֲ_ͣh& K cr|XWPO{8}/;jUdY&yQœF2228pGa̜9@N8իW1 ͌ ٲv ӗ󫌄$_y jyKt$dH90M[lʏ$!_[/,KwGΧ?5?B%?|擉O&=W|.؈(WSY}o@`LfcxjH:ƤcAY[qj93%NnMq{mڴGy( S<{͔BNv;;vdҥhZYf?*Usω"@%g 9،qxO<;4+]n?ԽxJqa=rzgff6"fkITdԍc_/'3O_Ws˼=]F~ꪻ?d,(g-8w{0u`5}ɲ ڣ3> =5 ֤]aT?u'_<̠ aY IDAT)wcٙm?m<%qZ.ʤVl6Sl]8S8]ꓳtiʎ|YISuVTq`۩^:6 YQ= b2T_?ǾtUJ5` )劝Gr%Ȩڵ+}~! %# Ffn4 4on,ZDpX?Ȱ>ge^ O5 ]gBJNKaM%ghݖHgQrBr-MnV HGS?ZZaIp47db)1P Ur:ub%Dž8| SՂP@z*ǏCa2h۶-w[n^\d~7 df&ayF%&IfÈ*]%*{۲+V+`2[0e!0COfBgqN:Ă7@BZz&jamdZQY"WRkLtYn묤g q)Ҏ0TԏO9SԕEgFtԝETUkWQE6}m|I"/U^.\gΐxdh4VEӡVю"-JF}Ѹ[¯]|&wcdVFH6Ix yaE ^1 F_7SbbY]"we# 9<ĈYRqjX,ޣf  T.\Ȅ  !##I5j/fqyhܸRJ4jԈ5kֈ"ypWZV, & DzU*WMZZN}&SI-n=(.X}rF#""#ˑ m\7Rv7Wd|r<'ՒSZ*fv?s}][{ܹsT^ܿu"2ǎ"l,zz=Z֫O_ҥKT\+V(q]B[&XW.] WA5!g1w\, qqqX,<ŋ5o@pLv;겵xtH(BAKȏE*p\ }.nޟȒK%ɋ+}y͟P]iYBqa*S}\$s=peԩCrŦlذwff&-VZ^V{wj]Mq;v8jPrM)g WvVf&bۊ+G$ OgϞmقg18@pB-^. v5N+GɩS]Gd*V,0gZ-111l6v;*ݻ,@$TxSI*T*dhӦ| |lȫȓƠ7ŋ{Ur|̿,\f3:#2oh@ (8qhSdhtJUKU}l^vBeJNq0I7o=Zs&L |:H;v F=J@@&Lwu>QV^aÆ9=%I\rXV1"lt mGjCRkjNoߦlٲjܝ?/k޽C[de %Dž7%?ukJ{n'hB2ydF#-[w0..N ,dL#䑥N1ѣJNq"/&خxy>peFE렔$ шJBS^=A ">hڴ3fiYt cmAYG:pe9BXw\ f"%%)S @ k) )5 ."WO.p.칭A7n\t %DžQpN^hԣ5g|e{W26D:H~صk F{}~S@p/Z^@fHN‘HjG`9q=U@ڴfYk~BfѡCTԕHdO0[!ŁIM6 16; vBylʊe;QW[6{tnMrDQcs䚅:8.(g0xBW~dY `(9רQy"Sr$+Qǰ$ڭJhY`(-cŢ aJ=l%l5BOIR|zXZRvrr`jH )G6ogPpI",$u+W dȐ!^+u=NV+E2hzlM&5Mn+]q/Œ_:Yyqju=ZdY\G{j46f|qEWZFK{oGqQW\+rܧ]Z^1LrƤl8uw )=r 8q=6ǻ]1Fc.˔e}Vk=9jZAeYy~xrz& Ș,zK lP~;Q/l`!V/7;bd/矉|n?ZO0o5LN~Qo?O_"a# [l^cy%!yPoev$a6S;uOЧ>W7#tp~!5C~g9x<W #WklV=mWWC8έ8Ʈ,CF-HSp gY&Yj?(7_~?3S+;9KJլ oŠb/С9JQ 3jԀ y=9F0s&: `0P1 @YV@HMU{lbc!*JQ-p KmԫÇtr uC$)SܹZQ~njʕaDegd(ege)S۰~ᣏ~}8vLs*L AAʵk}2oVqcN+ ƏW22e˔{Z᧟rlVMJnߟ_'))J?hPܼ e'/,hӧUה{^=~P :m2}b}-EYXiÊY֭SdƍSI*:Ǝo7j`,>M&e_.\/ȑ>] zSʸ3e)t﮴4nLN'CRҖtbeԪO+꫊ܼy9eM俸k}â3e˭U|8 XmsŌ3F"rScR/"}}dfRn]F``]{yiW|c]=fCv5Kah0pF[l,Ym)QLQ"I$sP }ˀPY 6|ŗkc2`$ڗsXoybs8Sd曋i¸)OQV3 ]YxGE߿ 5.5mNGقaWYrJ ^0V0{/ )]gH}< rќ Mƃm65[MO?ͧ~ʊ+tȲLg-ŝ ]iZW;6՝Liȹ{˱PH6C%;YǖS1pF0lւg2,/ pSGPV]̃qw@i2ms߽m|x/!_ b?Ab8sGm;~ь!|2:osNfhY-[@BZ5 u{;w5k|oaذ"+KrMMpz :yFr׏L.Wؿ]NΝ;h4z6m*R,Ih4FvH^hbKuKdssiC_}#IMOd+)&+dfX†`jeaCpP &%#"EUru.'q 2#Ȳ1 ݆h.9c.&z{XY vkzԎHjڹs>[eU.toի{ޮB. Ezɓ,X^ϣ>*:W (HDY˔1dDJѽowΜ>ɣ7QDsuѠ8}Ǐ^GXq,tמq4mݜReq|I=Іڸ [3P:GUà'zr1 - ҈ ¾kN8q$K0ڕ#;BPmm=J>cJx~"XJ2 %A ,اOV\#{ՊKFpo̚5&Mc1uTG (+JvՊbd2a4HOJs|r:t =5X,,Щd|jSJ(Z_}ry.Eخr!x]څ] cn޼1 %GY0#bCZp7(n"-K(9.}Vy53dHNz˗>zѣG_u֢[8 |r\Nu˔9醺u  v/!oȲ l6:t(iiic@).>f?crP5X7eŊN_ʕ+N06TmL&$M/m}$Ibw}/.]*$DQλD#͛JVdJ, w)= .]мysիFa|WC?@ѡ +5 VA#dY.UgF#.B)cz{\B; t+2hW*WFe޶mM4ҥKTXFt@m`5FDFE:effTE۴i+JZ_K(|dk^ܷo;wl6sϡG8w`AkTJ*J+5~lVh{ 7w|=8B|h (s:{l222oݺY B deeH  g8YΟ\IKlH%dt~JNqLo^”\5&6qАԧ>'v~&MP"NN@@֭[Ю];$IbرCA (/FctDI*0j8o-H+_ܷ4h]y+n_Z8f,Ҳv ?&r% 82,g)φ #FZЂ! H:wf\!͘1YffVs\rCn -&ӰJ"˖#&2;饤։cG{*YG@kOax,P,̮'$T9$ K>Ͻu ( 9JZɲ$dwXAe" (I|z-j7#]q޶$gcO:&=BxY|[+(z>1èӀ1; K| Iq᚞7=2hjn5c=c#͛ݻw,|$]5&Y[%nc|uY~VF/ $==̙33fH"Q>;jMSv/Ia̸QT oNJtF$SnųyZt<=K?}-UE|)2ʐʏϡ`WBAH\,[U<_s*w4eān…J 30&0i:MjSUtV.XIo3pk4m;xڝyfdWBM2E(f.FQh'ZJD< _e!I_`#z1K*;L'^dd-3ZIY=7?+ROy; FNM\<26E>.^,Ҳv X89\ _K_K,!#=d|KTJ+CLpp07n ""Z,:R gh9RHNY:kєۤm%A *K !սW(W' '45?W3홶|6@EZٻvyov@mKHF&Ϝ{L1n= BfגOidfL?o ['+?3Rz<9ǒw ɤSh#wŬ9oTˬxY6S4 1$jr=+׳̹qč}w=L:qYv.*֫maٚAC]cUyN+@aRzd%'r#ףco-Ҳ%DžzM0&kcP~^Zjq8#N :eY&""X6mJ˖-EN՚ѭNΘQzѠL )_M>]4нKenqᔁ1 NFFJRYRh.#/FwT(E,r8]lHi &,fR7uv #r;AVi^.:TI,d;Y@2Uj`L"JzF 단=tޓ/>TU֍s+O2cîU?p`\Z T_Ftވ5ZꣷF8UoEM%8>WC^^OX9Zʕ+ek.W$lBZZ* Y)S@fI| 6歼6wtkLGr]6=1y,:/H7kAC 2o"sj@dߴSkw(x5z/S^D@jCgV3kO`sCB%[8k3i͆1{T kvTP$efFY`X9"נi@RS#a2v#{KLd aU oENvRq|IDATAq9:~5lVzO,l]q~=jmF׮] 8lZD*v7K.20ee|l6#IF3H$ifLi%5 !Ɋ]VFԨ !aӪKU ]٬Ɍ}"+p'8&NDž$lVkJcYUƖ/6 r>}o&MmQ#rW 3ؓrti`_ =M|Pc]u(ۗ ]5qo]DWqL?kM Ѡ}k_Ҷc@߱<8rl$aɸʹڴ V% U~fMٟ~qm~6{y 4'= 85kz \$}4Gy@T"9qꢜ2<V+A>#SOsNlظi]* qVłdh2pkƩShߡEJ$;bס hKthDBDdd9'P'I ,!aْoD7iNW)~*RA/#I tBBB{N=x⸍^9, JGŽjSq<%eUNT5Im]4- 7JQpd#CSgp_)P[Z5>*UEZX] fOÝ,f #pFPOp?NѣX%$'γޛ(#JSWYF&LemS=2!.Oqp8Pr\M>9)v/x-Z}T͗JfhhReXKjez>@8+ y )'9@ (#$Rstʘ/JNq2 vBS*lY" ӽ{w$I`6#"B%i(@ (5]r6Gq#-[p'Dža MY3"/TVk,˄f[yτiF9g$0DG ~,$&&qRʲLdhtn~JNN.Uc ;A_|e'忼cj1o̙ޠ,F#jhZv t:#?S?\d4Q8~C#TjwohPP؅ bʅ1%(V̞]ӓIs$ʳ>ju:O~u,:P ;EG9``K͏fsK/v%F37֭=0peꃹt}u:ejdE 3Gt@ F]«`^ETv~pZZGu<'yq 'js+i<'N+Õ+WHKK@ѼysdYfڵNơ8@ ]Q;rb9's^:5,sY>Sƍ;@Ok. @ff3ô(B nUB)N&375k$'̥-#,b|IW:Vlݺm"2wyGlM e/)|X1JyO;9=FFϳlL&aH- $֖7l"-K80y ⟃0 [zDr ]Ul4-[t#/jn/}lfQ Ø-HQTŪt%KS -h]01ʗxQSB:R39{+o~h)o uZ%I o ~Hk !+ˈI[dNKĔujhRP%BllOvyWV+WˆV%\W5&g@Eŷ&).nBVI&1w\ Æ dk aDx$4 !awtLXhRxUTZy-[0б2hMJNMo^ /Bj*Ƹ_Vcw\k׎!Cv-Bx2i)ɜ;y,-~JAfKji,.=/B)R=zk/x2tgrK/eJLLnM\\Oܾ jZ`1[X,XV6+v]=G]JFAѠjwXsKܹsNf̾ n2(1QQY#F<s|wѥKv+Ǣخ5v$ T* ]Y \RhPh<x-jEi4,0dw+CfС\ѐV>dڵINNv Gj$BʲǗA$v;ZVXq~;㹨}A7mD߾} 8`>,€'$(\ٲJ={"\d !!!F/:F K `۝M4,(߹ܿ]e bff%|/x"regdcVʕ+5jg'-@pmq,<@OB[qqN:u*S(9#X¼F<.W8===u|f F_e˖QzuwѢ ;/>#MЇU_{0k.5qmNZ-L0At@ J7((`vx}(:p8ؿ2s'76>#ʕv|=qq\޽|5C}o؟|2px]ײw[ys M+c^xhkcydz_hh` 9s֋/OLnUXG9kd``|=|`h[ֱOK=ҥ5w:g~;<cgƍO<(*bcn}o/P^Gzb` k۶?4`H7|K/Ue9;uΪ6mb~:VVn`<.Oo߀7N6njk{,0~ ?}^0v,~~Ss-JJ9륗]؟}6~^?Z>!\9{99kD#ؿ:gr u6GE2`4\O;!1+4ZD :Des B*++)>>կbigkUϪIArֿh֭42++//'*+3dN?`P-œPO$!ArAAs!nSHO\.M)3&O"سN?.<>ٳb--3֬ZziHR3G+':<lެ yZg~>0`Nn-iY9qƊ0H?_#K@[ cBQH 0`xBqq1}i=qRMbnDqF,$ѣԧAS,BUr= 0` ~K[6]]8; H2~Ftm꥝|svQw  0`N ?9ͰUXXqI󟏝enFUU 0`I 9?%e"Z#.5ezjt' HodLuYm'vu:9PP0LvC .Hy3Hgmt'8imj5[3i~-4,ݳp$kxy:θr%w^ iN8 ^yeBkt'QUU_BG8 fDtB&m2#i& <A( qca ]#[Iѳ ~6kRxw}/!bSݻw3zY8;!iU'UC'ǀ8P+;$$Y0?bZZX,L&S.:9?#e<ke dG$d&u?,q4/:hoj @t&#VÕ #F辅# gHr"ѝ~rEtz(~r 8!ɍ(^/^WAt7T'%8 ~: LA[Ly~V^H>ru? ,>=Gd;U.~JGAAA-'#)}N<ɓ˸|y׿vlWEr4`D%8B Zl! n0ˠB0z4 L!92H2;=Ҡp%ČAwBM!iz d }'kҝPuD ͐gѤ 2%80.'Bo!.?E{ 7xqI#:R'5 A7BӜTDgƍm'~Ar$Ibԩ?\ع.keGD56ϥ'8iqP[G߃}TAfb,HH^mA4l܂&ѱۡrTloI0A'P)$r-k= kt(r;'lx M^r@J(2q`O9̎93wo<I>C']rI!Z CԞBNDQ!7b J>8 kU KT0C*?:'$ ,hOAAE$'^kh GEP5$(^=U$iߕfK) K^(7(ѐvYS&8&[ ms9ķ2HO-l\֬Zپ]nft'6AW6B|:$Y#jX3m mI@?IcbπcF e2~,3BH^ 5I8j\)HlD<@+=&kZjC'$9ATսAYYY-2Lng@^zX389&FVTTD߾}d|٥!蝖f< GPx^<^/%aU֠"qPFRU# !^dM7DH$v.G)GB`>%=OKlLud aA[ G ~t)٢) -2 PjXA٬$C@Gޏ@M|4bbbt몐ZOyJrV+wuCo; w.zjYz~"r,V+x0 8 iKh )4 !* jkVM~0$Ir$5Laڥu˗d9]fM2$WW`Ӷ?mKۦ mW5vQZ $ //G^`ٲe[e‚F!~ص !B0`D LqCSH}Oe !ՙ8q"ݶp$GJ-B睍ZF)Oaa!~p0zv5ы+;Oʘ1!0 8 7Bn0НP}KB"C^'.),,dРAr/Dvv6=zIF|饗xǘ8q"k:t$''3rH"^8Ssi>z+on['SNo^u뵎EpB233Yt)^{- HğVQ2c xyƏ-[:655Bl  hON!\.º!^~5cGMM2gkXz5/~>wo>P@$JJJ>|8B/7'[v$'66b, rKGVwԫJ𭪄~ ?;zke+ډ-5 HSNGh* mMMMF@o\tNC>;vuWΎHiqqʕ~1o@?C:PAՑ$nћ6mj3E^DA#7&M뒣r4<!W]uUj®+#GɀdY8fSk,xիm*rv㉜X>gwe""osvwc6Z\Ǎ֮ibF%L&9^-d,^}Wݕy\r^o+ʼ˙396x#In^wP]=:e{J$ uߙLݯwO[!篾o6XlYuMM|,^9VZ (IHHh;TV+^{-YYYL0l2.f\5edՊ,b222HMM%pQ~YvTT~޳gOݲD(Kz|O{Sq$IfBQH1"0pr@$YBv>!6\r/{)="3}ዄkώ$CeGyƞ9(㝗0wmַUO-I8up6I2s~jD$?#{qdz'py(#00s()f꫋)IqL 0%{8vg4G>It5gn|/ز9>_s7@3#T0~N몵k׶:.̜9?πڢxw[4mB$IYIIIi5j2zh$IO>ᣏ>jS(I{ꫯŖ^Sx(**ó>}w糟NN,]J7Gh^|6lCvv00ppQKĖ[ybG8TU))͝Y6Oͣ6'V3֨$H)j>`7[Ip@?6wܤQ?y=*"杙OJ L`wU$@ƀ4$ʙgb3/\P{ޜ<+YsOG2I0kc'^1gM$cPzkg.3g^|J$1k}Z=z 6paVX7|yK!,˭|Ȳ) :L^~Ao9[F@]]8;"9T0kƍꪫH;^[k/Ƽ9 Bm[ʇ XoeR$Yg;IxE[lfSDu:rO%=17=̜9B %8956ϰ-6b6A$-{1lf3EUE @$c4ĦMkf,M~~Jm=ԻYj AmBB!Bpwc[\b `vWVyY0x /Ui;yj(Wx,`9Moȋ\rl1,c6x &<ۡ:sYhN(};v7,MU:PH!4uvrvX"To&'x y lzV2Wor봒g¥g|bPK-EUz~aOD;lc=6Z`x pa KLfR G|Mz;;g^'mlMl봊UPKY̧| %:M4 e!#]Yk3|*rɥRT 2ldD\I {\‰l)ݧ̺̾7f_fƚGKllX9b:HĄZQK>JE)2Αoۥ/qrO9,UA&VW]7{׳srw˜rk)K(b&FWQ(얲PV-/CHbGځ_͸tf=\5P%BS@5˳CPjyp+%U{(vJO>f,4^w gر&|G#[ۡr$${@VXvv.8B*HBL.cU#An@l,#rXe+{=d9lP.X.,[ȖQeA\^y/6FG\6d*yd{\jZ,Ȗ1fJR =rMr~O9b=nv<ȎN|9R>FUTg! !xOz׳^^v笙lwynOܸ[Y߳yx9+Y]J>Y-ŜS p !4h/~!sB|[o @0uNB!DZ%B6BQ]U-+?_Ԉq  X!ĀQ;E~~9fH&m&qՕW U /B;ˑ(q!p w U[o!d6mB%Zwq"$GbĨ"cpyh.>'N8sDbCyQV=(DhnԤJQ!^ԋQ#RT JQ)V gr!6lR_OOw uB!*DP"DZWj(t!hzDP׉:NN>~t zz@Wx2kDh zP[*Q%-Te6DUCPGxMvS[J5^GCB}1uMk^cvjhvδ[QRh6# G)rKsŞ]V'\5U^LTqM7:Wp:SԸ*DT./ 'x9J@% _O" ޚ~ '@}pv@P4O-@@x[oI|hl!^Tוk,1ZPPr9 IDAT"'p Pi*_.rxBi\/nb{[ZgD۴E;zg@PM!J}(nO4 !GoQ|E@UEݑ |Q\_'|(,(z[~ncf᪫ծrQ*.pZWuUU2Q*\5劼g"l<%tU[UX_+^u`(>|H,lQY{TRغE+NlܴRl+&ʏ5Duc\)91Ƴ(DS6gޫmHM(?&GӗছnbϦ=n1ETm$ӟDtT4vI$%'a5 o&q'qÇ1cƄ&~?:q,BDTp'[nAQM,]ĨQplݾ^Q.wήN?t CIIKVO+VnJ`nV@S@N$d4?773hNCAsT=e'pLQ+_훧GNZoq̈́IWk̘_vhNf !kQ9ڡ!̳B2,$/qSO%I$ɘW[ /7/3aq\Qd1Ml9HT~LFz5! 6(q0z0$!+VH9r0BEd(nB"Q{[É̫א2B.;7П#w{cO; &f[Ss>ңз__ddTU"ikY`E1mPY {k&dLJvZӌ6^JoLIYHr4|$!i:AEw;v+6}=M 6$$zЃ@ @qa1C ssVH7Y$n۰;/YM[Hʻ" Zp Z`kܚmF}}=կQMM m54490nn}u׷ȷ`NݍJr\`IIB^Mn5]w@hO}m g2XO핏xX^7c  RĄK/Ĥk(R`؆/1a6@} $0kdb@A`X{t~EEL&xL ,1'4ق$h! {UBQ"}%O*/>&[Np 9ESd$)ٓP-/Wf18TYzx<1L$%$0bP$!@PUDp^ࢋ.׊]X# |dn3lذ.$ѣGk׮iwy-{yk?C̘1SM:SN9C#d1cxIqSLX;<֭[a=m4Z5WJ%EsN]٫Á䫯pi-Z !x7B0o<$I;lv)--R, k>#G<@f33g~^pBUY`B9d68++{+' dI5]3T I 11d, ̓鄮 Il1u卜w\<Ԏ2l.,TE_"҄Fl"* XbF-ciz]BjN$Ie-tMJëf??A#nP@.!+kFYC lYt%KǿXl3 [+wm90aB2$I[[ /)u71NĈ)--e=)S_[ UW]źu"ތ3xZDuu5vTgGfܸqP[[$I8pEQt:4EEE,_<ڃ>e]֪T(<,P3$ۺ6 bN=X 8%9!hR$. N)UUχ:X?ZGL jЁ,(~"* &FhuA9쳏!9$9Iljd2a۹曻Æ kїv#gyG|ﲲ2֭[KZPoS7Z|9={n 8L&Sz\bK 4Spk'wmذ2 u]m9~_"$5A>ڵΩۻlcU0`$dbtx޸ TM}ֲ{nz<aoNFyyΦGaA;w%CرrPR\)-)A eر#*jٹs'~y=464huػ}:(((`׮]N@C:TVT* š:"T2rrr:Ժ\λ:tOcC|}^!77&OSyKn>m)؞5⺪(X&TEKS-F$TEll6cϛv|,~!]Ӊ,ɝ]=&>hjB{׮*mRlY3gԯom%67/Ԭ{,Yյ=B$ъHQQQ$Gwтlvءo Ԡ(J|ߌ186lX[s!N͑B0f*[__!9 Ցkt_쳝 Q X 8) 29{;xMAJJ2?RƎAUv+Æfrb6d6(;<@^=իRIII&%%9'1!Ąfb15d {j%&& U ޫ':(ԔdR+-?Z]w݅'11Z 66Ɔ:22hC21x@}Add ٧E][65a٘={f`٘\w54={6\pVV޽>B#蝿TbccX,|9r4Z$<G%99~ロ={2wֿ`? =BiϘ2e Wŋzrr2?8=zpIro}'|ۭo-z2==۷oq$IbرZBv"o֥ē2ڭW*g`2uFABi 0ͼ\wuHKgyߤŒ$1a[lv^}U}Q^~?ՊdRU, 6C3BaȐV+&˗3iҤDӄ7᜜\v;UU5qXUGbb"d*Izΐx6l/֥\4}GUUo_Eoq3<] l=ӥ=z~G?T!fifyQ^0j4!)Iw~!5N V 2U' EXfzJ'5={ci$g˖͜>t0ɎErUW/;|bzGjZ/v {wkZm?Ox虖N^-ڽUy<I՛\_NjZz= ^7GoĽK}mTx4y<7ן[1ᬳXL2={&5u%ܽ:e3sLn7ǃHHH仕pVpDsY<8߿Çc2xe+<̿lDEEիWc]6jbdf3\x >3~x^~en7={'|]jrWx2xUUy駹Z4>Gr£uBP^^ޭ[5!wv{3t^ ÇG!DFrjPUضXNHJ}={LB-ɉ∶ሶai3q(6S!I Y]9gȶ-;UN9e$58m2vq(1v$ :Jb(YʊjGTKI#,,kqєӧo?b,8 Ϻ"F:C3yD*dРA(B݌"ሶb6HAQbdGդ-ʊCLU88mWp޹gV b:*b0?ՆG2yd^/ٴ9jo=c8!X~} $Ib( III\.&Of/c?m)EEi^B=O7cc횿2E `,kN n#rwúu&D$, ׬L[,~WHGSe>s-Zdd21w\nfTUfkbaܹpgġf(((j6C йfC}rP[[KRRڒ1"CguݻiھݘM 0-B`X4Jg#I $Idʕ\y466$I|Ȱ$@ BBrZB)wl֥Gy'OΝ;#֖?fFeZ#y/tҧOUI/G\zNMё"ʑe ?~<ٻٺe+[6oAe&LG0l~&I' D0K3B@TE=(+G{7 $9$YIĉ; dYfܸq$'G0#ǃ"ovBk.jjj"[VjkkYz5ӧOv|9s 1coFĵ9.\9cuejxãt҃7@gOjډeR`ZO"m}Kl^x6JAB.[RRW_}hO~7ٳgGHS$IҷCuN8BпA՝>l0##Y3NOOg߾}-蒩SN9%B SW[MuzlټʊJp:zȤ:5N1lݢ?Ԏ~(6emb:Y \0^/C36|O%1!x-drД<55G C AMCa,xRSSX,/PB9YY|9eeesUjH}}=fGzzzKKVo>qqeYee%TWWӳgOn9hѢPv$&&-ݷ}PrXlݲjM*9k3{p9{r0MillsBlaٱYX,b=j$ 6A@~A>;vsd2qƙ$ggc{Xg։b>@ Z_)aa.iʔ)deeׯ_c(^|>oQQvm7tTWWcZ[u$=臨_K$p8<;5BxO<_s/CZىk~r:ـwQTT"TMgсΛ9˲Ltt4պsԐMTTn^Ç9{!L&ya] a455@LL(~]Q8$az ,TUtJEEETrdeeҶݻwmB6H۹Ёȝ;V|nt%+w}銷2^[nÇk,$Ib͚5WbѢEx(lb,[ Jnn.x̞=_,YD" Y{x&6F[K/#O\~?rؾuNN eKzuڧ>UӶ0L 6+guY8]NϘ01  EV$#Z*ynعsuuEQX90e[.L'^k]8%%x<3m4.֭@ e IDAT[=z4ÇYm$6Kh *oEp$%%1qĈk555|W|>44u.W_u?tb;,̀wQQQÇ[HXCNxVX3"LCNii)Ce{T~sҷ-bccyg޼uBj ~QUL>K x>2V.0444騨*)))hETB=C455;EO>ա*s%&&F2͝ܞ ˖-ka%99Yzꩺrє0`ba͚5mWm}q===DZZ- 9͑N'Z S̼R>Lf jeŊJv>ܦcԩ_M wQTΖd+@{o "  ?\" bWJ"޷찛&J0yDsfΙ99yzZh($ZCh۶-mڴ!++5k,G Aغu+(FZĄD7k8u_O'?51Wyad]̵t5v9l6[Cj ۗ#8y$zK.4z!4h؀4h؀WlIJڵZF죭DQW^tjժlܸ.Dnfid.*kF!4i``Сz O=Tˋl!$$J*9{bn<_4h'{nϟO||i2-PbXdl%-+JEvv|^Iرlyg۶md2ѱS'~\s6k@_YiO ?3 ܾmO&Mh۶-U(b0Jo)hmtc.aԩ'OMϰ=233=k;!f'^6k!PLOםV() )@jdp/j~m`/p5h@v͛7[$A1"009[0ddd0 0ioI%??FYbE9C kX=$#ϲ1 ;wNdZxwZ: (zYEBBB$c/. ^^^ɖ *߱,HXT;H6m 'qQ~ݼח/wbccKEJJ ne0#$$Ç}ڵϏ۷48^zRi-@$IƍDEEU̸Fѝ.M (( ;JMoРAج)-jҭ$NsgvY&O'NI7n&L('V c>v`߾ ;9>9ׯv  8sL-ՓȡCl;dݱ@ZZHh$>>^>gZZٲC۷ٵsLٽk7$gMO6Y,|||p뀀%r4UVmiۆ;兯c0m/?8wO&QgpF)򹳺 _k~~>/rZE)b;.a$[=IK\8G^?Er.-NOaWЍ+zkH(P77\$|2~!;v~sh;Rob'`vO6lWly駟ѽfnܼ/q56n0q-Pv%^5 3dgu]H J'(P75jpSU¹1l+|ۏJ"33SHKKm݆۷m5XT*1Rd5J ??@T` 0FCmhӶ ۶3g8T*,b#X>HxψM1ȓ-))O "Ç/b͛7'<<5j6ѸqJ˥E-fлwR"VN{N[Br$.sٽ%*{H81kG@XۄJ u>___BCBټi%'[#9ʱ8vGr%Z Kf2opp0jDLDQ$""Gy^O\\*Tl6kӦ˶ϧzH of>}hIsA0R-V}R̿T;N6"f觿l}dAoM%@)F4r`Tвgu{;$T.>mbꫯϊsһwbIsrr߿Iv ܹ3k7nF\lFF9rVZruvCLL+T@Vs1*EFң{wLfsiȑc-".\ZHX&9My/QBBD>Ӓ Y5g(X$pѰGT3$ˈ#XhܞG]d-,WZ-UTǏV$zAZc>VQPV%44$Y-Zb 'x"ݻw΃uH租~"**"V"!ԴjӖmڒNCATt, m;t #=PZm0 *5FM6EWbJMmiն+I.^EvJKKCwRnիE X`\ݻp"9VPHNia';+xrZ96xV>?*].A8DΝ;wsss ۵B Bfj4nߊg߿t:)fX`0лWrKԽ3޽{VZy7պB4 v4w=ҳC)PEnn.'O,3+::LYj5K4֯_`ٳX,&55ڵk9W\`0sML?~<3g\e;믣;w.ӧOsEQyy{Ӿ]{í4aaŶIfdggV[3bt:>CueWJ֭R໧ygmbbbYS?w.W?zcʢ|vԩS0ׯs=̙3y뭷8x ׯ_ѣܸqC& ݻww1͘fڵ`HVc6 6f֬]AN:N|my&{FףFN煪`a_rz͛7yv;Nh],N@/n:E85ۗo!G88Z%vN+8pcS7s1" ,5/2s+fDNn@9J'((38wӐkۄۺuk9٦R*`I֭[\t}gĉY-[pi~W6h0̟?F? 3ƍӢE "##Сw"g?L&yrߝCt"[ڴiC-Q*#Kgbyi'xIEjԨ(;E{6qntЎX9~3K v:,5u[T T: ?9ݰ[&9O'Ig/J+[VnElW.1νC$ o0Z|71*.N{ Q߿? ,p:nAhذ!,YF7̛7S.Od`0eBVw})XEvt;LRG[_6OYr^["6 ^y,7'LU=M} A7ѵky3vj# |Ϗ򿭧'~~q[vK6iK&*pp1_ɪs9qId`K,P 'Yp WuO,]E?elyg gϸVp,I&ΚuWR q`fE>z$$]1Iu8, !, ocȑdZ^]#1Q ;qFŠ+?~Lp{1{9|||6mCNI^___>w^ h4ϟӧeeO epT*<·$`4Iuxs g@} S#kD,j9 )Mg>/B0pz$ gw|Ξ='|rO$ V=,mF.]h~7yf4 ZYZ9[BllD[nٳgtRܹsI;v,s̡M6y{ [9Ξ=˓O>IFFF{^őf͚Ih󏱗j{:A|+tU@fM@q*OJZz;6K_>@19~ܐ_';iidsOT̞=m۶ IX~=SLʕ+L6={clقVeԩ=4hЀ[ndVmEQٓ'RRR#77`lt:""",5M!9QQQHD޽*wI+ 0x y(Iz| .Ԁ^=;lH&[ǯNnK+Z1IBBKn=XokP-Al Xg*skחOHJj,T^z)drd!UH|S iPP6#KNib#+ؤ P7@̄ xx&LDbb(Oe9P.vK"Wvo޼ɩSjT*6oތ(h44 L:ٳgsU?**nݺNpp0 ,ԩSDhL0AV:'dNV`6PnwI۾}\cǎe.-?TTJ*!Z޼_wil\3u&6[:q`Fk,hƾULveJ69pp;fhZrniGݙ+&W h٣5ިytdw~ۼ]eԫ k7GhЩV[l',=Oo؆NШ۠MvMFRs::}z6ToXa˂ N>re9i1g]Kٮ*帙l 9k|Lf@J |w fp9y'N[O}9h4$&&:XPT* 4ZjDDD0sLj֬ɔ)Sxhl29]6<={dҤI4i???ڶm˔)S6Triiil۶M[Z_KUq IDAT.Aػw/YYYXF <ӕ+W֭[}lXҥ] >ł X ThXXD$~BrJә^-[P )Mc\rkנz"a5V}_aC$|n(EQ)r>{7Yf /"}1WNc֬YW>YjCٍ7ҩS'}]fΜݻYf ZԩS1̈́ah}> 4iBdd$ݺuiӦԨQqƹ 0eVXX#G???YdsYs!ۛ'N0h =^{R0, [n-6wE*],5I]xPk4:tyd*k8S@(-[o_&0, 0z4, F4NOH@EЪG||<+WvP֭+Wߟ-[tRF)JE HNN۲6mҏȑ#j"++Y. Chڴ)o&8qBj!22ׯBu5bΜ9ƺL(HԩS5kc %ݳY5Xd < je@{pvNJJrnN B/MZjRK^Xu5!!4 ܁)))evСC1SZK] V(Z,и#Ѫ\#::Zz\z!͎rqիJ"%%7oRJTchXr'33aÆn: ¦Md+VYf|zy嗉"''3f0fBCCG/@6mؽ{\hD""dekONNO]>P[hZ]-U*Gj Õ`ՠϪ܎e/{C·3Y!5jOJd"##^:H$؋5lJEff&^^^>ӖM~W_n:EQ7n0vX^ʭ[%00\/\֌^:׮]s:a2Aڥ-fI۾ۦVo_\)PpСC=8npýP̠VÕ+m9zCJ'1&ϒ#l)<7?OBBj59cbb.uٳ׏-ZЯ_?}Q"##|2?#~!-Zpp5 TVg&r0ܹ780%Ib׮] 8. ٷ:&ȍ]s\X,[v۷i{p.;.g K1.Ӆ x:q*$3Ήkɱ YiUZ e *blC{F9_{KO@222H/؏QԮ]@F#5&֬YÚ5k/9p&SL˥[6g'u)>9@{٪ 0.] **EL">>WK=zd[\`ݙ4i [n^z([d{z5 ѣy&gŊE7N~:uϏoaI8tLٴi|c:nCzz:f~J/_.t $IT!oXq Yd;R)ě6;"c lyw~e.[INgWٰh=~?xƽ[=~ޅ!#F!\†s3*A2>Q wiaLƋkx)?UzI^Ux}h2O݊E b;Si׮Ǻ]y79d ?ʚ.?HІ1yrh-ǯ&6>q)<8Kg+طoD'7.ЫW +X+({E=z;ڷo֭C4i^g޼yn2dˏ}ƛ7orIC=-[J%44fϞ͌3/VСC$ 8\W\\|OAZZ͑#GHMMu`o})\h4ҲeKwAV`0dWWZX00:4O;a8w˙{3 ?Ҩ]6r-%Ir>D Ͽv8L'0ًN:Ea6$Q!]!7/C}zrtf[a@%#htLPޝɌzv 鯑tfMg8cZ$`m{cEny3) T+ӏnN\\L&T % TlS6jd .CiӀco^V]f m۶-/lm!-[իyyyܺuEa0v~~~2Q~jdggK޽iҤLld2233Xwz 0`KРA:SO=% 9#HI/Eֱm9jrO35{k 7aAB-~PV)n1}\+}͚b}r=ZLrԋN(+We{T+}ˣs:tQoId°X,c800vQj"{2BDDjZ˱ߢE?JQDEE9G5xȖ +RL`rËcF歺7 &1xc&O;3gwy+ s ;2QIIIOFPS!TwEn! GɉnLAE13_ R C$JH,&v.ds>2@nF*9"dg-'"xEQ1PmGь$P!"ISM4 27xux넖۷>.qS(?X>AOuD Q2B'Od 6ŋ˃>(GJ<&Jt:G}.]cǎX,9c~~>aaa=^x`j5ÇG$/^L-8pJiĈ%^W`` ;oMAQ+;PH-HPaH8w_ M=wD[^~-K>MQgoGjݏso\ɔт! % U1x#qv|U1GϪT<1,j:?(>9YpINVHNiC>t`>PTn.D'N ܹVn-)Vӑ([F$IΚm2337n*JފRcXOh4*n ֭]y0m+.#ij+FHPa S; +I]xA_xWvis@*AFh!4=e'Iа(v<}H-V'ӉS!9uM# )QfM;Q 6}2d;wߟ={r : V'jBE99/dԨQm-z>}O@n#ׯw?_ MUiӦ)]QR}iZ$t8>6~$qhbV;'ǘss*zRkSkO_Kǝѷ69E\BrJoMׯZstw`0WNYItFѣGپ},:2`YRpoЮ];-RHNi-m+X5A CO0] a JÅ2k,Z-/^GߧO>[zL&Z͛3yd78 䔞@$Lⶲ_qV瑚ƹ3HDHxS=7%w5MP+$0.௿B׮.U}}ܯ;Y$zrk)oooA`0> 6dرDEEꫯ:8PH E#gX,T*5jMBRRR/Wݕna޽ogWHNia#9gB1^^ִ|??DQDqͼΝ;dmȑ# DE8)SRJa^^&MbڴiK) +P ZLdg x\ Y^:qVVɗKtBrJ^.]@% PAI7FLח{^Oll,5j)NA^Y((L}(}ϣE?w. T^-`Z<Vg֭+mq͛7ٽ{7Zya2HMM[&.ڵ ʕ+iٲe\ Q@(VӉS!9>`[,I:t9S bx:I^ClfԊ ţ>oM #hQDǩjFӶԮ#/=OK-2̾Qi_mm?f͚9?8a̙sRt·|^V`\&LӕN x뭷(m[ow^N8ADD$Ǵi߿Lpl'%I⫯B7T8<^} AOg1}s, :D|BӭwoV')NU#ق;d;$ If~^]_yشn/&܄Kq!Mow]tk_WDH؆ٓ^zDs[?D?.ԢGF$ق4VV,XE6ymՕ$.('ORU,9/ n'Gp5f HO(9lDe۶m:urC=/Rw-MjYXz}>:=In`eԬ?>W(5ϱmidߺA+|~j2 *o 7!qAг=kgƛO<&ݰa52f~i0LYuؠ "aS ./A7d׮]$Iu:l6+ô_p*c2rp*4C_<1}?GwꮽFf3^:o%hC 0$a(pB%&g#s45X_3A잣 ?S*P#<;ͻ N@Z'$F-DBZ*)Y<ܷ3I}͙$Kr~[!9,t]g՝s$9ǎ)4NG}XdDf̘!|׏K2}to+ۋ7*PP& B*Ө#47u1L@@7X\]:`r6] rغ}j3_S9pR'rG8ZωdU0iݮ):5QzyuX>p:HDKo4J@I*t)?P!99ccYaad31H}A 22R}oh4iժ5"**,RRRx饗`׮]}1Փa#u4 . QٽA7ȖT*"I9zRIWeTg8; ڪ;||%'u#bB$![@ίXvʏCgKQE5Cd%CR/MdjGl;).q?Bٴz}:{bp`n?j] ) t`nW0zgut ={G}AxםX,9={0ydhL}"##+(*yiWY'#>_ q/SF$6̇4O]l0}B$Ot{':[6$ACrt1]yڬ IDATYw 3Ԥc~;~,#MG:H-b5޹߶!Q/"iڴo$ r{<ܵ WwV[ʜ}.0GCBחAٳ0ջfx٦qqqXBH ͼ<[>s,hJ'֛O&||\/әr`>?xVwȥKT1X"III2>dE___Np]% cOp(P@=Fǎ]\T!9L2$z=͡RAZT~RF{l$""YYY4hЀǏn:_NVV t҅1c`U{w?x X/$9id줄 IY`4RE!9Wx=A5k{) xwkEȚ5u @߾}eZO>zN8A||U9L47uod džx722P!t|-e{h>2_ժzd='n&VI `|]zZ*aF /_fUmxr="""ۛsҨQrš@f8*/7:{Q!@&GePjq5%ȼ~[TOgg<ã B ])EEiJWaA" pkς" UEzLLID0 fe^gךsc D2M*}y@%?ʐefv5`9?|vd$tڸp$~<}J^عz8qU/r7osC@"'oBʙ EUfn\AL ):/&9˫=])ǣ.fw}ʠ>qF/({&~޽{ӣG""" 4T$]}nnhI&N½S9\nЪ3}(\)Ϗ__-";T%YQV| uQϳ=(bʅWx,.r%<[e'$6n5+;n￧B =:K/D$Ol6[)SH k9Vc8yG7Bf̪?SDڊ jF&~*|i˳y=nd*rbo޺ %^"%*K$ЪըԚ/%X̝hW v X,fT*C&u1+u_K>LI VP _32;H"eCֲ؈~L턇rCE, ˏt5~n޼^z|q@عJ 1z_JbqJglŒAO˒ҥK9q3Yj3?$IܸqPgMJ"ƶ_iV}Z3v|?Œw#L=B\^Ɩre˱[&*5d{ Ke|Q9L1{cFg1{LAh@|o 豰,?@#`Sy֊aٳ’Sgo{{ɩY%?x#^pv;:ݻvZ0:֮]('6mJDDk%,?ܐ8dZ U)! pW.?8p^ lmʹOM mcDnϳ}z)HMA0)2*&3+*C_[Yi֣g!|eH> V=ڴG0f[yxB4wB|PrF4M062 2c<_!ƍ]sTXd36£>d'`ݺuqi@9>~xg۹;95x<UGB4,JPp~G] tt.۱L9,ׯy 9+};T: p.Hk_/=wܧkѲPrILC>.z<5GNsa0ċ|NVɄyvyN̚5g2w\nTfbcc u?nI P[!u <(H$ZN>gYQ"J۶m}}E(9v&x񢲵bŨoT'<|)0osW9Ppl@,m$€4EGet:W&)) ڵkGZZo#ܖ3PpJ׮]sߊ,0 v'wS'"#z0##bcD€X:`J={dZc ,%%3gI7o<?$wKnO ޝQ!RG]v/~Pr|uߪS@!, Ͼ!:*֡mm"fw|͚5ddd<$ @rg?>AAAl6, {wPJyj ?$N?Zj#Y&[JU?%''l6j d 6@Nf"w(8,3}|YݑR,u\QwBnՊΝKPPۗ1cư`lHH9QPj(CTTdjC֠є%۞bBΟ?k.֜_O>JNq#?:[JT߬,|.ېn'*9IDxx8}Y-+W"iüy `00sL,XZfܸqNٰ0֯_ϖ-[(M,3m4tSPj,+hBBDdQJc8 өS+9B)N37 ?{?lWUmW9 IFt:2p-[0aQQQlܸUV`:v$Inr+3nvvލjSpSjv!hw)ҲFK^f70H@ŧe iЯ&9>jIbt~313׎vºuؼy3_}'O˧T*) EZH|Νb]P3 ! &ʱ$[xr~(imuY&Xh4b$@$fOh$==7|ѣG3sk#FxW*uFF})e$ND2sJ*2Or2V_W`~lJ_ûe>P:̾Y|W 8k˖"rl ]i \ۆWS,_Ի5_1HJ >t(9O${xfÔ7qDFn+IAA{%b1`ɶ-s̡CL6 )S̑#GA'/'7˯򸉌7y a-m1NpZۗVuBhԞzxmBIG g/9w8IJ6<5sg2]TGzҠ,eݐ$?,帺&@ƞ $meZb>ޝ YDŽӕ/~N~}0=Qy"-KlW$O&ز%_{jyh}v p}˕"8$S, jY[X (1_Ϡlf4e.ѐNJUB"16>Vz<5/Sxj`— 7rnҘyջۜl$ڶ㱇 JU6_E]5B}:o3ݱ©P.6!\~wO5䚑pons/;FoWĢEjՊ)S0gΜ8W E[ª{t<׿S <'Ǖŋyɡ>mhԈ̦MRF:vN###_\*G@m(o&1.T9GX2~߰m`1 3yML4kޘJ*}yԡ,ۤJ:`;dʵ'Ot# %DžYMpÆ|>9HSHyAffLdd21o<ӕ / @PBJ>(azf+`e%'+= գSǖo']V!bQgZj&mlGYmLlV fdba1Y 'Lw3 \ٻ5Ya.TH7q,!+QG'@Ot]J&n[6 lvnݻw{^8BOz&X.xE3pWcO33 w͚5~z%K8*;!oCB+ߝzQd:RQ&5m ؽ01mdByhЃ<'zRۙŕ'8uDl̞}hվROVG* ՙCI=u*8p&Fdhh {g|<2Q<MM},Op4iN\a@'ogw^ 0"6.!Kq>rN'#Gf*QC5 ƣjRIj^OAqvդ Bbj>FΒo6i_$рm^E򪭚He+\(9Ic&X<<7_V^=y賷If͜ ÊRX,7YpB>ˍp:'=|oݺH>9.coz^Qo>+O+ZQ6w dYv抒$_deea hh&MA$`1{MfTZk^H߸.p(|H(9nNtmKǚ ֑-|ĉF߿?gϞ cǎ,^X  *>GFՖ*f %}x3B %DžWyLSXR;t3h̥K}lɗ/c۩Pflܸn?w܉$I<쳨T*4h@f8ydH۩Z<G[JM}FDqB)+ҥ\#e˖- 0 /]'/D&yeJy"^;nGUBqrT*Z/i)~gy衇Xl119qLtj9$!TGRޓGt&=ztT}}ʎVD"|ʲFARFZ*fk׮1k,¸tׯ_ϣVc $1-IV*T!UD!6;w.h}qxط*%Gy+V8gϲk.@Ge0RFݻwSJ/_.@ pZn+& l 6H>_'En .s^(ֲ_ͣh& K cr|XWPO{8}/;jUdY&yQœF2228pGa̜9@N8իW1 ͌ ٲv ӗ󫌄$_y jyKt$dH90M[lʏ$!_[/,KwGΧ?5?B%?|擉O&=W|.؈(WSY}o@`LfcxjH:ƤcAY[qj93%NnMq{mڴGy( S<{͔BNv;;vdҥhZYf?*Usω"@%g 9،qxO<;4+]n?ԽxJqa=rzgff6"fkITdԍc_/'3O_Ws˼=]F~ꪻ?d,(g-8w{0u`5}ɲ ڣ3> =5 ֤]aT?u'_<̠ aY IDAT)wcٙm?m<%qZ.ʤVl6Sl]8S8]ꓳtiʎ|YISuVTq`۩^:6 YQ= b2T_?ǾtUJ5` )劝Gr%Ȩڵ+}~! %# Ffn4 4on,ZDpX?Ȱ>ge^ O5 ]gBJNKaM%ghݖHgQrBr-MnV HGS?ZZaIp47db)1P Ur:ub%Dž8| SՂP@z*ǏCa2h۶-w[n^\d~7 df&ayF%&IfÈ*]%*{۲+V+`2[0e!0COfBgqN:Ă7@BZz&jamdZQY"WRkLtYn묤g q)Ҏ0TԏO9SԕEgFtԝETUkWQE6}m|I"/U^.\gΐxdh4VEӡVю"-JF}Ѹ[¯]|&wcdVFH6Ix yaE ^1 F_7SbbY]"we# 9<ĈYRqjX,ޣf  T.\Ȅ  !##I5j/fqyhܸRJ4jԈ5kֈ"ypWZV, & DzU*WMZZN}&SI-n=(.X}rF#""#ˑ m\7Rv7Wd|r<'ՒSZ*fv?s}][{ܹsT^ܿu"2ǎ"l,zz=Z֫O_ҥKT\+V(q]B[&XW.] WA5!g1w\, qqqX,<ŋ5o@pLv;겵xtH(BAKȏE*p\ }.nޟȒK%ɋ+}y͟P]iYBqa*S}\$s=peԩCrŦlذwff&-VZ^V{wj]Mq;v8jPrM)g WvVf&bۊ+G$ OgϞmقg18@pB-^. v5N+GɩS]Gd*V,0gZ-111l6v;*ݻ,@$TxSI*T*dhӦ| |lȫȓƠ7ŋ{Ur|̿,\f3:#2oh@ (8qhSdhtJUKU}l^vBeJNq0I7o=Zs&L |:H;v F=J@@&Lwu>QV^aÆ9=%I\rXV1"lt mGjCRkjNoߦlٲjܝ?/k޽C[de %Dž7%?ukJ{n'hB2ydF#-[w0..N ,dL#䑥N1ѣJNq"/&خxy>peFE렔$ шJBS^=A ">hڴ3fiYt cmAYG:pe9BXw\ f"%%)S @ k) )5 ."WO.p.칭A7n\t %DžQpN^hԣ5g|e{W26D:H~صk F{}~S@p/Z^@fHN‘HjG`9q=U@ڴfYk~BfѡCTԕHdO0[!ŁIM6 16; vBylʊe;QW[6{tnMrDQcs䚅:8.(g0xBW~dY `(9רQy"Sr$+Qǰ$ڭJhY`(-cŢ aJ=l%l5BOIR|zXZRvrr`jH )G6ogPpI",$u+W dȐ!^+u=NV+E2hzlM&5Mn+]q/Œ_:Yyqju=ZdY\G{j46f|qEWZFK{oGqQW\+rܧ]Z^1LrƤl8uw )=r 8q=6ǻ]1Fc.˔e}Vk=9jZAeYy~xrz& Ș,zK lP~;Q/l`!V/7;bd/矉|n?ZO0o5LN~Qo?O_"a# [l^cy%!yPoev$a6S;uOЧ>W7#tp~!5C~g9x<W #WklV=mWWC8έ8Ʈ,CF-HSp gY&Yj?(7_~?3S+;9KJլ oŠb/С9JQ 3jԀ y=9F0s&: `0P1 @YV@HMU{lbc!*JQ-p KmԫÇtr uC$)SܹZQ~njʕaDegd(ege)S۰~ᣏ~}8vLs*L AAʵk}2oVqcN+ ƏW22e˔{Z᧟rlVMJnߟ_'))J?hPܼ e'/,hӧUה{^=~P :m2}b}-EYXiÊY֭SdƍSI*:Ǝo7j`,>M&e_.\/ȑ>] zSʸ3e)t﮴4nLN'CRҖtbeԪO+꫊ܼy9eM俸k}â3e˭U|8 XmsŌ3F"rScR/"}}dfRn]F``]{yiW|c]=fCv5Kah0pF[l,Ym)QLQ"I$sP }ˀPY 6|ŗkc2`$ڗsXoybs8Sd曋i¸)OQV3 ]YxGE߿ 5.5mNGقaWYrJ ^0V0{/ )]gH}< rќ Mƃm65[MO?ͧ~ʊ+tȲLg-ŝ ]iZW;6՝Liȹ{˱PH6C%;YǖS1pF0lւg2,/ pSGPV]̃qw@i2ms߽m|x/!_ b?Ab8sGm;~ь!|2:osNfhY-[@BZ5 u{;w5k|oaذ"+KrMMpz :yFr׏L.Wؿ]NΝ;h4z6m*R,Ih4FvH^hbKuKdssiC_}#IMOd+)&+dfX†`jeaCpP &%#"EUru.'q 2#Ȳ1 ݆h.9c.&z{XY vkzԎHjڹs>[eU.toի{ޮB. Ezɓ,X^ϣ>*:W (HDY˔1dDJѽowΜ>ɣ7QDsuѠ8}Ǐ^GXq,tמq4mݜReq|I=Іڸ [3P:GUà'zr1 - ҈ ¾kN8q$K0ڕ#;BPmm=J>cJx~"XJ2 %A ,اOV\#{ՊKFpo̚5&Mc1uTG (+JvՊbd2a4HOJs|r:t =5X,,Щd|jSJ(Z_}ry.Eخr!x]څ] cn޼1 %GY0#bCZp7(n"-K(9.}Vy53dHNz˗>zѣG_u֢[8 |r\Nu˔9醺u  v/!oȲ l6:t(iiic@).>f?crP5X7eŊN_ʕ+N06TmL&$M/m}$Ibw}/.]*$DQλD#͛JVdJ, w)= .]мysիFa|WC?@ѡ +5 VA#dY.UgF#.B)cz{\B; t+2hW*WFe޶mM4ҥKTXFt@m`5FDFE:effTE۴i+JZ_K(|dk^ܷo;wl6sϡG8w`AkTJ*J+5~lVh{ 7w|=8B|h (s:{l222oݺY B deeH  g8YΟ\IKlH%dt~JNqLo^”\5&6qАԧ>'v~&MP"NN@@֭[Ю];$IbرCA (/FctDI*0j8o-H+_ܷ4h]y+n_Z8f,Ҳv ?&r% 82,g)φ #FZЂ! H:wf\!͘1YffVs\rCn -&ӰJ"˖#&2;饤։cG{*YG@kOax,P,̮'$T9$ K>Ͻu ( 9JZɲ$dwXAe" (I|z-j7#]q޶$gcO:&=BxY|[+(z>1èӀ1; K| Iq᚞7=2hjn5c=c#͛ݻw,|$]5&Y[%nc|uY~VF/ $==̙33fH"Q>;jMSv/Ia̸QT oNJtF$SnųyZt<=K?}-UE|)2ʐʏϡ`WBAH\,[U<_s*w4eān…J 30&0i:MjSUtV.XIo3pk4m;xڝyfdWBM2E(f.FQh'ZJD< _e!I_`#z1K*;L'^dd-3ZIY=7?+ROy; FNM\<26E>.^,Ҳv X89\ _K_K,!#=d|KTJ+CLpp07n ""Z,:R gh9RHNY:kєۤm%A *K !սW(W' '45?W3홶|6@EZٻvyov@mKHF&Ϝ{L1n= BfגOidfL?o ['+?3Rz<9ǒw ɤSh#wŬ9oTˬxY6S4 1$jr=+׳̹qč}w=L:qYv.*֫maٚAC]cUyN+@aRzd%'r#ףco-Ҳ%DžzM0&kcP~^Zjq8#N :eY&""X6mJ˖-EN՚ѭNΘQzѠL )_M>]4нKenqᔁ1 NFFJRYRh.#/FwT(E,r8]lHi &,fR7uv #r;AVi^.:TI,d;Y@2Uj`L"JzF 단=tޓ/>TU֍s+O2cîU?p`\Z T_Ftވ5ZꣷF8UoEM%8>WC^^OX9Zʕ+ek.W$lBZZ* Y)S@fI| 6歼6wtkLGr]6=1y,:/H7kAC 2o"sj@dߴSkw(x5z/S^D@jCgV3kO`sCB%[8k3i͆1{T kvTP$efFY`X9"נi@RS#a2v#{KLd aU oENvRq|IDATAq9:~5lVzO,l]q~=jmF׮] 8lZD*v7K.20ee|l6#IF3H$ifLi%5 !Ɋ]VFԨ !aӪKU ]٬Ɍ}"+p'8&NDž$lVkJcYUƖ/6 r>}o&MmQ#rW 3ؓrti`_ =M|Pc]u(ۗ ]5qo]DWqL?kM Ѡ}k_Ҷc@߱<8rl$aɸʹڴ V% U~fMٟ~qm~6{y 4'= 85kz \$}4Gy@T"9qꢜ2<V+A>#SOsNlظi]* qVłdh2pkƩShߡEJ$;bס hKthDBDdd9'P'I ,!aْoD7iNW)~*RA/#I tBBB{N=x⸍^9, JGŽjSq<%eUNT5Im]4- 7JQpd#CSgp_)P[Z5>*UEZX] fOÝ,f #pFPOp?NѣX%$'γޛ(#JSWYF&LemS=2!.Oqp8Pr\M>9)v/x-Z}T͗JfhhReXKjez>@8+ y )'9@ (#$Rstʘ/JNq2 vBS*lY" ӽ{w$I`6#"B%i(@ (5]r6Gq#-[p'Dža MY3"/TVk,˄f[yτiF9g$0DG ~,$&&qRʲLdhtn~JNN.Uc ;A_|e'忼cj1o̙ޠ,F#jhZv t:#?S?\d4Q8~C#TjwohPP؅ bʅ1%(V̞]ӓIs$ʳ>ju:O~u,:P ;EG9``K͏fsK/v%F37֭=0peꃹt}u:ejdE 3Gt@ F]«`^ETv~pZZGu<'yq 'js+i<'N+Õ+WHKK@ѼysdYfڵNơ8@ ]Q;rb9's^:5,sY>Sƍ;@Ok. @ff3ô(B nUB)N&375k$'̥-#,b|IW:Vlݺm"2wyGlM e/)|X1JyO;9=FFϳlL&aH- $֖7l"-K80y ⟃0 [zDr ]Ul4-[t#/jn/}lfQ Ø-HQTŪt%KS -h]01ʗxQSB:R39{+o~h)o uZ%I o ~Hk !+ˈI[dNKĔujhRP%BllOvyWV+WˆV%\W5&g@Eŷ&).nBVI&1w\ Æ dk aDx$4 !awtLXhRxUTZy-[0б2hMJNMo^ /Bj*Ƹ_Vcw\k׎!Cv-Bx2i)ɜ;y,-~JAfKji,.=/B)R=zk/x2tgrK/eJLLnM\\Oܾ jZ`1[X,XV6+v]=G]JFAѠjwXsKܹsNf̾ n2(1QQY#F<s|wѥKv+Ǣخ5v$ T* ]Y \RhPh<x-jEi4,0dw+CfС\ѐV>dڵINNv Gj$BʲǗA$v;ZVXq~;㹨}A7mD߾} 8`>,€'$(\ٲJ={"\d !!!F/:F K `۝M4,(߹ܿ]e bff%|/x"regdcVʕ+5jg'-@pmq,<@OB[qqN:u*S(9#X¼F<.W8===u|f F_e˖QzuwѢ ;/>#MЇU_{0k.5qmNZ-L0At@ J7((`vx}(:p8ؿ2s'76>#ʕv|=qq\޽|5C}o؟|2px]ײw[ys M+c^xhkcydz_hh` 9s֋/OLnUXG9kd``|=|`h[ֱOK=ҥ5w:g~;<cgƍO<(*bcn}o/P^Gzb` k۶?4`H7|K/Ue9;uΪ6mb~:VVn`<.Oo߀7N6njk{,0~ ?}^0v,~~Ss-JJ9륗]؟}6~^?Z>!\9{99kD#ؿ:gr u6GE2`4\O;!1+4ZD :Des B*++)>>կbigkUϪIArֿh֭42++//'*+3dN?`P-œPO$!ArAAs!n=-wco~ƕ "*^OwbL `cʆ *RXиy[b S#?FTWXLv^#{R;K5޼mO>u1/~2XY @cBX֬U7cޏi@ɸ]i;7vp# ̧[ 0v}r*a~q%mfżaPp%|CoXCgGˣMjҏQ> rͼY|*o~,;}>+Mpvqǽ86H-r ?:4r٥'"$]ω=xjo}{>ўYfє#U*Q{HJZ38oRҩ)]/DL;ޭTT֣ E6UHꅧ':HTNy*Qq2"!= }^g \XU?±݋z2?Q=Tt"F<.EPN(k9O% D%$=PA ڛf.rNZWdo7bTVdğ 7b[x;e} KD5x',cآˤ'; vgZi6_&2Z;6DKMyVlɸ-s;ȟQ51{"Jor,]"Bf}~[tgoTQ!hWd*n6,=J٥>;*ZuS3=-+2y Mѻ&1p-ꀛ{O΅R;3@cF gq \t[oUɾ4lerC&bՕH"]D>@xx"E\cإx\DdςYQ0ȕɹG&u^yv"a#Ov-S]xl*ۅ)N1Ž("u OM̿H~BmZR.d8|:@n=ڹ:Š-7aLgSݤHvǤ:Y,)OU֯yȻ:Tt7c೚?&,4ۧ,_RY9BSI'zQ|iX}Q~Ytگ\G3;d~U`H̟L30.v{9dO9 4❄ɾEi:u0.EXvͣ:RR²GmzC;+P(([}ʋ)6-u_fI- V˹GPqx JY&%3>KZ xm*V^l' zdECڭnBBQ39,A&Aa:_`oqL{æ`|ڟyQlEԍmxGc@ n(H֫X|>/#,[\^З)W;}b"3l#>Ԇ7ZB=A6Dɠ=XȀ`]xq8i"{9iu7;h_=;&Tʲ`1F ݃ؽ\I ^ _{găkDKPqAa]-y*ۇ zw a|GO cOL8o ŏBg;2}J}`XIh{7]*ͽKTߴ`Ifţb)GdV6ʩg:Br|{5q,nm/ߨVCjG.1&;wAWDDe[[e6kIEǐf!I$p3Yt nyNC[w![u&|^uV^# +s` 2 Vv893]tR ~g rJ%JWJ*ЕQk>y 'W|ҍO׌հȤW,PtR,hȸV. YSح`ϒs4߿}` lF߶wrAw|q.6OW}"l,ڴũ4> 9BOeӒOT*сC%Ҿz^f@8&;ʳbn`B3Ē:Mo[ZWKڥohszq'>_Ύ#$6w#SvlfԐ<:d.KeN?g#6b.jm5#;z~~ TfR3/V*{nY ^1sgiyWo?wq"#oT~y?tO^ymf j%g}tңͬ8|Гq[2uY8;%3m)L2cX=m-)]Tu7i>٬’I'<:ɜhz3#}l;Y:ewu# V:dӉ̜ GfPjIԬLdFayEʘ -7JR4Kc:FT* ?*:*0y&i{(L%lq6Z53m1;g7󽰨4GVy]avzԲQ9x}hnˁӹ㻍/^DZ_$N aڛ튏9 "{9,mڌ]{{,-K v0{A7 &qn~xK1Ij4jn^0*?R%\K|MV3ʳ?ECA奲|22z)84MT*ږ[cdl*/Jϳ?LLhY(B (@"<񬯪@ t#2XB@ `Gc׮]xywEpP Tn]@Pyb ̌ ] $)^aeG #,@ ܸ|+[{ZT*}hƕ 4kA_O` A% 1>f^QXټb+TY 'jMUeO%OwFMN{nygwC-Nq⎳wh4*y(6Hez/eڨY% ??"AS} ør1Ha{A L Jܵ<{q%m TV JVkͺ3 gV!z*( 6ߙ%e͜P@`ZDusq Yi1.gcWzH~;-7I?F{GYmьA3o.m=pvqǭNOJ]q67r˥gg/>qviEIIVRث/G3* "-g-TtjJ8*?w+)(h==ElQ"m\DrpV/<(k> >=g}9k;oNbZoa>e [tjETTk/37Y5& FH(m̾av!C"9΂6W7ujѝQQDl!*n6,=J٥>;*ZuS3=-+2snFMV^L)v-Mef/RP(i{uǿΠ&2 8'&.=I_RPoSW2eU>=T$#X.n`wS ɡhճPe5OSeQ('sYT{^'FDFgI_,~~5I:lM~pT(P$M!N}"XIB{ȎM-2l*|+#r O2ugg>x9chdMaRf}@[ew.qgWƸ#f 16->ƿ'8%@-^m ; C=m"p4dEC7uuxĿң=}Gy8:+0SvfD~)C6,+2 w'XXʐס8#,SUzG ~ĄOaef!"U?â#Kw.eLϖ80܁W}{/EG6oNZVO$,c]JaSDT>ϼ(o߈"6#1`V klڊŧ =bX:²)}r#+'&8S63Imx%43QdMΑ ӌ%_ H f7sΑV!#VGy۳nII,%c=X՘q&Ny MѻvE$^pی^t.&qU9^KJ9(7yZy*MF gq \L*?_K=.SOFТDgEǍӴӯ9#]-SLky1jpLZYSf.9&E3gQ>*[[<Uw﬉k 1m„3~Ck><&2cQeIvZ8_~^uȦNugm{+#rz5uW*;GgYwD#W6'nM+?Ni:Djl~vN8y1{K&}፽>:f8˘&ӇԤ:Y>n<"u~ˉ>s߂>ߨp~?j+?ER3NKY[88ָ|eT!5#IRqkh\{|N"w"mґ$cHV[L ІØ IϢV6Ͷp={u?zVny=N-UWjo:踧ky->>-jcӠ;~{>zx^O,ƺV%q?ͪjH53+w6q` w:_`oq<)3#Xv.&dp-_n'Sj76Kfzd)X٢Wڬ2|U[|Eଡ଼ "4['՘-zĘj<({61F1ϔ]!hU9dca"![Zڴ& sHp-}*9CfCe韴^uzu-,?EwFErf;?RjFnToF&jF ?L%.s5p0M 8p5+ (fu7C.}Ӓv>Ĝ0^=7,g[ώ !̑ ]lzWڲlF G"("I$3dȰl=e?p368WueXWrf%| جɳ讄Uvo.ؖeTfC'nzŎ IDAT*\_ ;zn{efQ1&cxG{Kɐh5E$qD ڶzك{-ߩkE ߹OؑќUݥ:Cust١l]F oRxYGZA46uȦ;f1aޚhVjR2#ϰap53Vp')l,+wO]=N&ry1#ZX~Mdžl>&#o y9 'X>{(/hI:]Cժo,f{ޚv ?LƯK0a~bŸI}_k̛4r2X`%}g;mēR{$Nޞ*`?J\k.fcvnn{aQ!ies;$Ssw_f9z-cK O;{;ﻝvٮ`^!#>ci3Fow,fmS[S8U? K\]Ky޾7gH8Vkmgݥhkt<Ժl洝 6]k2 ?il +w*':$կ.N4|c&d7]i| ߙz 懸RV1teԚOiD^usU&t5#q5,2*(| H׭蒥Y:q\pi5,9GK&ye>Ҁ:[$7dl2u0kqlmK}''ڸ|g I.Og0VA 2fԕ69ٗ+ge2݁/WS3V|OYH9c,`k]\وq| ?/'-ä_ .u)XX TFѨJ߼@!6#@ Xq?<쥘$557^^^Oz@D@4jڊwMT-SeGX@P 021Wg @ K @X@ "@ K  "?ix/x@^V6x4o0@X4UڶU5~lͺMx^,]=qVhTVѨƍ+h֦p{ fp*|/D-I~]4.MNxNKӢ)7stb+& p͇mK[{O<;/ȲY]svyuFaeR+J1N ,϶+5"񜴋Kbq=;9zaRO?_O0!"v<)AU[|m75\qvfՔ1 ;;:4 J~~R3TRh4U>sUlʪR@XOEgVY7`oaq9 ۿq+vJ.COiʹ; ʲo}yNaڴlՑz 8j3ӴYB@V^LAOy{2Mj)P(z[=Ҁ:_gP2 N$t ^pCtb'}iZKBQ/M~^˔MW,@ȳE1hHuMW(P(jc&U?"7ogWr?8 κ̥"ː@  iGE-O.8Ibѿ*O_%&2sUwO Eι 8]BQ7w*Q((ubK$?*K:|h혫'Ez^T& YG_r$on7SY<g#0?^@ T*aF}ysޏֲ|*%9`R0 "iEyFQ79I-8[b>fOl}gryA_\Ȋ8LGRj bds$4cɗo`#Rvk.?AngsUȦQ޸}츛DRR)KI1tcr5&{|q_^ a[39y6sG|5k'l ~#K/I d~˫hu+N}w3?w6_"g=ltl3q?sN?\}v[*(Ĥ$JS>ߓ州o|Tjgi 3cxsw]q.yRr>Ao݇Iۮ)̀҇qviNXj>u@#u*(Jʾ!a}_UDԒ~ݤ rƾ݂:J%Jtq*/wZTtW "*}$%h)C0l/u Lz2j= :+ 8n“ү9#]-SLky1jpLZz9fMЏvw cGl/oX::cTݍ&bnĴ 6@; C0chRq GѮ &1jpL~ͫye!֝15d-cD^=@HFyMi݄#&ǝV]b}$&6TyӯWSF;Wc/.A4LvѨLfsHW$U<,L:0iov0m>1z1q#7lӣv ؆-._\IjYw1`‹}BWEu| WOC\r?fc a???cu`-7*MӵN ~l5+wsq3_1>*Eq[ v?jcD8d| =D`h8!G?#xiDU*Ϧ{i~'c܍})t)+w˷w^cz;ULݶpX6Ր$_P,VwAbh\|N"w"mҋB$cH[ۿŤm8/" n뙆X˭yeCrDM©%J-]GGJH]!$)={% _C?HD}UCO#*iVmT!G_ݰ>C>n+ǯohǼfOƴmoQݙ}rK,_u2u Y(?yu{3HUQOġ CN̮3x/(0V^cwg3^Q=?^vb§2ʃ3}*Uٶn0غ!&38I1Y6^ jŤ*T@mt~7LTF&jF ?L%ey L**+ (ot7CőTzK^MKڥohsNx8,8Bb !uʦ~%-kCSy>Ñ!a+ia8mi}__ ^Vf˱#\~6"ʢW<,)PKgߥXwvf̛ɼ]3z *òp\Zڐ_g\ZzIDfQ*QTjl> X9S۵ ھǜCrל$F&ˇ.8˱:.Zmy?{f5$?Js'q<#_tk7PT62$LJK KmN2ϴ՟H&œSϒ٩> h)L2cX=m-)]H5(]M0O6+'.巰$r҉rţs24N2gڬ̸3_F/87ef'8If9}nhlZMIao搡blVjR2#ϰan<"u~ˉ|ZR.d8|:r=kRMdbW Ý|~8c `y07fw2oYC\Evk]̴@7;c,v¢BYuQF $vI,N6x)rjZƖ~Av0w01w}5ε7s^+Drd'oڌ]{{,-K 0{A7 &qn7NX1ǞlN.N:d sgbޮv5Ɇn ҫR >,]kIҠ+~ Ǫ~q;t^2Vizx;4t65~Llc|+}F@N_ñDJ ygg; 1VL3 kFgV7ll5ˣ.u[pԱE1?9}~͌p+ţc[z244Ȳ1>OFT|$Iѥ5G~>Z* ̪;ucc`Wp˕鿳su ް |Z~Kj6? jW{)i+'6MKtgcr0ReLj|5b>bЖ>aʻ.%]7%z)Gz=~]oUD@_}9孼@6&1( -.*'cf~*qL's>+<;2A@!ߏe>ˮC. kS#zӁ,3eb.eSv6:v%-9'*ڢ$y_mtZXzl5g0dgJ|?ݬErg}4O_.#l /D%E!z_0u$<ſ *CK@7%ЎM!dLn]L))rlyƝ mė Hfހ/3qFN˘1M$FeJ.Y- 4 UD(Trˋ8 TeB@P c OQ#)H ,@ Xq?<457^^^Pe{VƹiB[/& %/@]F}JXZҸykax-]Ą^"-j#z_$$B@ T FhK ",Fd*%ҺHy_@ hֿ>{K" }/_4}jmV8@ /TU|EKM6m41hstI!s{>,ĜFua/A0UKs4a?SOKU@ /VU,"G6g4qhHF昍Y=&z-Mn&79B}K,wY3P[^ g'3#kIJ{)1y[LL*&*RFq,/ @+9\7h&ԟ'o,kg]Ԑ6,Jh%%K#em$ɧQGC1EjIA %  rhRX:#d}' cFiMo!a d}t˅pm6!;:eɦ֖_>6rw2)=h(w  { yu@6-M 49Rt)Ǎ簲E.H*WF0n\@6*&*w3I OȼLJ zHZ"έCZ9~ȌZM5Ţ̓H{#FDѨCA@]CusZj!u6ՃHI~ Pl=YxTQsۗ 5*Z!>ȕ:VlʫnEHߥ96B Q }$,TUR3V|Ol'o KZ.FPIWgV6/E+Jٮ J{|A1mhF;64Ri x| ܇!WےHkPGU3`Dh4wO{EfEs4Zu^=Ew<jͺϙP5|51e+VZ;7/ `d>֪1U4($}WDžD Lٱh"<& SG](= }^g \XmCVa ;?* rͼY|*o~,;}>+Mpvqǽ86HJXNdMyhdl鎳; eܺK[Jy^yugѡ;.>i!b_о;.2zk |/}8MɎiix{63gRA9>ة,J>cKr>As>LvM)v̐ 'gxZzQK3fޖ{$—6mRNBޠ7Ry(d}$E2L%^H@m Fy/!D,-Au-R1G^]C.HI-d;v r4 h m0k?$qyFurwBUv?MGymG9HGhYhb‘^W$y۬ѳ@PϾfѼx/ZR.Էu᠐r~Ƈ9}a_̜u5]>K?bdýscL͒1~ZWdo7bTVdğ 7b[x;:gaZ2 ܼ'{ųbƎܺѯS N&[ IDATmX%O;a]&=/܏Xx!A{c8?Ke_+,on,m._`q"7Z"i]𿸒Zb0a,y3H9v2Gr-/լCOWMoz JK^%rNYϬw`kfEm/}5v慧egvs4aBWɳ F d[ 4ߖ3 -)&~' LMlђE&}R}e+%˫!~"RL 4)'W_ƹ>gFE5W@&!E&N=ЩH]Gg12cmcw(crJf Lݙ^J`Nj޳>}w.s7ˏzAӆL5V2 u~f> zZy0bZ->{?Of +J>& g뀟 hO[|qY1,g>hÇ hA羴N<[ 0y} 5qshÐmbB)NuzÄQh~3/Aɾ ^5`Y%4GI (wx#^Y%±)`&1p¥@IR+kwqrRdV+Hȍ00ƢwruNNm̜E60BAT}jyC+\jn/7UE7Ԇ yGEu 4]D@ B hl>EcED,ػ^bAQO1F.TPTlX(, Rys`ޙTFe𼯙4O3z8 *E L$zϽ`rUy a @ x4pa{/uSb@ YF_< u:K AbZ"Ȓ˳s5E@PZ6iNȥ3z\A몮ED'^ QY+"dXOH;~قGۏ92/Z+WAG"[+a;8DPB ކw yHB@!#CQ@ *vd="5)0!NR)҂8wʾ۹ :x<L-e8UOQo:hSޖD`'`e<-J鮒;㈋#y4ajw^ Ǽe$Yo=@ Kvc5S3ݲigڐΣFb}"jgͥH4=oi/+LF/ڌ>HT\j1iJwKJk潉UדRuݜ8E@V(b9>~̯%@ >+!n|d<*u1P~\Ex}m4.η!8FLwcO?Fg{N7q5E Uг e>VdMcwc"/=d+EfT*̭)krl-wRNȉ;6%qEߨu(Wаg_>54=ڀ ư.]ߞћ'1M7$6$Z65\aǟ\pwaWZ7ao\k nMi㨟D6e啙ڨ=O$SưU a]Z‘F-$E~9 ky0tj>*cGUScem=|7|d'vE})k m-oT!.6BiV1S t$7`nY>Y:@iLUr'+rdϪ ns3b(-̘]׃iMkb3, mvf$!. G)&5ɿיQ5lq@3ejںhRQ6U݋9=N]!QV 92UUz͙esgsvѕ`@[;i8+m;UhSasNaSW:..N\[sT1{k5>h],Fs]uKW\.G^ 5T }{F_|[3+wFӈY[`W8B&eU%_m sNgAۘ1hby9[z\ r031QlNf 9% q3SۦlfuRlsħ?[`l\D`´LMSSjxD&œzm_pu5pGz4iuZLi驈,e>VZdt]TP֠$>);e~-Haؚy1E+x]MʚhK4JߧU (D-.I ~ɧݾaEڲ$#su߬lU 5ѿ+6,K3mVyBo9pNXY现2"'%0 +Ƹg=? +k[1v5sGe׆X~€8+AeU7ƶidmU5vE,%erӋb d$`—8շŪ+'",%;_.Y86X5(?{a{DF r L<²uvg'2|%7Y9ď-p$Ž0*Ӽfz[@PIcWh_f?l͊I-x11l0rf]p(E$g̨T_#R lO21ʖ*3/{|*WMɝ rePNkqnMz'sqp'tgK[_ O.PmP&W1:igdaѓX{2'WRH)bKPAHȁ=pc5WqᅂCvFj(ZYoيQZhAfH<{H+jjeXOBd)%|VEP ( zv󢹅>ں8_ҋaK cm 4 jvPj&[>RSQO/xjL˪$yQY\دWul)-q-%;2]*Iǖ%Е -д1sOԆbQ"*0Y~9z BUIʡԱ/sr.̲ȬeZRj=',*TY xd*=1P&"f%,$Ϲ,jKAE"9a,jUKKK,--d4Բl߿<%MüDF}[''H}'&NRosn?)kuT` 7볡#uqsb'f|Nc;{uڝhBkJ|xHh2~-dl4p9yҦbh>q# vꀍ8ND]C-TJT.:ig'a\ 9`6@1l 3 NXwIL!Z˿*4kyo )<>G݁Nu~?OYutzª6}= |y JyBvs9%4u=$^x%Vae>SaqLfAqSL_l&yC%E&:tcܒYx8X)IO8=ӯ$i#3ZH%S:gqvQз˲}YV)/IoZw,bLcK)R㊤;>m;wzz2끄:ryVW.B]]yXFtv~Ȉ [o<w #P"/*o*Q(VaDx,ncbfM&ѩ'_ҝ*&,Z%[y1i]fԁ{*F0UxRmU}K7U>gZӱJC& tW/ ?h]161 *PPٙDZN+e$-VC fn! cot@թ5MLyH/@VDyO팽Ԓ}\8M6"?MM6zfATÍIS\TZ7M\Oy2;:}=k,Ej\OTq"JlޏyjMY'%E*$dF&XHHU0'J3٩93CrHgFBBfi2rzT,x.R!ەR)Rs?NlcEz5(^w?}%xUïQʞ2]X"JmɰH/JD>8ȱ8{D|9yN)YQ JtjxAJ[YѡZ-Z4.η!8FL߳pA?$`OXu)qq)k6+h(ׯQ Beԁ8b<wtO&6Y~Qn]ŐeU{Hnyn qI +P F",.{|"C/+q?_1zՑrT**SnyflD{\qĆrKU'kO>tŖ8 IDATÇj"H[ޡ4oITwuLNbv&O?5EK%A50vNsc.-I9ePxݲSA.dG@ [q;8&}X?>Ll?G+i7TWݳIˉk5z.=s2l{Q[#l]} p:ab'Fp: C3qHÊ)hf\eÔu$ @#zMմ\7 .fZPPH_l+PU;Gt$y}D)wX=}#I{ts1 5ãM~{֯=ud,f eQFiDߗºI+Tr{-WfT@jE}08'|bE١4~(= ѫvlc-F!-5kgiULi XMSr߽4ЯG=gTQuL,w V>Tw?fm] ]LUKů}]Bѭ1'I@߉w^ΖxO8y``K_cx@O/g%wTCfԱ#m3x*Өfa" d3dO_z[0G͝{I߅i1x35ȡR:쉝edӦV.:Cߎ5B3s-ZB9hΐI k?RtjzP?l/^/T]Mm5fVϚ:t6!^ۜMt_ӉcBx=@x/[M } ;ESմ&Y_;\\[sT1{k5>h],Fs]<o,g~d=fGvu]Nݹ:oVTѸn#nAǶ}hO1d.;$hb9mFZŴBv,{,Ʉ4iK>\6wgԜښP+]?C\D]]CP$!N&q̠ &Q+lH捰ƍ6#dٹ7ئ9 6,@ іiV [Fï]?RKyq`KŘ,2c0du`^|a ?r6YdHPGGSFaWAO@ PD]ܱb4UM-$&Vteٖy|}N_s&Cl}NI/qoU}W:NEXJvHCgfƣ-Vi?F9iy6fXYbn$&x]pmlj[.=s+k'Z@ N9wr+mV0H#k[9s=:Df6Zbe9,{씛[g[pYt)8ȞGؕ?a3E~-cqvR>}M9si_~G^N-Kؿ( Tm.gOd$ap5;sSӇ,,"kEK,ĤfgJZ9.8𼩢daѓX{2'WRWr8n%B]Cט Yx;GbRwҬboG, wnnʂ?/vq7_dS9L3/{|*WMɝ ^tPf_d..l;}cq+G qƌO5/2$S#H!xpta󿗸qtpK%Td3~-cv2T>-ElY>XbTAQʣ?c?ԱDd'ev u@E%T$joz_e؞4nDf;-q SsLTĴErtynm|T]Ӧ =;yBm]S|EK"ψ=q4ι4j >GǨsPBE“&ϛyҮueUTPհ6MZ:h3iҬL.cqΎYM%gK#&LZâK61,r)kDglVX'22&jR"ΑИj.$e"ųtLSU+gyL;)B%еHٲ}ʤG+.z5Z@N]r#%e?%k:\',"I7k~7XmY snEӡrZuXI-2X£3r΍#=6,U =VejV-Zw4:e̕2X﷞@Jì0SI@fL\[Ȳn %YTg"?l4eru3P/rr:[&6=Y)4Qe"*U&.Uٴ"::R~ޅkW5!nظ 'l &75wo<qJ#Y?QšEYth4j#K`n/Wl=i7K Ʈ)mg?Yi&͔;W1`^xDN5Ԣ뾞<5sӨ ND:M\J{ꀍxNN}Rس\ZF;)]`8f}pnhOγ԰ڲ46+!$Ek';gu-ol/g6/er*67%]l$-oo>!X|p}X4_2q)xltk~8&t@uFs7΍<Ϫ; k_܄ߔer12FE`$"p@`ԁ{>YTTQtIO8=ӯ$:|G0fVc˳N+|)K=Ev{zف.?zʃsq W%1@`\qqq;s#0@ 1:{}k N Ց˳*ryçX\怹<d6yS%]D>8א"҉G=`؛KJ-i{!+ߴk-~qkmF$*.N5ܘ4;M̥H5qlq]<}7OSMJT*Ųy?V'/,N6eF^ī4WW''v 36B*E*m=l;^F8]ɱD_U8UgE_}wbZ"Ȓ˳sK7EƁX՝Gǭd}} KWä Ko@v]܌ A.0]ߝoCzZ= =0ִyK __Xۂ;ۑ~iAH e^칼 .Njrz $qGzApu^RלIŶӴJWψugVYIO L3p73s*l/ƌq.To@ %6iNȥ3z\A몮Pȳ;njaו &LCߺK4("=;@3"J a>Mwij6`Cw1ok)q׷gI iӅ 9FcH2j/ڀ+ {]p!Ws ߅S\s7ao\k nMi㨟D6eŨ=O_.ƍae@RE%DB3V`RJS&?W=[6õ/1+Ы1)#BŒW !wTRsL?G'uibcV3e(ńf tr68aQlںhs #ZbN|ϷSGHTl @ 3n"_εtx5s\?e[lY-cjWbTj$_Zˆv4GfmQ=O,X9l5+S]/g˞ F:RUBPwَS3g#~⽧D?#6t%M E jҩ6fZ Yl?XLcw%+{vKge,#gWY; ?ąSٹlBnzSq.*sv^4ѻm"k'̳4Ҟf$MC˦ j(lyل0S')6Lb@ |8껊Lwz4??{E&eU%_m sNgAۘ1hby9[z\  lks ojTk%ۥ?3l/mQͦ{keMDz5Gw J]6㝩ijJ ;с@ xy3"ӹV3 4 @ T!.6BiV1S t$` @ x3ܸ|*f4uo\Èpn\ľ~{)oۓe Kά{[f1Oqtkiз {Z<1%A}v?@9)Z" \.G TJ `d_a@Z7o-V6n8 '!}2oڟÉPor"9mIfUEp_! 6-Y$aWq29_s}ÏM&*52R2T%p>DwKK,--Ρ7\+ |9^"*iw9rNJӼVet4Xŗe[qz;}͙s u:T ;&ĩ-V]8aa)#9XY7؟+}(M \<Ϛbem]70g8b \z$-VNy8veآ1Vֶشf ;+k[lۍb|NȖc_\be VRQ (e'mtGYbհ5g͡>gOd$ap5;sSӇ;),"kEK,ĤҰ5;WșuD-M<='qr/e`^z% K^"5tYΐIQz+M 9]M!s4+&p7o׫[E]-57B]Y.k u@J0ׯru zHlE]RK"%g̨T_#R lO21bC2ajÔ=y{%z@'|DŽݧy۾ ;rm@g vRjT,PW@ةUtM>-UKjv(%sqp'tgK[_ yʹ?ԱDd'ev u@E%T$joz_e؞4nDf;-q vO c1}LOsS f }ltkן榺6e__t.p41ϋh+D~޶G휋YZ(?O#K}tyP=G5-$Y$<.1*WTYa:8V7Ö \hԦ =LxZ1RFϖog:&4Տƒ:G ﬣؾ4:RFOMƣ>:R|;gUJvPP>&ӧ/MtѭH-~yC}12K$"|`fRNۏ˚{PE!>dOd{̟ރ|;DА63ss5+_믵p5#e.aL19Ǥ._#I&^ɤnXKJPǥ'~{HVz+6gljG.$Y9nǤAb}ۖ41zέ'i % Op!Z,"6yEcȐ\bۼfiеO 矻/e}0+&TtpV,,9٪YEêMXR-;Lut 0!{|m˸mҔ)Eکvm.m7p22d9Tѥv4g"?l!ДR˲~/(=GސB |C-Nџa^^ :GOg8ak JP~ Wulo5}4a{ =<2O/guㇿn$:Y\]Nv!<%mlJ sĦS_uTF7roJ}{?K@BGVڀ볡#u] pqU怍pưir3^Yx:`:ݕF~jCl4hF4^91b]{DoLo6n]S~LMtHl&t,)?Onv4<ӵ;@Q;)SV?a' MƯezmӔn]ߓe>'b.\ljڝkƛF"Vx3SoLe6qǗv|헪ȇCn_QIZE8 r6J+_ٚDsh2n:Hx;W|Y^wOPG'ʑ8pplۯbL ˎ M~t2 IDAT2Cl`4Ϲg'_o3{Uc}Xx@ :5Gs>ǃ^L^N@;AZ^|iw$>߱Ru(K6ΤC5͒o*lsEz{җՍQF 7Rbza4p(d"lv2NZgIw%:=c#{]L?O)`܄^p#F;;~^yE{׆e۹؉mCO+d7aXNQݑ$B! +_),wD*G썇FGxgB7 J[gk;wìJP\oa V&.8z.L vUH|Ɋyzodģī鼥8w=IގaxvdO1Bv݃58tf{ץ8]O#F$7?rp![CC=ew,t%e+)ہWF3p7#4gXc o*ԫ㛒Ч] _b'QѮ eT \%7!m0_ƾ3D4&UgW@GLjx> ~wjӥi%DK|E K'6A[Qky MijF\Ddd$wNƿJ: fJU`\fՏtcB7ѳc43y]{H5f'޵@uuu < uuw2ia[KiL-bDʈP60c+7&ri9c{sAlEM1?6$ qY X06-EŝVN6-Y-cjW1V7KKvwQ7FbEسtHsgaȽU^ dt/{zH5ey|ɖžr>g.~nhڱޔO~gWpXĀ:%ޭ_&_ɝUwPA+̞:+:6~0hxbpy(ry*NX:[CMzF&@ x4lҜKg{rU]]c399+]g0`y'3[:=,v7u='qYL F}b à94;8;Vk`U6LYGr4wDN\Mupۻ(-$:ЋAAŃ bA{CTG; g{CIi)@H63?B)B?y|3;wgsBHr{©y rդf_XinUI=!=FM]xӕWVq#a Fb]@|l 6Gqrgl&]ӓ!Z%[IЏ4i%Zu#W>MBI."Bc~w gJ'6D45N|̫%-nHsIl(;Nb[׬➉jmc;֧~x7NYs>dD\}]χԨjghƍ _}Y 8z،A$>ԃ&4{??mx7++3пZX4`m{s9|hUk{3N{A.oۈz4}3 2,8*w^j/K{- ʍ}Syvԏnyoq^Eƪt""j9M)tLungΐa /Npkwe9_Ѽ4Qt-3M@s}Ju8S6ɪ T\RuQ:̲EDDDKDDDNm<\gi"Dӡy(`v%u5>ΊھХg_,9 Wyy&~[ϚC=JP>)QNitݟ:g֊ÇoRDDg'Kf|Bէ5L<{~ !rv1)71{{lC\|TE~ù7e lXf=֐U,w o'6&'x6Df r"s5lHÆ ipgyu_X~V:;e.gH._S)_N䂆DDayf1'fyZ0pm͹atoZ g!Q=>мeWL^}1vq5'Y˫:_t".Vn?-м@n|i.\0z$ws1mZy1/S|eЦ~QFʚ_Im[r*U3LV>س=Ы 83-˿Nԙm7 :18yoGY8sa-<\~W=_,Z Չl|x`rs컌9?&᧗$!ϼ䊻Qa Xݬ9І [3 0VS i|>z==GQgw/NJǘ""}ԋ iܛF""{6VߏDD7ܟ!M2m-iְh^YuǮ i:2~bd"xG$g2 ""KYr{R׵-?:ܖ"gz)S[\֐iSֳklrAz/ۋDtf،8`Z,eNJ܇ۮ׺Ds>sւl`]-g-dSڑceMO>siG'm CP}1顫MmxlߜxdfA/.xe_O'guqS?6a^gmfG`)U$cփ߮ZMl):Yom*ޣZ*FGV-ӊ l 70k?#4@$,o8[UR iU]0w7s氻U BrX"^]́{\1H5ΘIrͥM%#h!‡XךRq+zG4ۓS͓tMԡYGy۸mʩ#zKgRzYKlc]뮼?ИIߕlٟg8- {4ppM\G@~ټ[Ɲ!~ϻv0wYߍ{z]r/6/k@qIˬ\?˼)~[noi _ħ%^͗6L2+2(ڟhoHk][Ej8fгf,ZEK?xp8LZ^|vCébýޙ~֡ -;7w? e\k "68׮]y۵[X7Ƶ}ΥU\G:^~?e@@ =c1o]muxNGuskzn.=%{u&׭,u&uophˬ :uOk{׶+}X^u`D~Kڞq-xY۫mk[FL\0Z.x`sn9zKѣ]G ΚvЦpYW&NǦ/Cێ86B*Է6Ux~'rz i+̙2l=ǗKy)\l ,ݫi6FM in{a,w]o'gsF4&ymw"oW%rI)qSW2AyFWzmYAsXHW`PL[Vp?AEf4=c3h[/_s,>wgUtpϏu-3w牷`ӏ3|Fj֙~ecCU]v:rpq@PL[r|kW뮜ZZRh{Op>9 ϕv4+wcR1ET`%']X(]>.zR&ecYgTl9y>gXZ_X.L1G>=Y79LSxe vdJ:ͪ8dr=Xybk &LXd xZlyUkP"i֨#V /.-%Yw,l9K*/Iecʑ󞔍k|YFIL9xwrCOm]yb޾U;I;΁W87S8q/߯$˚X_*;7RqyvF8@@") lԮ]Zq9/U}zuް={%LG*lθy:U>UԄQ6vdyfm^%nwr_?sMW{xjs:no.)Iz2zw̢Yy-`gTԕ}t.9F>mψY̙+R\R~嵉s8vUo[%IܝWXc%jR3Ԏk/̟4UQ(U]׬4Y':fLH9u(o=Q6.o١~P6s __fۤ2+uWv@EDNݎig^~|d77$&=<]U #j[_ŻpZς5=}1}ȈԏO齩Qնs7 F> ,a=yl Ahc6^w@Z8ޕ5݈O+8P9u(o=b7mGÕSmv4m+M*Q^wm NorՉϮϊeI񫉪נؙ-ҫoVDӿ"5Ư? γΜ!X?^_ **P<׬ }*ijۉG= .κv hθV""rBЭwxS DDDDуUs0v B=X"""" X"""" X"""" X""""%"""%"""uUZ}CL|8ZDYg+Lf/%z$\^83GqD:3y+d4<"""8o&&c'ȩK%ȉ X|NI :1,Z_{=e, n15X%=4s9CG)&& 9EmWoO"""h}4*IΖe<~e'DDQ6'|e5O?1iCXu)~Ҥ/f|\[``DQ >y?i_s}f[N,}jὝ餧y˪'1~.%-bx$:YV6c8\ɻ {ؓWƵSVײEDDX6{}<} ObՁC"AqDymKo^[^cRRAH 9^1!b=<|X1gWpCb}xڦvP%u8k`yTɲ{4\3u on< gܬ %474& IDATgF~pJ=Q+^}w<Ƞs /غ5 摐̈ȣY9o=?ӍO &^kCT sԠ^q; "NgveTS%Z e@LP;(;ܠuҿ"tF_#Ytv0!?J᱕)N)+#r^!O*SnyR6r 1ĸ }1v$v0pn}y_[ >wlKV^~t.+S]RW2ѹ IP?ky IP;ݿ04Ve9^+)n/9aCO>t`xv>L/ـ#IܝWŜI"Ņ+W^8#hșB;ru*&nDA!.,~m LbކQq1c}귾w#aᴞ3<6cIt4ϏiW'R?ÉQ߉ڇ]0Νmi=j M(څqWDx>dD\}]χWDDdKOWbKZuN~+33k_os#TS.#"""%"""rj;=~Vs0v ӂzDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDDKDDDDKDDDDKDDDDDDDDDDDDDDDDDKDDDs]Yv5a*v ҹpX0vdY.KLf*\MsѥC,xy\wXU8:\cU3+1M ~RKiL-`Gۦx؀qm_ '"r,4, p`0 MüPezo)Lq7k˲H_E\nYU:]KxLyl*O<>Cz l^00 1{;n 4M|>/{TVJ.Sq*^g9s7un;\DDN`||^gH^N&V_n*:OZ&iSg9s)îI]^""gD2_ka*SǝW"',`Yf w}/o-B nwzaJH-1v)9tċkSD X?ЃBBܣ/W{G)SnV-r2^E]v%H""gL*w] +1+ܿENh*=s71)~WDDNUFoNv1 ZDĿړONSaDDδe/_Yߞ ç%rVYLTϖyc"vTE{4M6m@NDt Xv4б3֬u*|Iߙ vmSyvDEѩsWLPODgʹz4jJgm_癦ARj5PEDN}%ڝGOdENavȨzڃPDDTX""""R/*(`(`(`T D4M<7+gU۪F``vi)lJL ALPA*DDFҪMb5PADDKlruSMc[qЎL !~6mvCT,9Y4;6 2U li߁~0U?Q{`l6;1XYv^,9zDDDzDDDzU1~"%"O J|^ADD؀` `Y>,QcÁݦUQ>Kg,)βL|n7 N_?/dP 00 ^,,q T๶x~--wѯq ]@hPbtURXe>/^Ӳ BX5{2o&vnHo %&ܷ}ԟ 2ډ(`hx0|x]y2+G)(>2O٘kbe~ɵƓ3nhz(4\X>}4Z4C>|1 |=jqM|3\0Xu<flp?λ/Y!3y пtֹ_Oǃ:&t(`Hut0ۍ3L (v-s7yulMz\V$bq ]Ȅ'~&E?sl]8?ۖ,`E3(^dy3A]\G*^³k9??XW:eiX<^ܮ< )"%"EVaqv0|^ ÇiXQ$`XUWz3UHCZr\lj2X?'C!ֈe}c$ֿc,y^ySGB.wYҾLO>f/؇$¥i0|>|^ww>C'4]DL`aQwnBivp>HoQ/WSؾo3 wu#=7[áip#~NEpœL|<<"UĔzbcWK2_ՄKZ9EDKDf F7^b.KvSmD8&&%}0syO|v2ї(p~6teP||8oN??eywvHu!B?v[էS8F\e7qg&^oxu,VڰyC]2gɛ|r7 9v~'.5Xg &<$g}qAwڪeEDDeWm*<=iEs-Y#ӾSo.w 齮SxcZr uXč%ͯѤo/s0l`Cm4xM8OcHgjz>X,g˗2a*F- BXh!r,AH"" X"RKDDDzi(`H5,`(`Hu,`(`HՃ%"%"JEDD(`H5+;vCŨ$4PDDOUڵSȪdژ84MDХrDHN˦WU,,,QQQ,,ӟ.r JUovA+p!e]DDNԴ6%&~ i ;U6ku,c$ƶⲡ*JAB:mDZ~]3Qu?9u,2-1p߱lXTfM]ipEDKlv,Kc*W0~r." X"'zPTwQjWʕ[)~x.lv;Zy~GáCfS"" X"ˎcX|9O|}L&Q4I˻Y oNI6.ͳoڴ^aɷ *| eE~ؽOtYwQ9! /38NNž `g IdHb;dM|ݣ;Oykݏa҇m °lL0-gdEDKleڲW]MM,MXpذwV^aa:Ch*uXԓCBirug\,WـGݫֽhS V88VX0߯ iac@YpQU."T X> '9'uktvv ӆ33Yp'3a5:unNwo8e:>,~ǃUɳWꜾ[q|f' ,  װ,\/GSU."9A&>g`%ly%HMAfb+赲'[&v l`FXN4m[kӫ8&aĴ(ޡc=num ?Y׫w1 C2-`3m&*؎fjED=X"'(`Y>p Z5ػ f/"t}" 53پOs =>?Ҿy 7kI71O~o0tT] ^˲*k^SCsc7 0P1 +Džɢ]G4/-q;Q;^煽}2sZ֩:."91lib& BphƮ$6,Cw//}iao s/BaBn6ujr?uQwo~#i hX8營UMu׺W<8{ڜӄ+{&( 0,:q=ߣpؽ%م6Qs!U7=Ʒ ,V+^dm`&ʁ." X"'a v^C \,)kƧ8&OpMoco cG9Ga)+3]5xǿsc@MwuP+^:7ރ 'Gԋ2>/Xyk93 @On ;Xs*\xϳpԶ=|L7xBx̼skW ,ׇi{ݫbզx7.ۅ61lޗMfq耠AN;!Aa\ n/r  \k;̾) k t 纙_sͼKsVf䃿%Lꬻ X^ _V`2-L4,d2n c{fyp}efMhx(֬;L +w 'FsŠF=޹ڷ y2G'E/1ldqB'-ych*/M|. e̱LMŬ`/rE$XX/ʔ^6Z 2qHNjەz:nkQδ$zCzQlٛiZ$A 6`Clٛlu$"-=)XV 盳6Ds +2,LgOF;F_&ya /-rˀ&\fk,Fp2z-ib{X?'獡w,9޺3}L𹱌Ww ݎ ͖O{w%R݌z!niyڰwea`Yl`7O0jY6;n@Ǒ$Nn#G]ߑ5OROlb r[0l?WVy! Oa Q9э? 2,˰ 6GPw Õ-0Yph̥))=]F~"E,WޑxxJ;oijvlX8!6l L @, ?R+oz6EVP<<3ɻeF+;F""9l6{S.$ ,> v4o35II8c[SϰjGc`!dfR{rXM2GClXoc'W䶀"iyD8&$)~i\.Qڼٍ#Y;ѤN(y Ll&N;BX:.mtqTxZ]_~Br8'VZ_,L{of)ojDDK Xv[S?×^]H@x$z \I1$Z&K k &gQG/E9n]e0}Y^)/<<6l6.NpX j9a጗Y[%B[3|d-,{Uȳa c^L{wf5]OW'_vi.6Uw+;%_Վ>5nc@um3.s[FөE4mQ|ߚ̌w 4{5/F8N&;rxs©:RYV@~ʲ0MAc6L!43K?AVmuoȕeլ+ں9d ?Zs'=> [l26:TrG_;&$%$ҬV1Ͽt*|>mJI&酏vvӉ$[0,IWPFibq888q*000," X"R}9=)azxx@t4Y.d] s:pkbzBB2h A;cY\nnS?p81L ?δ,_4ú=WQ098@" X"R}=)4nԈ@sqc:p8vEk /ƍ SڵMT:4k֌z~ֽrAÁiYpfxa`H*8Dh۫|DQTiڴ M6񐓓CNn.<. ۃf# Y UU{UÖIRCUAAYG;uQ9v:#." X"R;y;v'Ui+WvQQuIJH ];+ߘ8SH!]*GJN˦T(`Ǎij'_Yv RONE$Tpp (`(`(`H?N%nIENDB`stimfit-0.17.1/doc/sphinx/manual/images/fittowindow.png000066400000000000000000000137051517235503400231550ustar00rootroot00000000000000PNG  IHDR=K sRGBbKGD pHYs  tIME- EIDATx{|Tչ2B!* PK9V[ 5S-bjQMTmGPDx" $r9ȅ$3^kIf2!@|vvf5Y{Z Ɍ q:ٟ"99QZҟ_ƝQ?_Kʞׅ3gtBۘR|>N 7\>dGuS ~/±QJ zN_Bfٹh `9$JǢ[28VOܓׅ䵛Je5i 2һ?xP޸]]ȐKR*Ųq+PBDRT;±mr薒NuZٶgJ K]R(>~O^ uլ% .=rB"C)ş>NEvw"']̮ A);HA54@54]M(R]N|d-la#H Uc凫ܲ?fg:p6@KX8A(E݄Tm.툣J8t+nY}TBPHDC+`!Q;Klm~_ampgs,a|'~!?lhD5 Qӽ0!<n4#/+:`'vxkC%ij__mg}Z] qzΒ',0X)Ș!Hކ ;>{G2ѣj:udzqu8!5\_.?y[+yy 3(VՓuJ;`a p:UCrٕ^y}0z8I1?Zdl>!yîdžǧEɳ-/ _fV}︝k2!c85**eZsg3,Ab!M#&a#I9oX.ɏ[w$ Q_ 7-m5iY=I֋g¼Ek;&ަE̴q;uY +w1d_nU/~/Y=C bӴ6}UO?!l[mŖmFfڷYNӁjFNjwn`"~ZMWZ]Sy+~u}%(F(dE-p2I*^4˗,q?"3#X _{J._rUd؛j;wuX!\umg]GSr<\o#$qV~Ŷ2jkjW=&\p V'+; B!ʤB >{\!iAZ t]0 4]Ga(GBh-9& d>t )B h&%=C n1 paFDKIQ):D*qB>m2n otZyC4M 4 i -_E=ìW&P& `̅z╕1M%L@G |>Ē?BJWCi /{ 3Bv!4]20 xa7fWj$d vl +hycĈK񑚒JJj )|>4HAӴw-CCȁ mDȇU+h6t. !#&m퐣;2g:G"lDŒv_+ԯc|;xSk63N*~/*M3s[wE,fRGI“mpT*נdz>iω7{Sr1ƓKxm!l ̓ eӲQOIZ95S AL g ;{=t0Wcbxbz{6^(K|ċ9kcӣI /v"TXyWLvr ㅻfXEdg0b|p =/-SܞfJZk I5T_qrb{\9//sčfcWlF)z11l] /Gv1#JDsl''(&;:&n]0mOC̻Y޽MQ[ՓÐa-Ly Lۃfd;3z)zT/B`ae*e17^o?w~?n*m0w6xv}>| O[?>]̞sk39 4|[&olݳ7e񯦘ʘ0~>{.+dƥt,bݟQ'[]r^'QDwFrJȖlvnH?g_y~l (~>{a'عᗜC/[mOۉe2 /=bp\]xq biW8D~2wdK(|<5K/at %5JkLbiZwJ3mV@o uWڵ%,]ʴ7C+̲7Wij٘:i~Z.5`[/WsO3dM C)V]TqFah}]1 ů0mY1ahEXtf2C(jK~֌Gnh IE)zIYX۰i=I#N\z`%^t@hE @;HEC6F$SQ%ܯ5W6!@ y2ܷ/uo/#-h`gc4NV!'4Ϗ!b  (t*//tsI0<2(aDCOMNH AAJmȟFHӍ&va-WOB?nzYtU{&1lCM;<'J?{nr*WSMݼFz>[?Nrf?L0=kXG<͆fb>o_#3),;w'Ud1^3v֬Ysh,>bc8W;9y-|rV#?[;I'GݦMTQyMatzlw:@ Hޝ,2\̆ДՌ\5fbMTżWP's%y=8fgy]'Q7q/VuCuJuٟc<~NjU1?eƩf?_"UL|{L#lz'fĺA*?/wf[cȇp'?Zw*ÖI;xr;(Ot~06#n=g&|ˆ\FAу><EpkO~t_w?[͒֡*o9:<.#&%+L0۶,`0H 31սis]IsZ|UVn:W $QT(ědh kE6 ǀP*|O'5IbH^ ["hFXα{xes6?q.̹I_ڧϧ_\HTOfٔy7SŬ\4232HH'-54RR|>f(iS1iZǨk6ę뚮cFwk&58^:XN{yvxu Psh|wC*3_(J#`er3Dӣ<.iYs#4!鼠EgyH@~a$|f$ށj΃jl'A2!YpCQ2B-J%57a`ͤmz)ZM2خ#уc χan2;.м:GC js Ы$<8aBQ5+djil۲۶}B[{2xx%D &i3}I0a@4xT-ACJjf}00SЄm!ZK Z a?BHGI!~EEi6 6n!xH!lcxD5-J v22W5o v{՝s%[5O;4-4;svTݷIENDB`stimfit-0.17.1/doc/sphinx/manual/images/foot.png000066400000000000000000000546211517235503400215510ustar00rootroot00000000000000PNG  IHDRs^zRsRGBbKGD pHYs B(xtIME ')# IDATxwXW{(  EP%4khn4Ec%vcc{NRD  |T;ﺼpg-s3DD`___Ȉ 1{E؛{1lccm۶ pe7c1sO?]vEZZAa1a1Us1\p 19T'NeVcw2ܻw|1{5sD?ccc*@QWNDGGscwˬ=999qc1^pcoQjj*LMM910ǘ*277GZZ0cqcL cqcLÃ/20ǘ!"X[[#$$ 19TUnpcqcLE"Bqcc Hr)<<WFDD}*㛄YApdggW( htvvvHKKp_7oe˖ѣ~WYޅ ?o_`@`l =<c\.WQXXHvvvD&&&].^HC-ʕ+ӧMKφT~}QzqtU2442+44ZjEDDG+VY.4p@;wPI&qѼyuРA^n:JHHwE.iⴕ+W*=&"8q"M6R+HWWLR}!"1b:u;FÆ +w{Μ9#nG1Yf_ކMM%9@E'O˗/)SiݺuРAvZ""Ç\̙Cg&"h)`ڵK\4۷'{{WϞ=:uPϞ=)//JdffF:txo_;&>NLLիד%]rAΝ;ԢE rss+_&I&)##e^^5%&&*M?rJC֬@c9q@+78q7o4x`q9r$Qbb"5mT755\]]+۷7uԉrssKgTJ?7O|nٴ|rqQQeffR||.]!!!e.tR;fff7o~Gq7k׮JvDZcйsgg}` nnn1b/_/Ri=YYYHKK{޾?_uwfgg#** Z*_~ Jlו5kGؿ $Gϰk׮Wkkkxzz. =B]̝;F*Dڵkm۶mرcabbٳg ==AAAjwYtM4AFFF;sLw 0@ixrrr*q+WPK|SsҩSGeӧI__-ZDDD&MDkE+jĈOdmm]bKRliޭ[7PzϞ=_i.^H-Zۥ@R'|Qnn.رcVZU%''T*UHєLvvvCNNլY={4Ϗ>3Ztj&U3glLB$˹1Vϛ7oD"; TÇCKK 'ODpp0qa$$$`ҤI?~VZ{!44Xr%d2֯_Ǐcƍpss롦 .ȑ#HKKCǎ~zdddɓ}6p 4i6l@f0w\ԩSD6m0|TV {AXXiiiؾ};!JQfMxzzEHHuV888`͚50009s`ee &AAA8vPTTOOO$''c޽ѣGvZkW\ALL .\L$$$(((@^^6l̛7666M4+sNܻwGţG?탩)N>8x ҰuVHR\z􄩩)Ν;ڵk… dž еkW>}ǏGXXq &&6mBhh(tuub ޽{Ϗa/_z@M+ld2ת;wpiϟsss̞=uE rׯGNN6o,gFF6oތ\lܸiii8~8=z[[[cUd29rǎСC/`ppp@PPj֬իΝ;HHH@ڵ^zA5pa Eڵѿܺu ]v'|hڴ)9---ԩSFB`` }]vؽ{7lmmq)m]6"""pA!22033۷q!TV !!!044'|[nO>8{,FVZw kkkxyyÇ!9DԮ]7oބrssCCCԩSؾ};^cϞ=9r$"""oaʔ)®]`llÇpttę3gh$''c׮]ťK`hh\NNNug7^^^>}:vލ/۶mC/VtTV ժUCll,rrrPfMa׮]HKKC @a@jj*ƍ={ӧؿ?6mdCQQ={  ==ׯ_GgϞAWWϞ=FףM6ػw/ ooo\v x!n޼xܹ͚5 ;;RAAAؿ? CA]]B!HpU9r ,ʕ+Ѿ}{#!!qqq>>ÇV|||PV-d2\Ν)++ (//߯Μ9C:ux***+,,{qJرc)!!2C8R=J2Li^Faa!ŋٙbcc֕GIIIGDܷ"ݻ7I$q>z8s /)ѪUѣ?&kkkjѢ5oޜR)d2ڲe ;#nٳgR@@jJ\_;|7orh.]($$D\իW/ ?6oLDDSL֭SQQܹΝ[byWDDFK.)]500_7\NV"777x_N...%'_JvvvTn]g2ZhAFFF$|oÃөS'JTlTߥ1 u< 72"ӧ%K[W^cUƌCWzb޼y4-::zYf۷ӠAĻFիWөSҥ r(͓'OȈG&&&_|/q)SNTXXX)%%E\.##CMٽ{ot r[~=(탢ۘzQTT]~w""0aٳt%%%QݺuiڴiCb"/ރ;w͛7I__"##]L&#;;;;wn$ Uh?;׭[Gf͢R%Ry4r7%m7cs԰abOҌ3w+|!׿t1ߔo޼ał((([lIDD2CbɓbINNN';;[ &9;;SHHHjܸ1ݸq|rvv.vIIIԻwoq~+++JJJ*5=rGƂ\֦L)uI$|2M>ӋtE?rdccCQQQźUyyѾ}{#+++vڋOl-H_qcWs[nUQ!+++䖚JZZZZiE{ԭ[7q@@}'%s5kh׮]DDiӦ)ݻwiĉӧOE'3f8҄_uH__ׯtkFF???,--)66-Z$vb\Ǐ}JwM&L ߤeL"*ڵkԡCN('HO]P}(`c~'zi'5j]0xyy]U#.>x)舏---)))jQ4LDEEQFyG-w<ر8W^秴IIIԠAcǾQ ˣ|իX>UVoFh֭b1n YYYbgݻwN:}bׯ8P222```aÆ˫ؾ`?1k,]N$bbbS,\;PcBr~ GDh֬ r/2d:uT1bL:yz~iձ㏘9s&ƍJqӧwkr0{c-_zG_XSgVVjժL;:t耹s$  cw%1}$"xzzbܸqU27oބ-ڵk{iӦ\(1McU+za˖-Ά zc쵩qTAҽrGA̅ccDKK vvvhР@cqcL[nFbb"[;0{]\XjU"s0{-\3Oa1a1U {{{8q 19T˗/NBa1a1U H$a1Z`>Nt6l@f͸`c2cCZl6mɓ'= c1sԇOM ݻwG||3;v Ev:f1J5s} @|w8y$rrrm۶Enn.9cr9ѦM:u R|2O|!cqc2JMMF "!!Dva„ ~:10Xe6mڈg̘Tq͛ˋ 19*,hiipqL&˗cqc2rttDDDw:::b߾}!J1{l.(cdunݺB,Z9ccQձetsAnn.??ի7@0+@ĠСCA]]]yc1sU@۷oǡCpr181jajjԫW 1XcHzPXX'O181v TʗXcqcL˖-`1V!fJ֭[prrˬ1*kDuԁ>ӹ@cqcL a1a1P_ŢEPXXcn3X,XWWhԨcJ.*kLJc1sEx_>,X|g+c1s"Bƍc1sAдiS4j\ 181jժ}qA00ǘ*rrrB@@c1sG`1V&g!|8΅c 1V444o^^^\(1D\UnKuA.] \55-ckSFFF "8qo`1a1Ubll D}}}<|o`1/22#GBSS 1cL%LLL̚5 19T 000@dd$W$%%q00ǘ044DDD`Ba1a1U sw̛7\(181*ХKCWWސd\01a1*=8Z qqqBa1s1U[_~055T*Ba1s1UcnnH,X 181T3=ccAp 0ccLմi_~%6nȅccаaCXXXŋ ".0S !!!4i90S5 6Dll,vڅ|t1a1Jaii\zU샎19Ƙ>|8f͚\10d2t `޽\ 19TZj033ӧ΅c! .T\ǎQPP,.qc*йsg %%he=cL5l 4ŋ1J?Ac p5rc1"$u/a*W^prrƒ9S!CTTk0X`aap̞=v1Q!"d=\VAp1%NNN8x pcC^c1{DD,Y .c"?91FBQQ c .]΃caa!֮] ???ѕA;BCC)))wDnnncUD͚5eZ 1QP;w/^Dnn;kj""##www<~VZa)))0`wN:)0Xݻf1QPk׮~ԩiSYfaҤIpuuo6lߏxq~)  :mڴ0XѸqc$&&bJXcLwֺuЭ[7cذaxg߁oFhh(lmmѴiS9s捷XV]]pww|嗘3g "?nݺ) 91VE 88K.L& c*E --_舽{B.={`ĉ:u 00P /k׮:vnݺ!##RSLӧcU(UVawoRCmbbx)ORR455Ѽysϛ4j7o|'wE {{{9r%,, JnԩVZ4* ۷HsU {AN3A3<< 6lM0|p3```e˖ASSիWr~) 0X s%K/jX p .,Rˍ_~mۆ!CF@db޹siiiСCAm̙0aB@[[JW-((xZژ} @ J XD][N kkkԯ_DĠnݺعsk~{%9ƪZS111yg}-1T ظq#fϞ'AYзo_ѣXdRT'KJJBڵ-,,">>^ `;HDhӦ Qb;{l;Ya``077/q$(`H)8OD”)S믿*=gbb#GFܹsJcUI#Vr0b7!99ӦMիKɓ'ѧOt'NΝ;s)ٳgcԨQPWW_jnݺcٲebrW[y~7\~İyYt޽ Jw2 ;vP ^rx -U˕}۵WT50uT1B|QcU+rplْ wѣS""o"Jl_7qDڵkijjRzzz}OIIҥK{DD3211!DBDDyyydhhX~.͛7iС*'\NIII4f̘333o(%%hjjRdd$iii)wLLҶ|||[nJÇFǏkb .] 00Pe{7r}􁵵5޸YɓQ^=oTCXV7_~ u}pwwGBBB|}}ښ͜9Sxٺuкuo ѣ&M >>>?~R<tuutܹ嫭T͞b_>|(VsssܿWbܸq"<<ѵkWZ"Bǎ,m_eڴij{n: Q5W+ :gΜy[bb"rssQn]L6 O<)!111hРoFSZ ݺu[ՑOA&)) ᰱ)v|8rrrġ MMMEEExYe qi(5555J-[`̘1e~&O LO># `bbU=zo](($ꊏTѣGcΜ9*0XSF "<<uzɓ'qu+WUV[[[ܹs=R +wJs% <R?> 1`yŰZSSS!_믿ƙ3gc`֭Xpa?=zܹsbYZZZ_~)s}}}YA@bb":;w/ 9]M6ERR_je إ*uX3?3֯_4OZZ>|WQQĚ9MMMXN۷o ֯_={_O>D\ك1cnnntL;>u~GL>5j(5P|"!j׮g⧟~¢E/͜b3fMi_H,7U+\gy1LLLe˖A&9cU7nɓ044+JQ^=dee)GGGܸqGƺu렣e˖[W~~>zs΁ J₫W*͗&M ,, ݻ7,YwwwmѣGHII-VX|DFFKܷegg /~H}7n6mڄ8\ff&1P>} 333H*9ƪ"1ajj KKKsJ~-m۶ K&MVFA"%&&W'k~~>իEb#tQl?l03={T rN[jMMML>6mBtt4444J<5j`CSèQo>UuUСC7oypc֗Cgggܾ}؉$??iiihѢ OO mwHKKm;t`q>Es8<~b^|cMMM"99ر8P %mڴ70lذCЋ0((֭+=ai~B}}}8 tQpc:;;;H$MR""d2q֭[#--ݘ%INNFvĻߧgϞ댈`aak׮)9M-[Dzz:ݡCТE ̌)N:͛aÆXx1-cccck׮Ba2"?1}tAGG~81 ɓ'|۷oQ֧ODGG lݺXSc111Q sJ5w3fUL۶mlmm>s|/^X]]3g,'"֭[pvvΝ;.Cscwwb}-vYFiwww\xH 芀ry[9995EDDAŶijjL&R޽;A+W탋 ӤIDDD`ll ==X+^ss*}ec//V:y2ݺu OPfMddd@pqqO­Z®]'"2 fuh8ԨQ6ׯDT۷oظX֬Yؼy3lRl;/X>|8^#Խs1Ӷm[C"w2 VG:u)>c₯ xtuuѫW/,Z`999 |qm4jԨXlڴ)?~OB]]&&&B+M.9>FD t޽B {Wnܸ!މ;thҤI =<<0}tr1޽Dll,ϟhhhϟGff[RR8o1uThkkL׮]qq 9FFF2dt333dggC&!==[JWcZuuup5L+uT+6oތX̘1}Fp8@OOsŋ1rHdӧ9R@b@g(99ÇT*EJJ ?LǎK s Æ ;\]]K :Bbb"ڶmEWcAWSC۶m.J?&j©S`iiYĮx`/_?S[lĄEJJJ9///;gϞܹsB:uh̪XNKK ;v쀱qoaa,\#F2uuuPE\}zOOOhiiUazxﳊ̫/YⴊIDĉѼys<|---L:Ui߾ Yrn( ]]W*믐d>|8K)}1R^Ia2ą puNSE زe 9Jĉ(,,,^rsnEQXX͛{O1|XYYA[[[i}#"&00>|8:@EDDD˗/A__cQLd >#F 6qckVcXn8f+7DftJe(((ݵkV^-sXⵃ$aeV~}m͚5ؿ?ZhcǎUx?޽[l|bmjҤ ԩ^zqccr ,, ֭ZZZݻ7f̘5u\ǎqE̟?2e tuu1k,L8 `1bj׮-_×_~aU 366ٿAήaO>E_9̽ܗWşSa d:u*n߾L4lGFll,?S ?/E޽ ?VVV@bb"qF,Y3fe˰sNDGGGqppKhݺ5|}}qy@˖-q 3//ժUWh9FzעzOVqccdL8M4 ̙#,-[K.!11 # oD["..%H HЬY3qZf0axm}޽{ D">H.0 k׮ab5/"BZZ%x>\̙35ӧ1`vL 6G?3~Gtر؝={Dddda+//ƯO9StJDhժyf$STT|. ##\26233۷ ~mnݺ`ֲeKhiiڵ+.]JBŋ駟JqW^,7lI7 sqc1qGh޼9~Wdgg߿MrAcR mr9/_nݺ탩)vjժaJ_xί A0l0qtU;l^^^8yRm܋:vrיX(qc+WƍQTT=z4LMM|r?R\PÇxWAɓ' S(,,Ķm۰w^gϞ{쁇={&N|2h_ާ'N_Ŏ;TKK ʮ9 G&M 81> " ۷/<<} =NtHR@uU 8P).WZ///q[n ^tTSCVVV);J98I5 7oDdd$;l۶ 5ŸիsA>DVСCIDATYX"""%K`ɒ%t믿\,(+둖offfYʼ+|TSCF9؇t:::?nݺaz*ޓX888`9s&}!\z²e酅8r:tP 5kرcakk WWWЪ]j(WccƂ~ 8'NP:qw#888@OOs;? >sq3gΠs.sӦMCBB*tر0$&&BOOČcr$nQQQ{7gt還A-WƤIPPP3g`U駟"==Ϟ=+'OFe_81;"BѨQ#hhhҀ\CCC|䄄wgggqƍcѢE[.֮]/kb:V<w2sG Ο?޽{JaNQ+]rkMDk׮ `ǏGtt\@@ڴiÅ81*x#88:]+؞fPV-]v ~iRvm899)McqEl۶ W;v+.$a1V9|4aÆޗ dԔ}[rsssss~WsPF \zCEPPvΆD"0|A.MwMFy'wڞ|kBBBаaC񱺺+,bHvqhhhy8vddd $$D1{ߧ{GA~~>"##I sD4%%%!$$D .MEOBzz:lc`CRY")) nnn8w\8x j5 方I,>s7555Xp!onNLL Ah0eSNcƌa '1>|8@qUc8}#""|ɀhbĈ CWW}Ǐ?-Z>+Wbҥw=WWWg{m3owł P(۷[luuuOz;IH^^^, 1h4?`Μ9i999}8q ±c,_ ___ddd9r+V~[իR' pֳ[~F!F<An~DQٳgcϞ=裏@S]]|I/nQ:s BCC,9-\b4'",/oW_}ƍ_@EEp1?]"]v~`̘1hnnzGŲe,'&&b۶m풒#99/2T*}` '1]p) )-[ .\@JJ q9b͚55jt:]A?X\#&˭ZΜ9#)S_N\.ǓO>riymm-bcc2i$s zG?---رc81pqqJBII v؁lܸfO^E}}tVņ /thh(4 ݋N\t AAA h(q` cǎ؈J>|3fȑ#1zh_lhjj!=(,,3<h4Rsrr굷k}7 L&;T*F#9:u*rssbCa̙mJ '? V^P477ٳHLL\.^ᅬ",YÇKm޼AAAj:T*QUU("11ppp)S747"R;Ztuڴir 駟"::3gΔN7N6oތDn}ۿtN\w̙3&$$Hi4IǣoqߺuPWWEVXa1^֭[sY\"޹H׿ÇKsQgHOO!;;y1P7bΜ9>fPz^xJad2ŋ8q"-s.]sۢ(d2AVKz裏0o<ӥyg}@@@rϞ=uE yN#F~ߣFgϞ3ƍgyzA#@:c`ȑ8~8&L`^E0GDC3 T*U븸`ԩطo:x0p5tww nnnEJ>>>5 ݻw#** .:T$yꩧ.;118u̙:eU8ruuvrr֬YM6YuT/Bɓ'#77~!VX1?RFD sDt[o6ynڵn3l}wRM[D3N}:oߎW^yAD)GGGݻ{h1|\.ܺu oooܺu &IﱡznnnC@a|[[[Q[[uhIII8zJJJ0{~#00fЛ4iVZF %ǏUnÆ 0Ll*L&:89883f t:PTTHI:tHNN!~38qum6\R sV0F#-kllcOOǓBBŋR XlRSShw\~=r9<==ӟ/~HۋC\\w rtJ"hD~~h`0pe8;;3рkGs՞z. -s sDdE.#%%сfk..ܹyO""zx$"Z-6nb1^^^8pAD0GD p(""9"7rOFNN "b#"{={DD sDd1~xܺu "b#"{bN.&&Z1=9uΉ'xQZh D'A "2GD /c!, ӬD/YYY(AD4e>,z=AD0GDxs:1=1V}ӬDD sDdoDQD{{;֬Yb1GY ""9"GX""9"WNNNx뭷X""9"GطoL&AD0GDDEcܹ0,$oa(O9cÇY "A% !Q]] Rɢ=Bl#{RaQFFY"GY讉w(ADe9͘17o%rttd=0a:::bcy_TOB<ڊ< {'''1ŠRZZ>bM<CHH0GDZyy9^~e9rc ,rrr°a}0GDAWWT*   B`"gضmX z '"F#Z[[ NCʖ9"(**BVVAm޼\.ǪUX9"ݍ8;v r!zΝ?.^/bذav\]]Rj!"!qU>>>9MBDLE888 ==]k篠(,Y111? RT;v AAAĂ tRףyyy,( EׯˋE!z?TEErrr2 999͘7orӦM'V^1;Dt߮\±U~~>bcc&"y{{K#][lٳQQQ g2GD駟ƦMT+tekxz z>!!! sD4EDD ..mmm6l Baaa丳"z_U:#ެD4 d!0Ld6ٺBg-рx饗P[[B=pe35[Aξ~b^IENDB`stimfit-0.17.1/doc/sphinx/manual/images/latency.png000077500000000000000000000154011517235503400222350ustar00rootroot00000000000000PNG  IHDRG9|sRGBbKGD pHYs  tIME 63XIDATxy|Tǿ e JZmK-X j[ EX[낊 F*UEAY Zd !$$3s?df2krs3ٞs~yssħC… PJ(zy]6+f +EO6+cCv: W\CRyq Mgi\h&CI~vnF١2&ܶ8;p9BMM5vK?b;o/MN23\)pLPGgWRqAz¾8XR%o.^xq ]7_BBh(Bs91_&rʾy  \7{BBizw:#RgbI)#:;F2k.hMB(ZL ۰þR^G47}=z4#K mzّELJxsk&H) Kװ0-i_ChIi{t3TJ!-3i2Pzy͋&yd]d5ܘdiGgx􉧱, ˲0 χR ׋a<]}HYF 7f2쨿I["&ș/tćP_Mǧ% Wn8!HiECO^wVadHH D%]$Nfsq54)6 #-saʕaӿ]r5 8 vr0iİW 65hS>=29tdJ 6ʑ #21$R@OGhM]i8pOv0ĵg ,D%Ԩ1O;2pŽ:e2.XH~uWVIIawNvྼϤ?ZcR501-aI _>]F NԒ%p ] pdw7<~'ӇjB%8aGٳ0{3>(O_n^0M)@qq1QEEE;4rp[|uLekHl^'緤g LSrěZcRI%- Ëm%-u|oo)A=9GGn˲jTnHRfiD{v$='֢s:WfM++ !,_.A@}'T;l28'<5pG| wN!􉃜.(RcH*Skq4D&[) `5?3'e^ ?ORm`[(**Jz)9e򔩬XA©2BgѣG}7>dIRxtXR 5H@[3c*jהdeʽpR[+ *p.pnd@  *6~x/yg$k>A`&r #iqI>Q~NB1|XT2h(}.}FoϨ!8!y<U&414j|âА)j1Miu){#XRyl^[:9LdPTT~ମ\Ԩdl~X?o.ͥBGR3Eו{4+aZ)KW5)Z{R\G 8Papkǥ3sV~Ƿ.C2uB&dsNAvwOv~ǷSJ}=D]Eشp2z [źy74*TV'YUUѣGYsa7U~ɬ6u#ZǢBC2bPAyDžisީm5$Ѷ"ʾڇװYTTK63[OhcX Udd_< ls9L}n(Yldˣ:ޕœ{z럹.0|&=IjAZV N2wgc/7cmU'<؍eGN: i֚Q/d/A@kl8Jkôpk) Xޯ!Xx I >҃^WnŨѷ_MO<>j0S|F ~mdU ~~~70.gf݊v<'OM y׻wo:Ӿ'H08rHsU{fa7ڱ=@EƔx}V>k !BH?~׵u"̄ǯ>Q8`ì{7xt#t1vdC֢,\Љ:[7M_Sg;Ctb׾J@3$:gG䱓=W[啨v,= AK`ICqp5)ޚ:v=sda#>g''M/ E/ ˔L +FGj/Vr}I: ݞsS‡ 䱷Y1.Aaؔ^N^> ##98#!c<\1]'1P*i 7+&{ h׮=[4 )([6Ӯ}{A-.o>,Rb68ᓉ^ԄFNn.= {bWJCsEwW;+]&1S|䴉[P">:O([ HH))?X,7D+@g4MyR_{B *!J9wS$n+hA"%b޾9eV=&D}E}0M`R#"W)'ug!B!,K/T R+\Y?5o .Dc]#CG(W,CM@*J$%R*,f !+G b*ؕ4 !k:fu MM&J"8%,+pcp…SdP;^C54]GutMGz4<" */TP3,ii? b&2@ R .\ppMt ǃx<:*--8̅(]}!c1< @ ~t\hFظ㰹_JSأ2'#EF KZvGJf- :hR \!A`SѲ0Ut7ԸpX0- ) 6Aw"Jwg >}zҲYKdPG c\05 t)#v;!<=*2۝,/vUs)Moǘwd̃,33f}(Z9J`B/ֱ>J˔H.@p?tLux` 4M,.I!lտۅk ufӦ_Y_E_rϩ37Y6Ttp  3DHZEēGW1QOv9D[R'(0ԵEVz6}+yheyHA.aqMr' jMGXzr 2'hz[~E/g(Bc }bZg;kZ.[^x~^j͂~Gܑ䴹]6+lƚaߙYQ&g$9]o溧s8B,ntEN8MxUb͈^UoHr]7SZϿm⊮&E%(W_s53G_O6#MMl5eX.73s :69#8h6~\I?F[< b_.㼾YUc}b-#O-wu;"'woo6LSL/ W9{`+tF;pwmaWM0O(g*RT^Cmx[ TY=-3&ܽ bfw3sȟ1{^a{W3hGlR(|lýird`O9NJto f_d\g|N9m߹!+IW$7w쿁[nY}%eWX_`cW.d7ϱ28lQXu3?/,cC=2*.ZVTո}U%/nsd6#Ҷqo6L^w[ҽΏhSRA4$ZdMm96?YK],z'IKFrY7̹cSe&D']3)ݷ=}ɯ]`K8;Gw†P{vW-˰,t͸@TxA\ڦ 4I7Όu smUCףL=[tg#8[h׎ϼU(Tqvx&eeymosGy_ZD T|-0uptNO>0>Jzѕٜ]_+h(CK/Ky⥥ښ>mg rBe Ylً{z)'\ȸA9iUYΎoCѶHrrFҮ:FN^+sשBwr%0zI\E]܂Rcm2[бN@ZFˇIeշaӃoYE+f׭{m {eۆTҫSlTe2nġђWҽn݁N;['o~ ʱ6zK:l,ᆵ)iٞ_4MRbxZT;N3GG(޳u;3B<ڹ;3׼DIiEzÇgsQhBp(DzҲ.D$)W?Z_f:wEl9+zq&;oWzY糁}eg2TI'ܴ$0aL1fud|w(7nk?f@NJ isu>ѭjزUo^mioRsR 2;0VVTw O"K(G6rMx@YEkԴyʠt<p\qa-3d~+ak A:Θgbǀ_.cY85;K+ѽw@g02:⌁j\?1'~-a>rzuYN&vؿrbn?Ruے2IJ);?`gzP]]exX"C͋زKa=7 -Qc4tƘ'L0 qQ烬.A4 91Iz4aK"8frLC Ms E>KQ4=j)x<Րq]o!2M ?« M4%tݎAɅ NAN~{lb N1oBh !TT1%BE'zGp؄P׀izr2tRY2 WB HK7uZD   mBCh?c|/zWBJ?HM".cka(ܐi.\8A ]$R0l.@)B P9Wad5\pd !N4 I>4aWi~Aqa;pI| n8ݮL l2DCO 7 m:PBL z MQG#x߹p&Cq,CCL7]pD9~IENDB`stimfit-0.17.1/doc/sphinx/manual/images/latency_menu.png000066400000000000000000000774071517235503400232740ustar00rootroot00000000000000PNG  IHDR|osBITO IDATx^]@GbX ^chbI4-^cטb EK .{u~~s7͛;}uL +a0BP v  t8`0 :5`C!`P k!in<}NسWd6nyUQq,0v]#7Aj]]llTj\A8Ȩ7z7-нz̷"阯ﲢNݩY4+3 Cժ gA'݃/?w/6zo6.y:-_)fփ@"R5ǷndOL9Yhܸu-PPkr3o׮Un S/]R^w٣ tVg|#C]k=&R1!1C*}L*ʥJU(ٸ# :߭Pr߽}ӗA_*Tl"bh=f`:ß\봉I%+>{1$|eˆ)fQNqj*sfkcm:cR ):X g:GY[[Y[?`N=J8M3Lȕ4#YZ[Gp`a+ :<*:z j:b(9-23J%ii6tTb65*u%@qr]Hb啙uD7!*k<DŽw1{9aq濫ckmb:%P/u0"Af:{&F C,NI}ǎ..͚5GFFQVf9qXEf:b:{-aTݽR 9˗o[I]v5jdVkDQ{]15 <{gaC Y檕+170x~'6m %7lءC~b񼋍/rS<&+Wu۶?~ܠA}&z)Q 1<|#˖)C)ȓ'!!޽nnnE!J9|/w@1VΈ׮]3{Ǡ2|H[[\L}тd7eK`Q.&*@6 Ql\\l;u`< M4lueTT9WcF*S -A X2Oި 9tR[[Yc4Z(efA/bqfϙ6u R7oby37oF+W8~L޻׹KsgO5f:#ʈGg's"O훷)7n\J˗/Ϟ=+ &~+Tӿm׮s|szi;.\iSNj*甏|ɖM!5A,XH`СðT#5Z )~mL"uq̸5n@XE ǜ S {*[VXт1'8t /ۿb2*zWLQ&\{1 & ht do-hx;*IJR%K`j!7)b @czic̝Ӣy~v܅ֲEŋڨ63_+ز(4p@mRqɇ pΕ3'ըQ聵RXq(AG.~/o޼ ==kB|<>Μ96- u6pV^-%UϽ6$%W\11(,PU+֮[Lu+{/}︒K9VPճǗ:uy.Έ>TUw>)'dLL4WhnHNp`"p¸""b/֤I)S]3wkg%?7lpi6ϙ3'%EÆ =z,;wnFdI)l/\VƼF P؜ɉ ?a~]Q|N|!XʃbQ_(AG &^*tq䨱G" g\@MG 0]<Qˈ w]X7j2bjrptsIE?}iE uǶM;+۰n--flg <{ ^)Q~ۃ.Ud"q!zg"6a?A~7u矽'N{7 z4M襋W /wҕh0a1c֭[~1?t2`'wOl0IoTĿ۰~#K*gζj:\_s9C>bogζ*qX-+]Յ?Gu*XTɓ:3H}Hog^Mk>NVh3}ʯ^J`rAم >¸8uXtJJJ擧P}ɓg!a(TdC2_8/I6 gT[D//4?*_/*= =kf =9%x>wn߾NP%4F)&)'6ͭ[AgtM*VPQkE CG'&a[ܽ۩S'D=Q9S}Ýs ĞkWuzݺu]4ǏEIBwH 8^L;IUAyҥvz7T5Q^IQW7l*AU'OTRI$E0[v>zV*+=}< }O7iDʃb8!̿xZ%n2X'GTS:uIyΜ9If>]"Em 8}q+mZ߼y,0Ƽ&o`گ>N}V!J2oبISTvףNFe\,p*Ǒ&8$ |%cX*_ 긩'woS 4рq"J݊pLbڅ[~[qƌf8?s|7e A`*hΒfM-9,~~z+AAOe#ਐ }j6,3 T' '؁?pB gϮʶE>Qd졶ŗTeEF6-#ڥگC{*Vفk6;r;hrr<) ׇ ꛘ(%`}ቐɓjN<#kV:mp&yV*":[ϯ e^#n2`N8RdT{Z6P˙N `Rd 񣣓#(ąCchY{ ,UG$w?1!yGH f![R_MdAG1TY@0ׯ^>xDvC%J%4$a/oT'/^"/Sb/ʖ%ʍX<. :Fi5yW/C=,W"()|uH:i:8/8kїS~'t4{q&f+.BOF}ɌZӬ˂iVa?@)P0Fhdy埨KZm>ċiVAZ^Zj%KfAG*s8RАPҒJo.tVh>RC"]YSj3Y1⧗5YSeϞ#%9Y9 p م̿蔜$!`,:0@;j*Aw_ ֻw/%f-Zg*-@ԋ~".] N r-?}u\ (>^FDʛo/&iFY~6 Qe\ƒ! %&&q| H+ >6paWP^d(Qw7whhH%䐠rtrʞMd' &JqHa[D-2AH>,>#W.^ȯJC|ܕK*UVoMl+[K(RS(,,Han3?ӱl6VCY"ӧo~nݻWZO{vB 1xad^~vAiʕ|mowXݿEmڴnU+(IDժ?z^ ۂ7䘜JQN|䉕+V|܀,I:+l^Aƙt=_pT sw6nZ BM( JRJ*·J*CBB@ze&ʩT.MCM.A1\]ɟ>} aÆ ^zܰ z"->d0ǿI? W#GUQ}%80mAècO?BϷ~7fؓ'|I*r.mڼ328+65-&U9g'8y1#(P(( 6u| ^W/vcǎ޿?|kW^khsuV} :tƌ%KĤxٛ6mU-Џo)g耋9۷"~D֭رcҥ1=r%6]Xpti}ݱ֪e]ѢEQCO;*T  9*M 3 P܌Af^9 Ixb$3Ѝr8BA?.]ԢE cͥ0f|@wA+#%ňrEOB W<իcpl:޹{G<1<4>G!Ђ2+䁃Qr^j[%K@ .R ԯWly Ɠs>ݏh Ti}=9ٳȖZfgF?W@q-Vmv׮YwӑNzk`ɓ\JUT\:mRϼhJGc==jժ-)b°"#&Vk%a ;9vWr){:"O0ܸwQ~y*$w?/^wYr7Uy|M3%m+WӘ1a:N)I)T?#אEx ?K*"pxlJyS'yh G=q6S}6{MyvXϝ;WS+ƾ!-`:MŋiT, H], ;2mi9&+ѼUyzMw lnC$UG' IDAT0"Wxq-"=<<'$"1ҡR^/$ :#Xn#o^ }vo߼VF?膭:1TuԑHggɸ%JcTMq,\ol㾏S>ggv?8)KDR "1nR߽TݽC/k;yacsd4pQwˀI: W/_n%7p,pm{%ŊvNcg?R^a!xvF➘JKUDPÌ;^ E.Vd!?זMa ь B6i5B>0A_2i VgAbTRR i󖊂K}1¼@|)SFM4p~MqLfz3ufd˞1M@F,|u1| &C!Udf1`f$(K% :aбh1{\0 :fNeW"FY7 x4u*,t>|)^zMKZ h޼&N; GUfi@q[YJxJ Lxzfͼ!@r~Ygٳf"?;Z)MCOOש 3˸ Pwn(Un:̴ƒQz1xM̻֫UXG;k.ӦNOׯ!_J ,4N!CƎ7x`(4۱cL4 >B<8P.nH,/1gy_<I0fooޔ5omܤɠD#,ܷx9܏iȄ z tTcƎ!@GE~7n<4) Ӎ5xyĈ1AmH,/sf$EάR%Ѽ PޯXҪ*A>苘ق^\TV PHGEZw2f֨^fM* f\,U=]r\zԩGjJU//:̴2ӞP3́ς}_bV֭cCT*+%tT*NRUZ°N"6ڐq9d@̗0ޫch:,<+B޲eˊ! uKX\ !TI 1,-[v>vvUc\D1gN-s{x? Y?fʌW*CY"x441"ςvY`-x^)NJ/ɂvYl-K⊲XҀt,U/ @#Cl`Al\ eX,XY/f :f*f(C2`A2z0X1W1C={N:EPCȯ'LWA/{dGśT 矽M(GO+o ҳWC1V[J t|||?N믿_6a߾T87;Y %2i-܉v(` hcQchtD2 UL{{ch/ ::&LRb)E^ׯ_#'NUx,5ҥJ )HUZٲqR4\rr)KG P{J2f Wϫ_s,*Qd+TLx <+TR'?1F`* Gp8 sN`3+!>bqU.G9$vI4AC O#K=rA~}9[OݩLRTVYa]*UjJ* pS| ۴q#Gn޼[Gə3's%J8;ڹ6DJJTKl*V>}?IUSbСW\EUnwu>Q ,Z)vS8m d+Vpr]|y4Xb@p^0G)p=L /]wͩS;V KuӉl~ʔ)t~CNu9ov- 4ACJ lO#s vJrŋ3I!ocvO?ʷ~'|ɓ~_ ֻw/۷9s-Z_bEBbgC@8]Q3@-!iCMGSB"aTl g5cܣ q6¤"8q'< n_T۴DA  -U3gp9s*g3 z w\/%2';?B׮ݐDRtkG8{$0wjpЧuXbb&)!߿_ENj(ճ'"7?!C;=/~R a ĀcǎȾHee1ےO &> 9|NNXΟ+L6 %ݻw%.w\/2$}-`JN6o L̙n\R`0>qb3_i"_WܖJL1舙Idqtr$Gh[Qg˞->!M6XUa; UB%2m葩%>DϓO>ļ]DgȂ*nUJ![K%Y`oKJ@(b\խ Saڵ똟; փ\B b/!Cvǎtcq)7bwO * Kp=G3:&{Tj*-P[)h]T(eplH]UD26#l}s>g0aͭ5k)3z)P8;-[_O\]vE6J9:+֘bȜ&|_໸.ߧ2hx1Wp543q)Ըsvj}@{.C;T g2MTKJ'/`b+Xzu`%[1o~X۾c8q1h5仸ktX!WjLCX,!AǗ_2(2T1Lvtc)g:0Kԯ_Ih, X\uTZKÊo^K%7*\HOeV?p+._H4߻wQ&?5ⶐ.2tRKv*Wb^cM"X'$˱acZ[;.kSlG;69sߓbijbϞQiimڊ_)62b }Cb} @gRF>UBw/}ٖl VMٟ9c{5Xx9P%.JL>'Zf/439v;oX`cy&d}ij0U剉IR siEobcQVmӱw9gJ:z9.pL8bikˋsJW#Xc;٩ WB$mRT<}*8m OGqڌBn6tu&O޼( Z+_|9˵LAeY(n dMLiΝj0F!q9']#vGK`3?C :/޾]z ߓo6S/[Tv[6Ey|92}PJ}b-/&֯ON.JP+L̳rDdJaqc{ $_bk[%,"{UKe/L.qQFHwvM_*k:.JL)Tbkdk}HZԨ1)R(!"NnIIU̇ѣs.YYFRFOFJsZ?V (PS #f=(k.%mQ+J"Ԩm ɮ 'Fj~Ic R7sO) :Fg(ixƱcxY , :Y #1g-24 IOHJLJMU>Gg˞(,=:uKNL* : o߼s'(8˗l^L*Us-x3{v oVfgo Cš0tEAϏ?Zc.nŊCqD3ٶ]EH9{Wsf&M:xh…x0A' fe 9ܨ`&ͱc=j<$._Vѣ:"y;wJHؾg[-m!mqnd=Ǐ(̕ODOrSP;e_\vAG3 ޽Z@Sb1-_boJBTXhѢ8ݗ.]ܹ':w^hq޽[lPnݿof?%c'2򙭝ܮPn5bb^"ߓ`jEXBXT=RU̺\z9e֎5F IvrrjGROOO~CzO?~R-$2zdjY!/azdu;7qsL<*TX~탊}zW񷜵z+W.l0KLh (d' FHO)SSRq^fdD왱chB WhBTw̽=h,M(JFG8{L IcyTvĄQ~ *V\mB-N<oT^fU6-[kGtLwis$:qeIIԡݗ11ǎvpplīXqճagN}vKm )WӬ'<<`hHS=Jl3 ޽sQ>8Dzg2״6nQ+Gdܠ3Cyꕣ>} aQEvOaYoaX5#`^%=8t˼h"g#Yx[<𜞍-nVzJrRɑ*v0d kEp|^jJoa0Y H6dY[ `AXȳvYtNz BvnX RR`.t 9Nܫm f#{0Xб00&' IDATLtLC>!9u!`cb1ާ0K>څNC.=e0F9)^K*(P#ua0giRR=:i4P]*ҮHu:p0IhW=bjװt4TKL2FF=[޻w@YN[b,b\g&t8ZHW a_Tbφ̝ nzy5xRz9_XDUlY$9Ì*H?l ZY+8Z4!cdxx>k{djRŊH3} >xzjpԠDϟ/Qdhhˮ;˗}+S%Kt(d' ˻Q@:a$u+U*WƜhq]vx/_6fXB,#O m6id2,e2/ &4ǎ{]\\9sʕ+~՟~ .[BB۷kժ%C 3gM2~Teͽ$g I$_n٢qcYhl]'O`fҥ<u>}M6XUJȋڱcs^g+܄N#]TNPE|V !fnryM?ws.vN?îI cTLhOGW~+VQF?LʱYD`VGNeBk+y%W: ]1F 0ZvM +խW2eOODxg`(n׾Va:ݬR_fD2٪m{ LOnʩ1NNNyI)7_n*.ӳ_Qu5g׮zy7k\yw#Fԩ Řc$9ts i^˼e !$gB)c4 h:󗦈eqycm$K0nSSĸ]c :3?pch :ZǪ1!vZ %pC!,h`h :ZǪ1!vZ @[[q =yRZb`ll m^2o.٢=m>=?amc࠻gO]-и2N/CKoD/g9ya%dQAF^d̻吉BG)Y%Ka]OjjPf(@@jD Uz@ IIJc/ [}PX#@%i#;`p_֟9&t4eTE"9=a;w+^ Ufog?bX-1l`N]wE]ATi$ԶL4+] ޽gOhHhJHWBbo~?n~ص >:F4֢_l9i-#lٰ{_~=YO [dQlõ :k,T~i8wT*vO8}||Ξ^͙=:xԬZ5Cy\/!qF-.s:DoDY)Q{`>2p5D셋4dp~n]I];|6kr>~XKIQU߇Ϟq Ϟ>%G{Wr5r}WHMU֭[jի]8)_>0Joڸ#7o|歃CޣGQ2t+W+T7n 419%%!>?TI/JK/)RƍSN7V䗢qlB3>c$"111[lOި׭bޣ>(g-ʝDISuɳ)aj λy ݽeB4JC5>:aۧm>0om۶͓'g*qƍsk֬}˩}Ι3}4qWGTXӗ.] T6AՆ;w8q˻wx+%bIu&=w@\ ¡-7^,9%9V)ZƄISF d~['OJ3pve9ݣN=L{v5jœB m骈$u%)iA!GG<}?aO/{upZuUX߉]߰qP-*Rwox2 v11/}|#O*B~KapuwwG/!! QO^={ʕ 7 :߳gV RE |Tuay BBB߿?fjʉxnDCHԯ_RDr ,uK*4 &!~L بI93c_nS~EθQ"f5k)_\_6m;.uNU䟞dDupt$q>G3[6e_Q]굛e+w-0imu$0(T|.Dyq4BK8S]] Uk"S]è=Y3ǎTPvi5M)=!ȑI<{O4!VֿZvK (0c {i8Bmf͢@p!,C?+nݒJL(#1ƪ?qDxB=ET'))Wz K0rVM_DcgŬxףZpŭOA"\A6o!&> Xań?S|1H_ *YqDE!iG+|WK d>}sg4 >kd(XGtŋ6o:D5#ӄMQ7o_"*a*)ſ($"?ZJJn1&3FbxРA.'?{2">v\5|lߐF g%`ʀFOXhmr\lns̞x }bBrt1Mpm*_[W[rإ&܊@K]׵@!"{g~葰- qW/{r½-TG ^]1|왱cW%: ˗mX~YO]d*]GV^Ip#|EX"2ZG^G[nI&4!{v8{Ys듾޼ySv8ѝE3K$ƺLɕ 68e6E݊afѮcgˡy?߸sdYcqߌk>jFs-Údja2 7Cʙ HQQ3W.u+/Y9iȆu-Zlɪ5kѦ0s=3fs-X,]=Td'::s9~.@XΎ`-^8խ[W6̙3g֭[Q֭̈́ C;yfK )=ϞED̟QĠkV+"$!lڴӆz/]` F曉Zŋŋ;~R6XFܙ-['yTJQv`Tj\9B;obcq\~ը gO*\h٥ԋo>xjI5KH^5ammSh1ҊI] l&!lfBE[*3gR޽¢@Fr`1|L @Q//Q_6˕OWm ƞn*fB+b\L%=jͯ :_laq۾e&v,e9o$&dh=r紏x 7WW8K˨6SRv}DT'QKh5W3G ΛgffS :uI͒٨-fkZ%lI kq${r{ԢV!> gu>b: #`̛ͤ40 :5f3C`AnjLg#:ؼ[>-/s2y2ɈR_^nl?})H 7=c_ܸp܅ goܸ$o߽E.%*(G~ok+kp;x;$;rh_E {ꉤS$ ̝+Wٲ2P,M8 Y #{>~cC>˖8|Ҹ&F 5HZ|E!Elb%Hv/̘QrH("LrR^JlMH)_Ti9,NOG c}{^~ձs?_cb2&F}|0Fz߷l9{|zƿ$i}|֯[+_K|T^АQwމ 5]Ç#ԆGV@["z-[{RƌR޽[3~7u :SZ Mcת]ws0|/9Q%#?<"IpϘx+V2eA~nY~OV߃3c6+m,7L[8bccV,gɘِ-{v39X1+AJ$Ν[nuh6l`~k.~0u)C FM0 ҴK)KlmjqMh!c$._tyb2,cΝ-Zܫw-[TYd#Gs.Q͚ VVFtr$%wMjA$3~GϞ/ ^~zI!((:um$$omܸYQ5`vs⥐Pn9Zg۷kGh׶-h^0E{?R_q ~21ĭkZ3zL"e tcdK `#.Q/^z_Mor!ٹ^ݺ[:ub]r h~D*G7ω|A\ܤh9^U2W ']6ma_ja-qbKFG '_/Qdr :b)c.׃-<=`7׬Hҟ D" cy|3߱~t  E=,ѐ0DÞ4ruFEl?ѼJDkrTV/uqɏۮc}fd*dR p4&cjMj{x۾cA8z] UhbvOWs+nE\7np D8U؜9s4h@fX={ذqhkek^Qr)n`)uH\%`j%ԫ  b8. Wq9oeA;y!lիW쎄AәƍTHt7pf͚qŦUۏEvvߟChns-WJjZ7`ĉx,rWq&W____v@/.#%`%fzbçr5rT* v[ 9tjV]s읓 i ?qqqpq/{CUBߣ;w]C(9#Tr %My 5~:vyZI<{%KdTF\TJJB*d?eˤc/Nl~Ϟ=KJzedҹpq櫈&L#n.YIJK3{h=KfuL.R9ç^bq p" 8HJNjZGrn/3 `A LdX,X7Y_fLd0􆀡Sz#S`:k aeqMM[X8"{AA:>~´f ׯ^ɛ7S*Xe [b7\c&x<(~ERRŏ?I4kPlwoUZ I5D#`蠓ߵR">q*((QOPm'%*^5::(M*SJ$j/{6brI mT7 `>t?lUPͦȰdADa~f>@fUL:t>}wa`d!Eﳵu *fp~ի5Fs H -q=Ȁ 2IDAT^?8LnAfٳf:T\I]v#ASRO2X_CWv+V\tH޻wQ&@=B ZXjJ~n'_ֺ 4FDĝ͛lٲ?QF[7euΟ;?L: ]  1cǁ@1cB9nw?o&?v o걣G֭];kq0r>"b%b2j+>}Y///،6d۷?yWq٩SG_zXٟwӦ8RDLl6eVd4mR ./IjHa#gJY7m\DRիw͚50![&C|֫Eӧ ֯{nݿիNNGy B/^-X&)ASyymF9ʂQ`F{-:u!niVzJrR:r㬿?n;s^byV:]t(Mc-Q0i7͂>ѵ ݙn(^ tt%S0#𠃱,81(Q#t]n@|#&MeJINIMӀR^#vJkFV;;;{Ajkgg1`UL"bu֨,"3opq3+ : `v11St1UөALC!`cec,蘜KA F/C`A\ bXRJce` 'X1AW1 :]7q2ٳc\YtYEZgd9Xr.gft?k!`A'˹u!`\X1.u@C,raq`AǸYtYC8bdE!6 :Yq>3 XX1ڬ!CP@aE `AG2 t("C@?lfC :PXC!?XL3C!@A (!,[! V`t-`P`A +b0 :Öif0(C1Ca43XСŠ !e  ,P@aE `AG2 t("C@c 00D ^`AG2 tuDuk.ґ"U4b(Xc>g5ذ>%ѨQSc5&X(vXv-m={ங973̜EzO+t^"@E.""@W(+T9E"TTJ{E"` jZP T"E52XQWWW#( &5 .++U+6AIt|SڴS;J|UU  CAhPh7- JըLHLMIiA`_;oTkaaT ';A܄Ԛ237!TtcN#A:Q)E" ?!3"@%ѬP13"@%ѬP13"@%ѬP13"@%ѬP13"@%Ѭ)^^jV }s ](@@A0h"U*Փ\YLW _۴iRK ڔ@A0thK!lO23//oZic\=q)vDKA@#R(ATҫO߀EҬw"eukxyy6i=  p0hdIYH6T ;::UWjԤ"@A HRHG3UUIp$gˇKSAN@0)PIrU&Q{Ppm؞=4*䈰HggV^5/ǿkrt ޻wk߾}VD@vvv.]DfzMJM"$͛%/CNAAO'Yr@^I53sLh ?'OibJWV;Chuj˖-[hW_}%FF];&:y1l8'oW٥ZsM¢Bs 3*)-aTP*7oݻ7ɮ-Dz@z,t bcc7m0Atr]|qZeeeo׮P7nŋFLf;w 21t|o/`+ym8=nLekʩo ;o޼u֡ <8h\p>+W,X{_:SѣG[nn"g@ӦM;w\```zz :P$><((1{Ϟ=4tk<t]vm-zVCnJ\适^RRe$-- C`r+Vܸqcn֬YÏW^`!nɓ't0w!ڟ:u*?DĎ1 =HS,a:fv%1iNq֜=]op>xu="/R_4MG8uFնVl Lʎ;&NITsNmI0KP_\Ō /<9rdaaS-[ $ PS޽npm__5kXXn:-P hHLRI^+r@.dm.о=YxKQQo?91mh\uFfYJ[.5R[zcUǎȼ=1 eJǏG|䩵In݊[={O.`yd(z ܰaCLL t $Asg8qX[AtTjuBEF=G}PlY..-)Ŋ'`hWCxx8Xʼn= \۽{76"a^񫮐eV2<<8fWpZ(M.Î;.] ?bp٘IԿSN8@S * ,=6>uVOoNowΌ 8ֲw,̬};<7gџ [}6t7Ё 'Lsn ;e䈈YY\u*lؠ `a 6ی54m''ƍ?}1!5$J\\4V8#\5ax:[W9?sEF;Z&Ǧ?fnrre#KK+d᳼~O:t؞=pbǍ?!&fbO '"1H:XHbo,!?seԨ?oo/LbXQ#Boھ};¨~liFhi*Ti^zAP(̪-J+o)Otnx=fJrk{zjBB8t{ѣIQQrEn>|djOXx]b>4e! VYku t`LWEvFF:,.V z WMm2A@DgԱJݡmnxlyI%]5,Ǖَ#=WyOG͛7~;&PF4pȑC5 VxaJ j^6rK#W*K {}o߾]aa˖Ő[din>x4PPxijgϢ md=7\ӕ{ۚ9|2Ǥ"E/RՕX<S[l^<˃"12 -Ç#8t8`I˴k&%%N 2Wp^h]X (Qۿ%l& 퀀 mյ=PS%3Cwa/_yiR⫿->,vѱK3n(&Ͽz3xik9E\5ZZ^޶ZN}5 \TSe0ڏa!l,_N\l} :+5 3iՕojg H=0 K^@X) tm[nsrrܶm+;; S%U/]OG ) iƾcSIQc%t[lj@Wᔗ(|%\YġSbI1 l=͇#l=o6\3firJX ciXk!+;w,11 p2T PXP{^V]]ܦOS"Ȑ#qrsc-&?UFAIT'׺5Y@ }Hzڹ\fT`[M$-@h$ui)V8yxʼ=12ca?[]/A]"h }NG еDh&T)(I0Nޑ.h&~/AXQ, |}- b?:hei$ 8Np*B4cx/h'\55~H \wz* 5@?[_HFF#lֈ!?B2',N;,Ynh0B1 tcd;?##&a +tYYZ( n)F.Bnb'8P(٥ul$Ǚumr3-TfbBBp|<  AwW!+a~[qMƍnN8bƹoJz]W릲5٢ $ 5V$H$h 2|3K9/M:V?Viܸv/QOA=tď9# *IP$~E"@HC4h.E@"t$GQ(# 7"@%l4 GnaIENDB`stimfit-0.17.1/doc/sphinx/manual/images/latencytraces.png000077500000000000000000000646071517235503400234530ustar00rootroot00000000000000PNG  IHDR>zUsRGBbKGD pHYs  tIME  IDATxyMǟc_ZE +oJE"$ %[( ITBԗ5JvE %d7̘3Όνcc=},tseX!BQ$v.1S!B$4j#v|8dd?,X 8u+߉,%8B!Pc`8 *7prsgt$E!*7 g' \}?W +W !BL`$I@w`$V v%P3ly> W=aBx7Nm+FBveH Kq!BHB_Ԇ3:鐺y?Ɇ }{K_i ' ?]/B!< LLɨe9 Sa gMkwh|l w`(H vB!XKgO6- vdUL5o`?r2yd:铪8d \3);]j !B1P$9Uә;MNj!BtǛ$!B!" 5~{Ih$ʖ`a/&C-mIS:JHۋ (q2\ԹXxƎ"2c_ *U*}afUصr3b$ABۋφN] x&MQ.QgM Bl,XbӲMKU1($>vmi{OBBl (r+~e.3FDB$ }&5=8,Qϕvm+;^+ γJ!DH7&Զ^9&$ٝ yEm,WN2@v6[#;KTٳVB"oL/HM{ 6ȗ^'7~9ODjդ"ImjanfWv'ʗ^\9gdPJbLBD$ ,__jzVr^Zй3q WC0`l 7 ݻêUd#a2KGK୷gZvVe2)ߦ L}oХ z+lW֭[a`i=. .xqgo8|džw^yxg?v>?j+[74lwر+ gšrsľM39櫯:67>r*~N"bImkns-s3neKwBdd8]:+MJB:B$mO5jHMRcOذ7QbE[WDK"Id3\iwDVٵ vZtC|΍6#t@3L. ο% ǰ)3SjzTR]iwzzvd,mÆT]?ݛ7ƍ߻v9oÆd)) r4B$<- g;]E/V=? ӦaG?$_rm[Vyn=7VE>}C԰:*$؏𵄪ǻ9C8?ĉ;<41N͛j$y(BD0 “d+90wN %<o,mW1ΘpoZLݒeZ ضSUq/AΙ#5=JozG-?YM< v/[,$ʌkѽ@ "bI(8k# OR-O>sr/Cf(~4BD0 [7Q^UW=|x)>ШQ~., 4wށ?VP/, ?K!D[m^,HN$TQuvCJ%arj|J11>ysWٳ0=_ } Q0vOPe9 hn$"b\4*~㪕%Xj (+l΄b88~g%M؈(~( JB'-JB}>Yjzgy֕vh>N(;}ZC#3Hӡ4B$|cBmy#QuvBbb1bײ3~}XNu#9PtV| !Bwޑ6nsײLuڲo4I@V :B~4*֊o!DĒPv8E^t݋c/p ne}7~E@%b}"Iϗ+PI XP\r zJD?iu{N!B1.b0XϷx^Y3`J\Yŀ(*V (BƄ.]*5=ʃ͙3Aj iDkg_aGATIHpZBU'T>׭㬍-XNtnhQnQD'vU@$Բr2“yQbthw5-T4m* oK!DPve^vǒ%NB6N: ֭S ^QGVMBo7~s݅Blꌱt#}_cCKIS4BD0 m$}J}-;N8 m^cCKȵJb۪*p P(Gs+^=?d#ڹsC{4\'!DPze&3]iQy-0_~ U+:ժTlOQ'VBx$ $9\ +A ԪT͑QŶ/$`j0{(J~8??vVuڶMAYLzѽ&=8 !"3Cx4\i}Y@Xn]AYMQ知"IݻKM2{H> Xxb~R*Ƅ;vH!DHöjդGCW}I4n+3, Y~?: \t! ߘйsGk\i&ArrHR],e~'mi!P e(X: 00f+̦Mp} C*iUaCgȖBD$ ફGy -m᯵3skՂ!xiu>[!"ԫ'5=J Z贽4F5BDۆ3B& (7r7Ix>eSO!fi; !"*5=[>q {7 =o- !"|б(O ^9ժAf;OJ3o4BZbӲMK`|f@z?~Hp]¼ywÔ) Pw&h(RH!Dh(wq{Ɂc`ڴ8fYо=L@ O99*`jRӣLElP.`x8p1PC!x9iUzu !B_"])G9>n #1N; :ʂUvml-͚I-[J!D[XXƄ 3U N`?"0F%! _wJMЅ 0vffo36y;>xEi `j \)5=k ؠApU^8se9'/'I'JTMvzf&$'ǩ!7W**۷QGI!DG~(5`T q촗^A!bW勣GK!DPۆGO5nFQ#dDZ:u,aQŶU'T$cGiL5CU^;Z5x=ncѽKOBD0 [7QbDSV4hpߨdMBRSGc(cX~]}۶űӌSVݿuFvN"bImÜ9Rӣw%XGi圗0mZЧa|*8 aۓ3yT2֬B% U: i&+:_~) oSa!5=LbtjS#٨Qj9e|]jzL Cn㎃y -HFq/ LB! o1kΌbNSG   bZS$Զa\u~i IbxRYl)5=J[BF\ٹ)-XPt0%aD8O~##0ztBAcBš݋*~(bYp0gN8)+5 xƆz1vѧjUسG:!1.5=ʓv`\HLM`My_ UH!Ds6~ N?]-,gkm..4c\M_bv2hJ./v\ԭ 陯5>)FU|<"Pۆ7T mÎNUW_8ggÚ5N+5\MO* -6UmLqOFQ!DDP:h#xZ4k權S"tOԨQ]+8,Cφ!C`lO|֭֨T߾+BQ1YYNN a3I`\glgfJ5NtTIaRbN=~cqzEXc!DxmO6IͲJ< 2\py7gN{M*ew7|J֬Q*~8_oҨ; !BPƏbZB^t345wUl}W_ )U"dӄx*the,MLB$|l8Bjv<4pSk|yЉg7}kR8:ih.?ypO;·J!DPw;U ;P]ʕN" fRR5` ~^+N@:} ۞22fIٴIW}?3D7NvR={b&psΰs\uN>Y!"ڶgJDb u`@gCN=vB'Q\)#(F$p帾>}¨bE'H !DXIb + 9ƙɞ T۴ zg_ä,QHΝ_#\)'F͛dB$|cB{_ NX֙[IM|˖ۺ$SLWe(a? |>]:K!D1l{B9ӱg͂5z5|I~ [XT>YĴ=V.Evfǫ;^$ԶaΜ!xwy3 MMT]JozG Ý> čKBvӲc {2J]zɟ;0B]Pu֭BoLhnL<79sIw;WyՕv<Ԫ(K ؿuVzYgWƅ Qb"l5jeBu7.-ͩ/LժNV$))B&|cBww`Ly9@jq$q+0A'xرm'^\U~ mB!<ƸsO%,ص)_p8.8P+Jgx\ifF+;=P̙UbiӤ"$.y0u)'/ %VBO/*8Ab?7&-n = #uݯ&ߕͣl^W4j3=U~'UP!DĒPۆO>) 1Ʋ('CӦo",<#{,;|{L.* IYBD: ˂>}`Hh2ψq'wn2DzJ_ߙ r0$+ o2Ded$⧦pMQsm.XoLW_EF7p-/uݱV6o-^q-+*N+N@V\xul59hYe>HE*j]~Ѩc G*U`^!׊IBP˂OE鍊ضI@5z˕v_||\ jt{k˴E储[ !B_"6&?Oʁ5w5dI2ɮ[Cb͝J8y,Gڵa& (BƄ'M:5Uq*+0eq׉>)S+~]U~'dj Z7&GK^:|nM H rG`|/&Qr~{98"":hgDߊCjf|͚ΒɻwGnդUIH@n.̙:$&QG}8$e/'P]wk\iwkWx=g 7O^ 5 $wXvPڡm6t9~dgfgCf&>gvrq=<LRo ߘ}bғONR1X>WEMj{ O:͜ԩP^X5kzX%k/н;+wmsٖvJu !;?a;mPn.;v̙N7\ÆrX3?s!?ƍ?W$R˗;>m( ~sJiY΃|Lrn[&UDx?SkIxZB~8waÜBeּ8lR?uvӧL̡l_c֬qg׬ڵ `ժG7gQ'r*N8cMHpZm7$BmL)0d gp+Y:o{N;9*WVl(v WCOp}^!ߘĭ-]\e'c)=4Z%4lݥGLW=r|Vu蓒" LB!t jQ˕v{H(+ ΅J!DPv O҇>xkAT--JB!td ~W_]/ $$8+:i"bI]JM2/C-%K/Is@$'iF3W}]s ضRJ4 !"6,X 5= J'M❛nѽ:*T/Xj (+JwAٽ[!"|Щ(+^⩧AQ/gNc6%0.UV\DZ !$&jE=!DH^v^m:A0WwT!!ssU'T$Զ᫯bc|T\˲N2;wޑ❩SATIH5K&`A۶1,ˢiӦѯ_?ƏLNEx]iw~Yd*yiunU!Bjad~1vܹs)F_Eݺu,ƽ,WbŘȅ1˲;v,cǎ l5D  G!B1|S_lܸq\PR '1Aquo<ʣ{֬>Ye1f~/_x:)))qqshc=j*BDj R撘xV\+*VHFFF|.w7n,7L2dƼCϗ G }7252> +7o6sbof:vL熘=mY YޠbEqewR%Tq@tڵ+5^z\wuض@}>8Rmڴ!### ܲ,lf͚5ٓYf)=p;,>}pmѤIŠ1nFN peѭ[7T¾}x#UR%ի1իW30-^ --CNg@;3+\JJ 'O>P{(0r$<Be1ضmTV-ٳgwlξMnn)+l6{5'N,}1ԩSDCmrMnL-;;ۤgϞƘB!6ƌcl.3۶7cǎ-O۷ϼ0e9*Ud r21B*/CҲ,.RƏlQ m!--n={o,ٳgӣGFOKcmk.brsrMjիWIݻ|[!qMbb1NffLRdʕ+̬B_(1'x$&&ѣF8Ackn%-a\_yŕ%1Z51}hӲbPKhZ. r_o mF7k9 :eS}zu5;tRZЂܴ\a]7w-i|F6ҌfXXɝX|M+Zaaч>Ld"|К`\/iizhyn;Qb0hNsֱ9\bp/{yKB^%,,\,,^% Ky¢+]ƴk"` e,7pC0WȽd˂w,uyD',,Ӟy=q-iw|&6;ư̷|<&0!xL2y@,,:ґY?x)L==h4ĠkY/cv;p75O_Ayo ;Pk?i ~e@xyզiӬٱsؚa232 `J>ʔO.o*P63+-l{иBz⻅zO?5U3)oVdl0[n5;4[?[1i[c:sN c~L9C_D/\lI6i&kOVoڼe |LgI+b4DZޛ]ִ}"1E,ǟkB}&;'fEy"T9mcrd&P<yo]zѥl,1v.u]&|yͯ5;_; |IJN2G&i&W5LMNZIۚfٲde/g$yXPySPVT F!}l:cX1s 70x` ͛zmL4;Dcüy|dee x7o)))Fs=*UpgriѬY3N:餰 U={6 Yg󟐳 6m4WNn݊W\{9Yf _~en={>0x„ |Gٓ *еkڴivi<`˹l0kΝ˿rsM71hРb,:vo}P_[ٳg3rȰYk.TM6уn HWX#v1uT\9nݞSS/h" ̎/)֞{l/c|0b3 4uQJ*bŊq?'0UT1s믿޽{̛oy14裏 w9*mϐ!CL:u̖-[mذm$''~cL˖-M]d_=ܡ+3]&M.,bqj~ic1guV}"9dczر#8nUڗ =h\QRWF<̚5OogÆ _hٶm[ZEСC:t(+_~%K.姟~[n)TZjl1 {&g0`A>;yd&Ô x衇m1c0gWҥKIKK>K.믿fڵۗW^y%A oW^ys9H:?S`_UVYflْO>Dui ufX̙3Yp!met I !Dd֎OOʕh0aZ; /e˖m6h6nO#Cjzt{wq ]c$F LZϘ#;?;6nV4oB]hwe:]iwwkb˂NJKzjNhI>nnݔZ"I(GHMҀvm.9blT3nR%>OP8V*U$fimxmu !"6̝+5=J_YxbnX I{`Jw可B$MRӣ|׮{.曒fΝtҥP5\P^Q+!DDЄEjzxv&;Ӧc gg,J* MM,'J@$AQ֕v0yz&9!SBjgJgK !DPcয়G|Wڽl|[X{d*=\+b |4$$1H?!DP.Ljz'x•vLxI\T)ǔȶ]YZzBXK_lZiwx{ 2QObc}-@='M)~Wl26lH%7=A=QƝK|UK-mMLY&D hiU*XjRӣ<;g,X ;'3W`x-ojlݱUҒ+ LB}>hJjz{וv#;Sm eggSjulV2n4BjL8{1kG $%%1*JT{J!D7&TbxILrwa(3g%wP BD, mXDjzQr/$;%?z+3gΔ!!ʗW !DP9Gjzvo/;_tIdfjդR˄MB- :te"]i]3aBxsqǑ1!_b4CP$XJjz9q,})t/2 qJi 8.ûbY-Y\>@!B1ݻKM2鮴x'oB{${&ԩ# LBҤG6Wڝ"}9tɓ9S "ImRӣ+~.މb=eQF ~$ *h tIQΕv'&wq ]χ1\2226mZDC -ZN"I=zHM:#xgz3&%]xڵ?[1B?+ jBD4 HJ2]iw ]n1#FPB>7lp>~bmҥBD0 mea1­\sMh=3oQcwpfs/X *5=߸s5廸ݲ ]b8P?$תU7~.:ǛC(`AnRӣk{.y啲.5Ogٲe+q7BRIo1HMJՓƍwlc cƌB ۷/~p*8c0(J\w ޱcE;t5w~ڶQ$X^jzOԕvZ%}qfi@puO>ưH'$$@ݺΐ-!HWJM2x-cyJ 0nY|R6ǑEm6mBgLe'KMґxXV^r='?C5|c ƲE;UImQ0ĕv?| Z $s~7ߐW/3R@P%B% +WJM2鮴xgƌ(]1 RtBzQ$GxW} ]cam۬[yş^|Q(`jYд(J;u❁cBgʗ/wީ@BD0 5F}>seZ=?vliРƲID~TP!DP.|8W=g|$6l1,dyre BD0 E Q3ܕvw.;w;Ͻ{ƗO(}]\bӲM}\e1XXF Eŀ1իWqFڶmNɁr“ضMBBB/MbҼ KEGW[]1oYdggSR%x'@BD0 mXHjz˕vO&;#FĞM~:y1?BϒN~5s} ϲ>qQǕvn-;{Ǧ]&MX , n&OV0 Q.ڵkGBB˖-Qre^z"I27&DyÃdEyʻn EYYP>FCgÆ wBZyQxxz=0~x?dfffRB݄k׮/Bff&UT!1/_ ߘիmv_|!; Ʈmz+k׮~'UP!\O \x1:tꫯ&ejLNNCvv6٬]3gm۶v`$ײ0Hj>L·|m89 }r!pi/؞Y(,ƍpBf͚ݻy0SS&BUx+VU>/n-Y-^x!W>[GZLVD0V]GMⓥKygp~85W]EirSjaƏyiʷ ,jZYgprX~]+τAW72uT|>UV1m R Xp^xgTFad}G~twΪU}^lkQ eq}aYVL%eU"/ kv~T74:<-c톿 |"Bgc3fKxzb*~1\&0d8,x;Ψ~-ؿ-仟~gK8s з~7.pZCy.uKmܹ:<5\J{Lw훵mۼ{|7MV]mNha!## -{1cZ("sneoN$IpR3Lz;1G.õNxg;hc{͆\M<\:>Lj -Zapݛ@Ex5X߃>oSZBUՆ ْqQ]n#55ի[j7+VP~ & osc 9,l`A`M6cǎ[,"6e1zhZh?@vv6 6O?VZ:Jg-/{d.ofZ߲l.z#Y}ڰ'= ~5k޹EU ֚y Rqh jxMvD]Ô+I^3ͼdT{yC/h") 3pMgΙN̜{>s<9S&M/O,@Hx[Yey6 H0ff}Ym7YATU:SOsvVv|_yp)oЪU+<~$Fb9?p>=@Inޤ@sCPPRRRPPP?SN[*<4;:0x`# ӧO^[NN\^Ν;eeeǜ9sI0|pbݺuhݺ5ɓ>}:4e9`ڴifز.zmh+e o\Fƶ盘=0x5sb ^ KǠwSz{]dzkPCTz6~>6BhӨ:ȫ794oZֳ pa=Nx?N5^#Aqv_jEsM:( tϝ; `˖-3.CRRۇXdff"HqXc =ڣ yOD%ItR5XjL[uQC\vp k,\8xy̘1k֬ŋ-lgƌ㏍_x9rRu43f   4...cȑ֭?WMjj*M43n©SP^=5 w{0IH]B֭[ѯ_?@Q8c nnnx񢅝s=j!11O.7^]C_/_K.-[D`׮]_[ZZ5kÇ+WSׯNWnjNɽ{(((@+GfEWfOD'e]" ިQ#븎sA Vx^^^ʏG%IggϞ?|ѼC… U|+_zp<##?W>c* cbbcbbxjj͇<, ~)~+=zXKII}lo|֭٘e˨S)/iĉ;g{w]ӧS~_1Aue?X^6tLLL111ח\9zC'7o#G͂*Gb$ŽcCϣx֭8ּys~zp^ZZ0WQZ׮];vw桡UW_}wm,9xIxX6/x (!CL@(MHmƛ m^Ozaǎ 7D33gpY+Vu )))>{gp4jILLFA׮]@ii)6oތ;B3y… ؼy3"""W[IjzHGii).\m>tT:հAƗ/;d\nLTTJTݓ'+wMx54ES4~1JJJ޽{Vǡ:hWvqqqh׮KʫX/^$͛7|m۶2e v튨(ܺu nBaa!z//4z)L4 w܁VU.uA۶m:^$Iaaa,bK؁v󄖔uRMS!(@}WEE;ϩc__}Q"#fhft [߾}qe=:'400۷oGz*bӦMUJn5?#J>ڊ|ܸq[6rk1 L=lBѨRFb"^|b`y Ν;qat;vxD-F$qa0дiJPĔ)Slٲ*%1̚5P.t:x{{snݺatwcQΝ(P)?'E}8ٵ40OFq!t:$%%=ssmDVe_Eik׮cҥ F]aY1W!{:pgW[n JYwwNt4i` ooo\_j~533۶m 2h/lW|9qF_jq?8hak1l0!(E)ꠎ6($pq!ѲeKdffPVԓݻ76mIәV GdddBBBZ?߰aC"22⸧qqp1Rv>>8}t9c֭5N7SCDDq_}Z-J> ZSl7&t~F2siߒyHлwo\~F U9B+Iϛ7o߆w׫乸8WkU3J@ QPIIM1>Vk֐z_5>ȟ3 h4`aɒ%WQCT!CW7!\lch4puuҥKɱIFtJjw"?wοET=z !!K,r4FDD`ĉ} 31ʉjNN9C0ߙ;w.FzY iLkwsa2wRai/q@8Ǡ=wt!Il#..-Z@=ݻwӧ'sge:p9&M$Ф pS֭+VoHm:X@kqx{'=cW_~pW<3Gl%JNyo ?2 `V=c"~wd_cNJ I ;[&4Yƀq/_DY7o12W2&l?|uˤܹIbo_߀O0S>XR끐=p w/Pt?iz.2xmgYY6 #ׯ5?5 kSb!Cľ!C~٦/˘8OJ c:˜xxbSEE=1&wQ2Wu1WBp)v~b݌ S N(Q:b04Ml,4KXS+WL0s)^RSM18f t{Ĝ6Q2cc#0H9" 9gL1`f&/ ZEfLu,cp:…r (W~a͛#ŘXm~Ƅ;wZK~rOM18sOli||7Əe,#q,rsK q#Y +Qw879x]q-eǥsǜO?6nxSY۷EAVYA6p'EE&/ItQ|}Qռ K}e!}E>geo-[wy ^-r?xP?Sq'r N$r ޺%mЊf6(.NMѢc0-Ͳ 1CCmɓ?vh?ZA[ZDz JN9 =]^ܼ]k}"_0BgϊCSE^"k[["Ec^wCL9IDATЯn]QD~%k!/9/_/7bm믋ϼ ZҲ JJ투'!9;Æma4QFCZQKI(* (n|ۄ4;AXfv&5U:SOsv֬! uPTt  O*E2sQH4X }5\?y9ձRZ_A٤JIE">|_`NHW5^X.0c `( nFAq4[XAPfSA5ajAvN}e-x: 'Sx/(fJ2w_+Y!Uf-GPUbOC" .Xy%&P}h{d n[_`7`3.dQ[jxl#7ټY (r}iNkRkGh4," ]%7K]7*W-a[ FmPۉ,\ j4'u?SyIl H~}7S(V;txbkءF-5^` P4]geCd] mb}HfӴzaBԖiY1kyBQm1YVY'f"Aj!ըBSCfVTD$))92iٴ2U痴jӪzJjf6Dl˸/ueSoרBS멩4h*T M( \X+UQh^/!"AV;1W$bH4@=tkxa vC6#D Bߢ0oqdI:l _WVH`ݙz @ Gw~apxbQ{gTllThN O BٓЕaRPɼF?NThP_]Cj^RHt  bLAII!:li@Z-P-@яFFGy(XI(R5I0m"@јbއ7= R[>UCm[oZ$PG% 3уEM nQ1 %CƳT4h!^3Thgrg<{?,>x6DB Hɡ35ڡF&!⎁e7wA*a^V:dJϰQ+^%Ra7oH!4 fP5KCl&d |bؤ,+DDT/Q-ɷs4&*Y8uX!ta[clXgA*qFf W[nP` I  @p=k<HD2jNS`"j)͈((oséUՐ!~(:bԒhJ< eѱ@LB6j˳`3HE^0[FQ,!sPD mDhHM!)#u}gPE>S6H ) xO9;~+&p=j]YuXx[eТ6$m/À.Ob$xQRMvkδ(U@SaZv̘6[y6o QK1*ğg]ll)FR}FOȦ-q6c%P?6!f $m}gYQ1k~ e(R#[,rPXQLʑӗ!ӭ͊., ?.;HJFz跙W-?ؗs~j n jj*Y)YZ5f L@N1F3ec^uD@ *Q_jNͿ4fB:h{jȑ(4BM5p^+;`\˒Ǝ`F5BZ5&ӤN!{h4c*j LJHS( G?xc9|^Hņ [;kLET K?_:cCnn“N̜AB|DPHzXBT\[H5Ni-I-Te&[G c[lX]5 & K4(@'r: F!RoFHL!&mL* H%!PƳF?16~!(`j^bfUjzGiJm2f0xyۧeqavR>BVoXbP.|8%UxB%JPE1q&[S3 S3lȘ d`0Pw7LchhBJR\.їXehG'2H+fD*m  P u!E.0փ4d%!IIygL]qd}AĊب**Jdӭ-d2[lGV<1!!NFG[~#\ַ [ei9[ʭ3>0@J̨G}iY׈A zEuÙZAx-`UHV$[9oa5 UnTIc EK~hs,(>@s ƴZ F ы_K# 9y%hȐ0 1o[X8ÿNN cm}0e^,jêlGi`+D1FhTѨbETϒCH@f*LpP"gЖqHn6EQ I)E< ÔSin("1:UzчdSaRXvUsoe2P!C4A5z D4*+ڧ9S'R"G>jD$}387M}!:yC5;D:>jJ@B]P|x6ƶMH4їdGQ|aA} o8|ЬgҎ6˿E>f.袍7z뭧v.ĕW^mfIs//Zu&3UWBF S(F&(DX{ ,+Y._akcTOѧ lQ/mer#O}]gcTђ(CCCֺooZ7pv12y{ÉYgO|"oj}ɻF]€`⺛^|Ÿ+&7Z)4B04lo]tҎnQ3 Wd8Q}BYx3Z=) , cm@$?;O7o^|Z 1&I'.zIV{ZFDFg͚I{hwF nhd(WJ1Q-OOD% w0_D@YN^橠I6}r'Q5GJw蒓OEY^\O>S03tMsm;N8]@-[ ^;ww݉'?я~ |LD1뮻neY~ג%KDӟ5\C~gq%\rGٟ_v=ГO>y˗/cK,Tկ~~GuT̚5kn 64͓O>}-e˖r->>m۶x|򕯬j-X`…"r 7wy-:.]7iѢEgyAbŊ /G9Zb|p|HQDXt>g/~ZU[U'?8U:CUuѢEUuܹGuTUUz%4v.:gΜ.(=!ZWUUt: ,8EU5j˖-Xk/|6ns5sD!WZ ;ɫ/ҭVWѮA%DÑ? ЪkʳUs=WD֬Yes'+,%m'M6ڗ/_O^r%ݝtI.첏+tPt%QQy1|\cH+(*?=VE&ĵRɎzFsmx{V+W%5{-)4$*Mܙ^k_1׿-{cX*egJU$yC|}r!S\_geKڲ,SS8mٶm7M6|'x]wݕ'MMDιNUxqcLeF㡇|H&AU&%V8Z{_`ʕ[+˲(–1..k<%@#$4/6`[Uwu!*@|x bƲ c`HZ* eUi_ʐ䊻~lʒB!14QQIE*z+?~㦰%hUJayƩ-W)D8?wq㴧r^ * PZp!➕,d.x;߹t+V$n&,(6},ƍQ#޻̼z-[wqYHɔt^I|ߢEҋƘn s ^6V}lF˨N/=iZ%@gc[EyWX8G.s)z(H=,jSfR3vng5^v-??`K/4~+zl#c;Zlr˪xl@}K,IiMM\𲗽SO]bEᬳ_~)}.,ww۷o_zKD)lddDwv}w^znw͚5/zы>}߽馛ҋeY.Y@goƘŋW^yeډOZ}ݗ:a/I&^ GE-hNHYXq+İz$s1/әL+Bnc[qC* ! u}gD"rcVYhP~B1}c\s_?[ݧ>suחeW7ҿ捬nx׻ޕeYhǎ7s~ӟk1{nUU^zy}ݸq~y_v2:묗D쪫ھ}zy}SzG?O.Ҫ.\xI']q_pKD˗/_hQR >#8{zoYUUu1̝;˲lllsyի^ {=f J&FIu+@Q3((BD"`T 2`V2o# k^暹9:O,(KdQ5nuAJ~yGbiݖbFC==t›Pb4.DTM1ҲCӎr/,7qڱN5sz'#~r7&o{sZ:%1gҩ^1ކwrx%TcAzI H&Rmhlm r@a+Cl OwOTD=2kjJXr5 z3LVlL2_@cӎiNń|,S;ѡ d@AzQ软$K}Dωsi=mT'g3MPkTcsG)KZwNR4@Dbayë A 3*W秣 X"B+GO_9#JR yKX z5f 6ʬ_S(^r6"[is'DXFd(),)A/g){1ԾfJM9Yi=ǽi;r#>3" H9!p*EPT426Fc0B5JtLy64b/}H6s[8ӢwwKH, ŘJ4ZD*9%+RS+~Æ ]tc)/x,lm@3D5*BM3Ņ gsNA'DU(X&h#DJ,v `1Tf}i(ۺaQ+ )HTҞ}Y CI *LDwDU-[688ࢋ.}5jS*G1D IDAT㇏ʍUcoJ^ Eofi"iopĐY]zZ@W=ӊ5!PFj߳,6;~י +g{oMyU!Qh$]Lo}viZV8۹4x6IG HT%2LM37ÚGnn+[Sb[RsfhAaNX(sy zSL;VZ\{. QjfX7t{5tƍ"BD TQńFD6m7otJ`yd/AIJʀq]TbY 1[éBؗrv|xc.ph^G-8 QKMn;ա{ :W>9`Ax7v-D-wM0~@W Vb@x& z{^[5&FI^Aʼn,9>PUR2J&Fؾtx |9Gf% rk:Zۓ"FV-݊ v["Y:_bGŤVJjyddĹ]߭ɻSkr< ǁWg QF%*)fAmU+\ m6F++=X,ylۣB1r* b-fLK ڢ(NgGLyz$X"^pRdp4C` \ ^wq衇򯱷5Z]9 zɝY4nr,Q2 R #b jI~F;zUyk/( )5뢖՜WA RA\ V֔Bi.󫮺ꨣ{'7i Ȉ\sK_2-E AE}ZM].{XfŎZT'z lh4U`Ck3=NNY5)/hlrdٔkw^bKL;wn%w,D;{| U/ތdg9EXI ^z%,C VāLNUt}F=h(gMSkZGS.7/.IJ 0XDRf{,]TDR= 9"56m#PԨmv1]h g1w:;wqC6{%1s*. ˛M(2,ߖWz$W\n%޽馛,Y2') !QMs-\|ũ+W^}ՉlْJI&NVSRzCQtdncM)#LmސKU*T3}`3wX?_5q+Štloiy@tfObcVbQvk(%؝-nݺuZd5jb=%`7K߰:("ȧbk<6:.2`sPڴ`˿cYZ{cꪪz(O\sG' HРV# ׅ<c|衇VZKgvʏ1n'M4ۻ`*Kf.e@L(종SwIѫl=-#)?ش* ** Nw,^L}Ƌ/Xv+nCIʡ2kp0V24l+@@'bEo|Ŧy-wuƍ{[7$&Dw3w΄4 zaߞdl2ҥKS}G&W"d@H.s},ʲ zG&gNmwߝh8yڽfNM*PT":=s WBgѽkM#"ι-[l۶-iIܼys*k:e S }Miv#S.kmWrei̞IE \:CLU|$zjzEl0@,l cl&^Q!{ TGDFUUEyÜ"!Od9$L7JZָy/Y$[Bʼn eG!pHsR+hS9SNYzEuR&gY}lwFNb$dɒ%/_cǎŋt AL.xw&]lvw7NziG=;% SM[;@ M8Qu4p[ P~D|pvSĨ{ OKݳYIyg)k[nIg G+B=1ZtZVN#q[dR_ElUV{w[GZ L699Q1A5Tt@aY*r|l*W1yzBTQBYP˲(P YĶAD%D_V IkJPЕE"q|_1fa&%{< YIY- v>UP%2ȔhƖb,17޸fX{ " 㻩bo;T߿랻 ȒXT"_K*WtQضm_ׯysfr҉JIr*rda֭nHQQbG<^C EUϞua%t.It흱`;c-3'>a5P"U}ZjTc-UTC~F+ RE;HTUB!(0 p?{e(<60wUb4%4<6B"ϭP ?q&HœG$@PPiU-DՂ"*Aq g#@HJ hZF%/ZM4Q-ԋӝ'JO?yJ"hGKZB S:?Ok? L8`&̂=D QJ' {DJ^ԋVQ[FR 4z%O!R&?ރR*XyBGi*"%#Rbb(JQ5D)#QUUDB4zRcQTcCAZz%*)ȉ1ؔ@LSUTU~/G4[R;bLZFCG {5(BB5"=+Ҁ񩷽@)FX$JU^5RHRU7vNvQ*!}56P2M$%On~QK<DF9@|cu'psӖB5y<>tއCOhB~}ۭi.Qehs˵L7grzH7y !/O \!!6DZ7?C_uQNAű߼ol@> M6ؖoo-7z1*P:@d*\yGB3)hc=-5i+[⁇ZrGq#ow{øn'˗ ""2-Dz|VR7xlo<⍦3A8[TN ]ēk[[nLw788~ݿly#o_eG.K&;P79#% QpؽwBYn,T1 DXcz1֭4PS}1?":`YMLO8*(Q}:iFCµt2$6W^ˉ!QC4Ё+X2jٶׯS;8͏|hxH}"!RD(Q8#DU%*naTU!RVJd`U-`:%e==Ve2U+'Nn,3ޓW>Pb&O@S:"--M8;9cB˸ Qf KTFIQ(ѸLĩWHJ,LBH%8{DvXLP%fky FA!59D-*t,?dvdL 1 Ð FQZk"CD)͸۶0AAGkpM Di@˜~+1:QU({T(*A,NdDѪ(;*Rv&J jM9JTe&UeK! ѦH#&l5@b[aFLj(ӷ_ypwp|0˖.36W^="yrbcdto^R[spÛ~/j6^E +h<4hN9Ƿ-yٗ+[Tq,_UtU58۲|oheyRUgDټyK{hc[xV'+p/61| &cs1ɘ,&`r DH $tNiG7~=G{ZfwWuWutverss^]WL}䡩eʕJ4qs!I#%ΛWߝ^VY>lرc$l8~ϛ1)"YG@K;g~ N9'/ZFD a|f O> `+o4_]Cb3fa@PDPz,&+]8‚|l(Ν;pYGJpi|25g-;;3$%Yj RlDHwf=4IQِV^QJ"@۞M% X+ s(mK aAG;$Z)&L&R̗^fv_ih ǟ$!")诏Ms΂ر#% ar1̙3gM6HxI h̗dKc)ni'H ԓO E~\f^~6@z/RԽߦڪEꮁZ'w|W ]{U3Owy 2!ùABr2E=vaGyG6w\0{@1ro RdUsSrC>:c@ZI?;}8Wnn5$%\dJ/ ׶m*E*3'ypV2!)?8G+@o!˼`5X#);}*"c=wm]sOqAxmͥC p#zo[_#IjP8XbU9`͑Y() A~sE"` D,a]@f09r9CSd4r)tO䈜[Ysle0KrXfs`8avl`rSGZ  ,M`f'DvRP3,9sp XA&xHؒlB8p gQ9нN frIYr)%\@)Mͭd2IaalðKC ׾ 3V9( %YH_k${nF).Ð`DZJ9i qlp΁<ћՑ4`0I%9ss.{#Ap1 !]H)FB ?JYPh ~QhFM^P:Φ hR੧ ~>!heE p[rv|cTӖoFq@lu.^-6 E. , &8 rV8 KmNjq3ϛkoex=昻˭vL^x EP*`3󵗾?]}kL$8K(M'B`HD-@AYHiG"Hq Ne^C F\Q-ZBxCj\P  ! AB/ !Jrf2dL—sMnS&T) R )% \b":ԃaz555>,5npau"/&TMF%/qs^![-|l>vL` MQ^r=>tY-iRឞI*l؜y;]#(w.3ċ-_'Ɲ6-9ל.[BK*v<3(# kH'Oq)[ZQ#qܯͪY#؝m짠Q~~/[À N͸9#텏[S0S3zө7/Jmb.k LosTXڹ5oNx;~Ȥ4@HInE oxq'cFLjwWw~vc>Y9rmk j=枛O?넶~L9^N{-@dsή1ͼE 9eYiqCYB:C ޚ޹pͭ-}kYiN$i19oXӧ4pťWkAB9Mr.5&u}0177)ϧWh4 {b=it7N j§]XYcm+e@Dwn6'BcLioclv ln ^?~{ބl}W@zF?Ot}=o-Ef.8y ق, x*͵) Ӻc6>6G}l6{'B<ϔPR_~5sq)aVo(VW pL%)dM;i6$p~zS͝)QVl dq"9 -chaۋUy{V@Xr[x`@ۇ{2l_QFY8#wں/񇏓:OE.8 ^783XlL8Fe 'O/z˃N @l4?艅ˆsu5uaG`8Ўm&"p>{JV=e2_?FuKI_VM50z1MywE}HK+<0ZV%ih\6;!P1YV O~MF}!߫/)/ٖ|) ^Mo/Kƿq:0&]|߭kzq>{jz9_"NJ]>Wx;]pD5};kbDXtyvyC,7v0~/s\A׿, /R! @Фt-Y4nV{r%;%A vc⦆<{NjXݹاhTϘx5:{(eDK'tn}@½]r((Rb|-̟7_|@Wg2|ew<}4𼺡PHc7lyM6:g0?<mtQG zXli fUWGm4x4K;]@wߪs.<7?3QP Ϛxw?pgÎ<m{P0o}6bcAdzcH PZJɡ"3*З].kK:h7#"(Q޶6+(BR(Ѿ69G̜R+W~\h-Mĉgf.; tk9v̈ [#Jb=xMgo~=h QU;N} @`Ek~w Y MlWT̲xUO㾇N+v7Kk&iTsyf,՞xN_i_a;fu-_eþ/^YQz57gj75mҗumrH@t5bWTʪ]հפ=YbljՍuWeJ賍wdt֫9;g5InlMlċkneŮڕUa;ǭjX8ˍyuu•ե Sf赍ntڸצjn,;&uInk;=钊]^vev6lg]oTq.6\ɿN.88 848fU5)jj^1q{li_'o44n_Zv5lgͮڕ]eW/Ss>8n~ď,+Y~}ݵU g_l ui58H=kxVjƀm d M#=s& ;f?pݳ?]yOry7,=u.R%g #GV=scZF2sfM}luY׼ ^}bSs>d%\*'="U'= F/0͏>1s=w|lLtՙ<홙fzbqʤ.Y @gtgEfc$e-޾ N3BDt۾;G:`\]_7Nx`9W^l)0s\b{]~@hO:D$Ҽ˧kEo^eO]hu5k{w( 9(ch-EhqGѵffrK`Z91"lyVh h>$[n<ll:k-hwh.D6n̰<R rT4dmas# GzS,PG6_1F)vC cZ( @A2) ɹ*zg[][-sW^H.;:$ĕ#~ko 7 Sj.n8n| T l)q[no>VKa«ʸ(eND[c5B"(/Rɂ s1ȹrν[V*Vi$m0"(())xwMK!ð>#(jSOO '|QpBXˊD t((.irKVOҹ1N:{OS&GL<Prs!L>FhXkDYս:c:@^~卾ν2P3jޫ/ڋ/c>Z.\k~$ v#GoӮ,,UF0D3t c޾5?YoKvXAj##FNwe4LR*f*V,,]a{ilrkiD` H\DKu 2-PeY vRjӐE\4iX%aXaE3Z՜*'rCQKã*/k*(Rʪ#p&Vj5pGJVa^~tkrM ;E: ڔFKD"(!hjeYm Brld !J):J4D܈H4kj .8ׂ3+Ap2_3H*(_GPA0"]nfTl[G(mA h0Ë(axÛm0K&%IZn#ΣHଭmӴԦlQ_;8UDJsd ej9ÇvV(Zƫo~⭶(vm]Zkzٷ%5nVᢽUDQseaQj3jOखEZaKdJq –է={Բ`Љ+&]BV1Q\jy `96!Po) $Q(""~)JZ_,/٤Gm2n `de\J 6XzՇ}/N{H3! d'كSo.(>KEzg(*ƭ&U"~ϳjn2屪Kl:f:;;#+RYF㣒e6.JgHk+ӺAF??>eޜ^{e&}p2f1 @\o6wB).tqK|9{$Ì]G)_Ѿ# Vu2p~sjk)ù )GvTI˥<0(JUwɅf'[({2aI sVAi8`O{dAܬ:`==udU(vbC s;l!%\fug1aR7xGMʄׇ( [ΐ qEW^v矓 !]ǟr(as%[nlnꖫ[m YG0c60}kL>s9*cϽWt^VKuݝNկ>y}ΑsDFLIdIvֆ2pءGQ@ . Οآ`I04(}i@[}wdFa{?giV叏Hj0Suww֙Yq'e6ϟ"IhkDJk{} U PLIvfU1YL up&sPGTpg>+B&sRP!"!"J(bkEnH )'u(R ºLK(pN9E1$82I#wdHq6tmI3X8VQJZ-rfc.:%s,ܺ,  L.9)K*'^~ VZJʤc 'QlcŬ m!$9KJKB),a%mIY 4d TiKʐG8y GDYIRYF286$牝4M (-E-9!eZ*b !3 Ġ TpXZ8-X+E u %rR"tb r~םwZhiԖ,s4~JH Hzd6g- 6CR(bH"dCLTh-"]p#[Z0e IDATd(9 X@#H`" wB,! nyn Iяj/w?Z9GM@;؄b Æ 2Жs6 BJclѕ^ HkX~!|`D`u PaA;G 3N: /KѬC~z۾(|W:-PwvV pL wg @-OAB$XD`BTXH9)+U)iba]qYg4H*Yޅqno8 @*7,犥8ɬA ujBo\~G>Пzi碅KqAF/eY2 epidD.MJϿl-)PE%Xk|q'Y0*Ju;SA`S$]~.Uv}/B@,x҉095?+$P.ۏݲ[[ *?k_q#'#n`ʍp6r?GJc$@kRJȷycq87'Y u׎( +!-0 eH9TP"zZ4֬qc.z(BYnq@q}]N;5;7VujbARV1(mĹ@s"JQ "w҉Âs0bUĤ0u- hfŤ*I2ˮTD$4٢T,;uKFxaS+oy'ȑc2 8.W_twfE7vߑ?/^8݃;l͐KuYK$uI3pה?JASF! AG/~փ vmTJ lSI#6ذNI?'o8Cٚʢ`E~{ x≬y 9o @*jd>)m{wr Nq~$"K\wՒ!{ Y1_ !αVcAZ8;0 8Gqxt`A,7qa^{0(˲_M2;'<2-Z B7xPkɯfϞgMsS'Yoޱ;jԨaÆE_& CG=د0Hty~a\~?fu]=,O[*={_oW^yeooT*J{f-mPu{!GF/Zk'i O=7;l?`T*k7o{-e]>l'϶ 1լ\j6kii ðQotI-vZ[[o1Zvwviι!;_sg<mѦn̟ꩧp pΕJ .WQB!D}?hڴiCc7]`Ae~u:::9h)O^zv7|sZT*o'j-Kz۳N:Anmi'+[iBJ/Xqgsz!\amh~X7ߴ.QH~GS6z_kW뿌f02voA"a$lmmo$XoOJ[oPaUٳ}n֍%kcx¸M- ^g:51} !ɓoZˣ8{{{KҎ;x} #n香3gzK,h4Bke]*cm^ypkګ}`Z͞{ :GR=SB?1ǧO^v٥i^bX.*hRE}}}>ﯿ';v,p SZQ.Z#S9ۮYh\tE}sLQJy֥x ?^IKg~PKIZ6H)wa"k$Y|dTUBA Ȳl]E]wuBF 937 _*KCl9vKZh.;m6$4 kmR[= _U_a׿AlٲW^y?vmaj+VL2eĉrvss1n4SLI455m&;#[kõz'3<UM4k63hc<Ƕ?2D휿: p{&Mh4XE)_Y,[x,˘[nRS*&Noy>}to>š[zGj£T."eF---w\Pu|{[l100\qG1bh0xz>qDc}Ebq„ G?~y ǜB&Te `K~p,׬YyEW]uպ,ik `! `6:|y)zJЪth,y-<R AWgZ^ϡ48b),Bk,K*-=yQ׾7BlC&s^a-9䐢Ci돹l͆pYkr{=Ck]VŢjzm7tSW^ygҤIw/y2s. .`C}Q|k yw}e-_Vσ{' C"* Dz WiJ%/K)u-(J7f$7MzժUR4n8èQFoƾC86P(J%mmm'|xEpO40Aq;$;Γ!D?cFrذaCIh {WZC34}3,@C*?le^%yx?,ftEt~ߤOB;Q)N*kmsrxoPKKQKK QFuYC.\[[׾ &Lp衇E|% u`im#]R6 ?V]_Dm$@)\E7yAD)^爓RI ͻ蕌'b7WCZ6I!̙3z F#x5;Z?Z~;纺~SϷ95)ؤi r0p 4H !ڹ!>ZC(Jok|BC=TkoxF!oڽ,˦NJD^8ӽmݜs7tS[mUpW C" MzWDQQQCCkĈ P^c%X H BHQDQ@P@ ôN{},X9]$?]{g=k뺤L$ QYY9ydSO=z7G.]Хimڴ܆ ^y啫W? qoZ?S;wBaI3 60N: n۷nݚwMw8` ^uF<}?##o.**b##ٳgʕ싖 ".X  YE @,#mlMLD!jz_|d]-Yd_ly'Sx7WXA 5 w}tD"J[o5-- ݦikFL&i#b&M A2@y:8/rNBf|ruхȲ >D(|Ў)4`ӈ=b֭z֩'ZagKQ)p0 ˲F![LӤ}z+yWl)6nܘ7˲ZjI9kp H}ECc~rٚ>3k׮ r{n2z@[$_}5t+](xiRmӖ%ܷs RyJhϰiK'9v@z\d2sΣ/9Z6lۦ x)SXbKۜpuhٓEEE\qLA뺕dObTVVjyӝ%K[u$T`_޽e1Dt8Yر]JdzqBt҅zX2srrX[E%ZD'6lxYg]px>^z1>` 6lׯ_=&hT "KMwn݆ ҭ[5VN\!K&MԫW 2ZjE8Naa5\CH$Bi74j믿wwWb1b^|EB#Gfff?Ν;f}f͚lS.X\qꩧ3RQn]ZKC_p ^팠EB\vegc@uyժUkĈljq]w۶mڵ{WxᇕRQHs1\0X0P-a(m8a(JRDB9s&U I 9/}p*;來{6^4ݳg#_O,/”h_qX9|*Ɏ29pôd29nܸ;BA0g>oڴi,6=x,c t&Mb0 Roztr4iii%%%Kqe˖Uq`ΝJ)w_wܑѣGffwg9 -c"TJ)xu~222>맧GfDϞ=׬YaQa]s@ZiF;v,4h`„ %?d 4HO}49-ZRw7n'4ia< y;dɒ#F^$% $lZVC%W}A{カmjՊ|H{Qd-a2ˬ*gplذuEi3f())0 }F={0rHY6N_8:IH&컲7Jq!@"t}@?Cℨ#2˗/iӆp-`Y!}SR# D(L@%BxI ijDYhK2vZ7n1ca,t*{/>{l8۷o'IMq-˚7oNּb޽,`׮]pN,XŴR(p]O)**ɹ|k2& =(Dx7ޛ7o \D$ N=ԅ K)姟~QYYI{%v1uh޼y7nZl?sڕ]v"R}j եK2e"8elْg׏C3<[nW~![$g̘!oy-dffr9 ;6;;eL*jҤ \]v} ^uu7nFsssrKPiӦQFǎMӜ7o)$ h"srr8O>dEEhoC<&0nC$>%p2z9xBHT%I _m߳S+Qi 8&a9#4Zsӌ ^UxaT ghﳉv"Am4qDJ:V%^&qm(NV{l%LGҴ02^Fq2dOҮ  0N,mɡCbɸ 9@k֭n aޒE^RN%B3,ģA(@ ibrFcE;Ǐ6lꫯhX /*޿PHka+V;wt ZQ4n0第,I>C͚58+QFR۷oܸ#j+|Ԯl- IDAT]O6MJٸqci[ >"k֬IT*+0J͞=p#G*b*//gE$H3g=Ha<---3Iafrٖ-[ڴiC*@KZZZii)ZD"/ J}%-m6{w뭷r賬' 2ٯzP+n喊 r~R֓u$Tr"nU<?رc5j(cPiii=uovzݬYZjq 2vA1wVrB}*8()GrERD OaܦD]FVm۔GOΔ٘Zu0k.J H/DMIv7&նmۺu>XnԨ`ԨQ# mP _qd2I'R?aH#bF{)( v'J@C(4Z+Akm*wСZ$x߃ZR={TVV`[ӇTfߌ1*Lʕ+KKKIJQnݺ۷={!CBs=G{8S<䒱r%-cv^^ިQhԫWgQs̞=Ⲳ2NGD4dC1 9I^_yÇ; Bt1c0K4>i28B^,^& ]W()m) fGWq:́eĎKMxB#### 7VՃRJ)Ʋ_l:uԴiSR<lf>,jV^]{tLR^CDYQ$p $D<_ba;U´L ~0m|UӬaSHP )10?}z(*..nР ;p:vر!WPcpNyZ!7f )oj֬IhAW*DZ2 aг!\p<4S)A.=kԀ i>W^E6GV 1Lj]6A,8JV_A/t7t\+N܅_-+'N:7pO>D'\b?9xN{e(󫜪ӎSWNGu uii\>9眳sΟ|Z~cС4Q .8ҥK?cر#I۷_xᅵk̉p8EJy}FbvAeHh96lX^>}tt!t"kS%ZOaN}Hs Bg2ɖҥ;Rmֳ}C`[J;IL@&V=).H/Ge~CVVV^ƌ3}N:\\ѻwo˲ϟ$ ѲLQQQFF%\R2e 8LEfwUu޽}Y._.5ejpuO^1e/6)qek",Ԓeeey{РA$Ν***N` bL6lX8˹2|cyQ-գ_8'/3H@.͸#?PReP cJ.U\p$(+2.h r\9ok (iBHԉ #Ld2Ks 'P#p%:By2 @ -:ڔ悈ZjE%g(iZ\5Hvqp2A(N30Kx<-RV w뜒04- %@  H֭[GE"C ?cd!ik֬a-)knݺYf}8 | ".ZfP_~n˰TIbBL>)+<.[n.ڵk׶mۂ@"hp֌<.B!cN4&Lܹ)S"ׯe˖ds)OA~mYYς*J=I(޽iק ۵kG/WST>hjq]8y ra]ՁfҤIplݺu%)H$xK uMSju.]| h!p6AiT"sz(2ՉmK6@m+-N kT}^x1(^`Usv"~:de =J)LxcĭQ~Lvߛu,hB%P5SMj TohR1L`? TIHs"jL`K.DJk׮E&]ٳ /^LvD_o*&}xǂӧOwM6gu{u0/o~.[Wa`VK"xy+JkW3@kmQRK >'erN렋΢?cƌ{҅b}k[%]B0mg.'GJG%N3\XAeGۦp.>Ԥ,C ,`_Ri`iZ# ?39ނN-vЃڵ+} "TyQ#J, H;Jzhhknl)Dߢ[8΍|Ћ*8*U Zqcrp7iW+]\[=9P@ҕ1<;-^ʉkWVEe6SH\Cϕ֮UjT:gv|L~v5\$ >h}ݵkRS}_&x //oTtu믿3gnܸqҤI]|9S)qǎJ/s 0lذ[R['|:.moܸ4ymڴ)tݻw׫WoԤ=3iu]F믿Ec«yM< b֭lﻨS)i#":N.=ϣgܶmݛ8b1*͛L^V-:_ˏqؾ}A&`=Jݴid2I)rwV 񴯵V)<_ O­*Ӷ FhȰԶ&#?h g-M3l"Cd(m@# 2Zo e^BJkJPB6@LtW5]h& 1+W~-[ƤdF׫WrlۮS#i,n 3'իWf͚1)iS-O)Z QUA=[N!OW:ׯRa* M|R辵$C{SvT*{z)smۖJ畟ľ;\fq'm 66jԈ֌m84r#K'=N-RnDjW `")OQdW7T<0tڀ4@S:ԇqGNW" ~vJ-!l(JZ '<)M+u@Ta{b^W?-tJUQJ[΃ɸE(i}6m5T*5iҤX,6gΜ2JP-.QI+,,[.qHT)DDtZ]t#ddpMFN/ө,H$֭ U2/:)ʻ.!Q!e^l۲l~7Z)CZ`ralv˗/'V v$Jj9.NtJ.x(@ y%VyRP7UB\+)4` GWzC,#h_3bs=6˚`N o l Ӕ~<9$o 9GfG"srbLmbBezzCɌ@W;&Ҕu*'DׁB -@"H4әq} N}i' HQHV]lWcʝ" G'ؐJ(47, ɕAW8r]q~.m۶̬(D裏hnWTߍ sGX,F,n2q&H@e.PL®[i<\ˌ}e-̷¢Ԃ*LQ|)%u199&O+0ׄ m_=g_&O -4 Rqϥ־kCZ{y-4jC QWDŽ@nÏARh0 D<[!* jd=N|ڃ y~XJpu l}%| ճOB (  Eʶ팦V-jOKI/@R%%{Eus Js :O>bwbֲ;7Lr/5z[sέYѣ#￟H$}QfiI1O:j_Bs/Q{bOw 3qYYYU8A ::2#|9x/#b7GI:ԝmӟpi)R(wV}4EH#@XAp@J?7 \0<ݨdTc[ZII>u]wwp5cru'I[kܹ?͓&e͙3g , [(T شi|_(~Ժn̤er{9)6r !}ԩfX+0@!}4lSh ]{؅ٖ=<Nh;Mv۶mPF K+9==y洞)))}?### 4D#ض}駓&N* Fp=hQߣ ;o߾=%q8~ТUxpPkvXQ^-mf4 |Ԇ רO{>7 iYZhUH z=e0 6o{饗8uX~G}DoL{{sυ@ciӦiӦsϽ{؟0 c֬YTV:==ggy&MVY 4w$˄&LywkL)—ATȉ[N}e(0k\sِ.n/넂4wg+R`/Kv{128P(tWS1^#N gA9f5d=![C.oAP(D!᝹EŦax# K_blh[);]v/TKf9Kq5uVx㍙3g2G nb<ҥ˸qH)nƗ^z}r$?#;j #Lr>?xee%i^|E)q=uY7|3EXIW0WUH(;J Y^)AҞ'H`XʍJP*Cpi;| 78Y6_zٳ薃&п!͛ΝKjuԩeee}}6mݦi><;;ޣ (=\ټysuN]vuH \|Ňy -w]7hpdq9U0AHZĢX2N(CKO@ 3<: 0:J}uWz1{3/[$ R X/q 4ۂ8#xB=$O>#G M?yΜ9K'Oc}|K9PR`ǎtH6m83B֒?BF&c IDATQj-N%_DʜjcJiLo܊˝TNvܽw}z_9H#*NP0"vؑ)͇_*+޽;w68NB1 }߿񪫮 yZW_}աC4v9i$2ˈH$ƌ5vX7`v"J?wx;k%W|u3U 41Wi'k>j(,պRkOIm4=+e)r$HDY_E.];޽n[re㎙3gn߾=77{!^/:tиqs9½_/^,8JҦnڴ_Xl?n>}>í[^|۵k /}+FSN<鍊njݺooԭ[w̘1 4 DJ9u+Vhs,{T/M6qmӦ#8M;BώzlB! 0$ҝ&~5<Eˌ^1YKԂt"~p8Lf%ԩH$0ņa"q3ZpP=;"<&O8Q&+) :$un4$d"#7 80COtZ'1:}W]kB֞VV*Ywk׮qۓ?oZ뮻;3\uUDn%-..^paڵϙ3qAk=o<h߾,XPvm˲&Lpw;։.׻w7uV2eJ7P'J!)L9wر#g+VÇ^x瞋g}v˖-pEɳb۷Kf+.コeݔFW'P߹qOT{}ٚ>؁7!ޝ[\XKEkuSN8h꟥Znn.[4uhPУGpN'v'J9ryTX^/ Y$?oED?ēn֜n-//+QD"Anزeˠ{ B***hxo#j/ŬeU﹈:Sj_: o<4҅6]R5FЈHV=e9q{K)xg3gϞmwܙ#|Ǐ?3ȉyW֭ 3gΜ9s VZs{*= 6֭[>}l>3i1M6T7cʔ)ݻw_ly999>`߾}GQVVFL2wG}իw-1"&MF<|_yp;S~ڵc?lذ3f"o٩SÇs9 .=ztz.袕+W\ҶmN?ZG:u8"QEcᔔ0<a-D^9+3ߍ\`mknDIE[oue'#'_M< <~eyy[ocǎK5jO-ЬY5jh h۷('ݦi7O]z51Nϐ} ($ '_sMag΍DCBN,%{`ik֬ǟ~`u~BРAƎk񅅅FZ꫙_|͛ à P97o [$v{ 4$'vMAA~Fzʔ)IC~N;-8s-D,**"/DJ駟@.]`۶meeeԨG֭`&N>kРAӦMwڕ[;O1 ͫ.9Ea7yiה! !i(C5BRCi ?9pgΝ7>L6T; #nիWQ*D͝ʦLBݬɜH: QJm۶Jva=6nH8y'"33 2qIe*A>'jiJZ |L0MCʤhQ_F@ VBS^jҏ$YޱsӧOU֬Yڶm{W\qEEERjϞ=Ty}zY>Ltk2su]8+9L&REEEFzO%*r#H#XhСCG#(eMLg >ŋ}%Kw޲e IW_}i BTjʕSL9| mGFD* yF2 fyTF83rfjZzK^ s$764֒![;r@ AF},+-oݦH`83 Fhtƍ5g4c*L$0·z(ȩ&I&y^FFgT|7w^(J$wy'kYF333Rh 4w C(bj) @! (AHD x[qRP>n[F-*mIOf5BhDCWX7,\ &bw}7qO>2dȀ133? `=X}oTsU*7U)Bh4KkԨA_ prZjE{F5KYjUvv6z4iLdYr۵kǒz֭۰a,Ym۶t.]&"ڵK/m׮~8 @lxvS d޷ΞVB~a]4̰qU5)X-0b4@ksh]A*4z;c믿nذ!Ww *~ZKi$&d_z q<ߘnݺ\piXLJH$ׯOê&d;k322ĉy ̤l\P0?ٔ7'+W? *ZX]ٍ;v0u B -f:' I:װ<~G2RJCָ &iؗ-++ѣBԩ_MgĪUSO=7߰ "RP1$U4˾~]w]IIW_}EO!C=yfv1pF 'N8f̘Ϛ5+oݺu۶m 8«\cܹ5:Sq8p%Krss //BZj޽{wƍ(XI)2PF?.'J "3.,6&}|IziC *[BHFfgyBe~VP0}MnZ ٬^zر d?͛7BZ*;;/VJ 2&MpTZ0CJ!+))KKK<_1 ғQFAG%FH}v )N)PZ# 4&tLT=UIW']/姒wvjAut]J^L0|VTΝKKKwmF׮]Ǚ1cСCgÆ ɓ'WVVN>}ܸqt,E <뭷㓞޳gO׮]k^Km׭[O?4uս XhW_}5Eb'O|9rZlvD\rA4hp,kժU5kܸ[om_}UX~޽{Id{nN> EnS Liמ觔/.T)0Qi*ڏ;TkG}Dヌ֭R9鄄r-fDh)/5vEEE/0n8`(ڵk׏ MZtc@K.R $7QVVF7RZv扚yv5i@?)UR>*T 4]WWر46J- `VvBz˖-6m2eJ*… fͺ+ϟzխ[瞣ԩS/ŋz뭽{~Gzʔ)'O^fMΝf̘%ulٲ^x!LXQF ,x+++mV\\ܤI~ݺu͛7ʚ1cƬY.]tҾ}x|9ؔRz~5k|U = ++kŊSL)f͚Mm۶g袋Kܱ|iʼn2F 04(J-!% P+LCؾFD6V/U>nP_Zvy˞r-s̡'x@C#>h-7i{'OzA2adDnH̫ ?5R 4DlymB!`)DD%A` aMh@@W\i"T%R6m߿O<8ґT<##YfmgddԬY>+  Q-e˖2 9YTjT<@ѨQ#rĻwNBȰ޽gѵkW=֭["T6h?lwqe(-HVwU*Hr1fNNSù,THlI3k[%VŠ})@@z   +J+ڶl )оֆ: !/Ҹ#\;?A ; 1pr}>J[ 7HaoA @z'rx{pSh @Tƿ2RaYB.5۴ob)# PQf/ɜ;"(*?d8BF*G5Q!NtM,Z+e(q ҈Cծop ;ٳt;me*c-;cHCU ,=8ɣ>ƍ3M3??TeYEU^^^\\ V?jF$ UԤ"//ϲ1c1uTD뮻jԨ-Z@D*CFKl ΏGP";ت'w F 7VRSPJ`xaߍ]luھVl_}Un?a0$;8Mp%Ri|ٮo ~\z @ 9rY;:v;~f<-KխW6,GӐ:>"{T<0T*EFқo .r[nB322?LQFhX[v B\uUَ3G0FbŊrҬ\rb O~%ZP@ BxZ(CkSXRf%=!Rh*D֖'H -2t\i>Xaf-' Pw8 °xǢ]Z*b}]α aڦR0xÿ?ufV ZoD /GA'}oRa~m/_{X, /_]b)d-Z#KKKT>_z饵kcJ2޽{ $nf;Klv*lN5PWQ5!@@Bk맞@](%~go`k0 XxcT!!MiEG zVqx!aJ醄/|K \3_"u`;}/>]A*7W^{7*ǟSUN'$DY%İE`d QP02 3( Ptt@M%@H @$T9t6#7N:uy1$ `5na6rC=tرGuTEQk̙վrʇzG=*M7;+<4$%)pfo0Kq賔Bj-s0.K55=*.Ҥ7q- r' *3LXCT b(VJ555Xx… ,_kҥRK.y'O|enO?L~wq͛׻)I{ IDAT}LӔx$I BZErK$CƘ1c80:JT* Eӑ&Ġ @fq}!JI`&pӀ[(hXJVVJB[DϫȌz}rBΎqز2nYڨ#D(1LdVkN?4|-Sٚ ~q[p;R";~"@%^}w}w{{}cwܑ$ɥ^ ?A$IxE+6h+~v>!P(sifٳ*Jx}4 {=Z#TD{rDA|*JdR 9V̯> Z_~Ǐ{ޅ?Y#Rd i!7ᗑPuYrʕ+3 /˓N:}͚5s^|ӧzmm,@GyI't o%I 3GQO9p)eMr|W68b˦R2V˕&~ @/r0U1?'EŢ Ϫ-ox?$b1"[*>gWշe ͼ&}@zs٤%ǠN7c=6[_}69Cꩲ>ǎ{A{}u ,[{{'>oD*BϿ8f=9ptNJD"f@iXt1QJJuv'v A@"L9^ϷW_WqÆ ^ww݋ _yx{N-"A5!+$}Vx $6- '-k1p':#2By QV%}z =lx~g{'!{hN~Q?~2 w__:ۦ `MNjmm}oԳK.oBOofi5GqO<[Y~oB6~%PMU?p=}{uBOIUZ4@ Vp$J;˿,|z뭷1"3wz95-?ngOQFek:zh&(ަp6 BiQ`Ȩ@4Ei|@PDyRѠ"&z;VZ!`G&m^[AZ1*L[T "ąb 4\SeL>'|ꩧ֮]G}{3`ҥst?o}.#.]꽑1&Ξ=_ߔho=Wήrc\2U˽+?pTnj?%K,\01/[lΜ9,-_Yo4Mo+O2 H[=ӊ}C_v~S^#F*@ AJ"!H ȳQ^!qhȧ0Xvӈ{20u&IETSJ%ijŹq-縩%% C=4mڴ]wkfԩF2̟?ߏ駟>fΜ}s'=K/8qa~zor{Ǝ{I']p;#}+_Yfu]>|8+W&Irg/ҖRuQ&N("BV}]Zv};{b[bņkmq{25x\k} 'UW]uꩧΧDD^~b(96)8k"6pE$qq':fv[\qW tYNrv^]XZ'"%7m~$wy'뮻+ʁܹsޟNG?^e"\)CNU|԰ߦ/"---=I^~9ur,"?Oqpkk3/-Z圈˿Kkkk{{{v .oZqw,]tСzӟ'>8o}+իW?w}qƉ)oV*}c&Mϟ?̙3$\s5qH?? TQj5YjUE_җOg}ŋEdҤI^xa6rH+VꫯØ1cFkkkvYy_r.rWUkT\5$~gqYTz⎎jm("I锯>"ǃ$Ew"{G&ѷn |K_J䗿o\.+sû+m]w}Cʑ )*oHs&0,VzRYxoah1?Aĩ5F_^bq„ Qy#>.‹.!׿T*~ߵs1?O| sȳ)5k?$;/|aHe]vU=ܢ-rv2e 7o~ Š+*6ls-d.}=cƌq^W.YXE'Op׿cǎ;{ƪ6c e]~&=W*X"xb s{k&+b|nAk}뭷qnZjڵ;sggK/Es?3s='&㐵UF9OV^SXQHpdX0A=h2`?ˀӃҴ־⋾ݧW#lvsƋ,=/ /iWos׺ P `R@2AjZvI#>S77HR$xY׭[wg/Y{}KӦM׾[fao͛n|$ ~{/|Ν_ŧ>׮]{'I7nvmW,]-K+^#d$!ښ,?O]/:蠃~_?O<_+Y K}nG OŐ/}/?'ORwtFQ_T*eq\$ZhM!c(EjJwu@%kWO [RྥԳ ,Y$Me'?k7AlKk\FiWuƵƕ8 RHZX3@97,JGIm R QD^,%-{^yw}W\裏G?y:ŋ7pÅ^8j(oPfv/[[/{+/.q6,KPeBYIOv &M{+Y7z@,Z0+>KϿx3* X`I'tgqSOM<9f?r?Oz 7p]wޠǍ]Y?ʕ+/=ܳ_v!\Ra: EλlIԻ W옸8X4J4M׮]koɓ'ϛ7o֬YY:^Id{Zh@:G|0$p͠3 )ц<`XBNp륫,UWO)oO\ު Ux7/p zkjժniΜ9C w}%֙ԗ/_>}QFp dmTOzyier:ODvۧz*;wn[NDbqZ|wgh6斖c/D}bJB] ?Lz; Y'{W]uյ^룶93p?R]]]G}4uQ]w]VJtwg_Kw߯7pÞ{{Y{SI1/_,% !4˛oꤧ\߳V]=qzeB֮]tR~_]E]s2Ǝb@\`@XҸTVQZ  t $\4b (Tq?U"Kkԏb/jYyAW*>O{{\}K.w-;iWZw?O^{֮]3=6\smzZc9f]v9#)E70y .^zi&L3f~{vtt;CJ~~衇z~>nvV{l-L Ddŭ~}kG}tTԧ>5~Eyg>G;r,ת[KjY_ĒOӥg}u~"2ge+c>_?;?^8DdԨQe`yx"R5ʼn,1עn~c̉irR;'klZww/鷿ёQo]V7"VXk}ʕ+} ҟ/TgeGg6%;׉Ț5k޳P؟iӦscVZU;]v͚5Au\~\qb{c^+1KZKgժjcٰk_Zg~g/w,"T%qef<^{5v^ȵ^Ez Vݒ>N7KGie.ΉI'K߬ uCNiRiVqQˆȦh:drȐ!>{[[[돪O/^u7Gnjjwo_.K =zQ,MDIs[[?jԨQa, E3go6\ϣ)oW:OO=ɾIdԨQ#Gn"bذaÇ>l$Rsdg}3F*hIbёI+]YFwJ'ƺ2XVgѵV!nߍ8 @ՒĚĪHDEKkbF ~e{;{ݏz߼y%N{]]]7|9s|ŗOw=}6]תy!w:}738wyw?ywy"sg{++ ?uZ^l f\@1۔D]Mv;+$Ms-(ttz>Z;937^{'*@ҥK=;=`Ab GwR"IA@ Q+;f@AEX@59(GDŒ(:o %(,]??կΙ3geZcfd3p ryw-Ztϛ7ϗ˿&&0JD5SHJ!Jkʰ!megfN<鋐Xj L)/8| ·L?Gu_W}ߐ!CRԩSrKXJ %HDlH3 8WOjh-dUS8a)p#J`D Bgqy9c$0 yҤI&Mg Fm$}sSo=[V 檸RSDZBA1\=}fx=ȗ>lEy>phf1iz 2eʔ~|z랞?>4A*g_(q?/Q7$(RPԨ@i䈚$v/$6F@^9>w/jd']QX_ɝvdOݴS(-(k0~"5ʒ&ʋDo, aqLWoa)kB>OJrUW? 3455uvvΞ={ȑY~lsJ9npFW`J,AA/VRXma]Jሼf_,)-X mkTb$i9h}B\X̨|qyCS골)Iw_ݏk2P+:K.F݌r _%"#G tM2% eHwQ?Z mCM'qOO;>9;'ߗAeA ԡ@DyDrf_Dopy:Y IDAT: #Ь p$qCf X~ F@TGD &+=x6uM /-7jNѼ RRaA=&^̷>Li:z#K( MH44 ~__+r'lڴiCY_fySnmfZ;4C,7α$Ӫ(Cz_FD դJ%qQC?%`vhJXK19m,D&(8zqEMf ӟT2y;˷fbB`8DPxk^j?񏾃\s9Wg>nz{܂" '&e*-/6EI iD >@K@`ںݒЬ E=r4$ffW/%(i+JMշ}U=1?a α(CR 0}>w}WOq/Zm}ԁ,[> sU[^ιXRͱ~L$mR'/XI©N5 h<$J 4/~fU12|PY"towQRZؑX34_U{4m꛲=CF>y0 ۷!")N$ZqdE@@`mwn "!Q,E%w hh'@Z %Q lQĸ-!)k A2 dԨ-bEB @A"t aO`z>r{9^v9D=Hہ +!Q gašPAMHkM @c2 8XMti (jv:8l[ Rq!oр7F9b+K8+ O)I-ָzVI!E Gf ʁm&Ru& "![aŒQEb$N#vIWlUFC&\"ocs.}8D zA S(Pn1`(&!FHxs(7x:E2+AS`Ֆ7HaiiU|<T6YģV% 5ذJqk`Q5TH,ȅR3"4!"ZB Hbc{BӴ9 m톣5֢4j!cl=~+qࠏU>hЗS!"DFX'h/M]!JȅV X=`-.p}˘D D[ 9]ձ& j~ռ&U* w/ t)E[Z2.oY$pCL.W" d#PR@Qtq:{yWCwP,F} G9oԩS{5\wѣ#d#qy λRmr%LZHHJxDA:r @91~ H TXmM"#QZTGMf j INk_>Ҷ޲\K_RE@ E 0`HhSY{__PqCi>5m㊿u@ȑM~lnߥ>y^Ҟ0<mpmǀ9M-igE'4fSPS:ݣP{$Ebq:Jr}1GÁVU:#>ƍ*8X$ %ELQѐ3kx_2an+E ̚Һ}9E@RQ׶u|ǥvRkcZï|v%?_W===e-A 5*+'|n16R'>M p?GT( IӅorJT(\"ᓣ7&vMz6H3;*e)&Sa1m+uR#%3 oX?ADcTQ AY0q J*[㞘7~j fi.eeSжaR*==(|'!C2IjEkG@@BԻ|r Ҷ/mu͢"( @ٚvd=j5ʦʒ8N348u`[Qŗ\Y&F]DcJ֧tdm p)'2T %_u*# RtQj@/n z0/}]VkJD8*Lbт&WXG#/'䑓Sjt<0?]0 5"s9R-Dl4 ._l9BGPrLN IJFط%}*i=?urG"$VDYQ$ OţK!˜1nmXzm{;\Y@EJ) HDMX3ZA)KbI@@8~j*YafGD[8FeS.0mN7,Q!4ʫr4& mȦ%Ӓv}; ɩ*Rlk? ɵ$; ij*>3/Us.~Ͻ5c$BmlwF~"'Cq1PeQ!k6gYZG\$*M uZ"6QDJϽ}#G|b>-lALHhXZ[Z \c>FJYO}?H4>+ PϺyH6rĺ5`9؉ ”*@T,,JlU]aE4k?;:ED+JԤHؑo_{DA/ߘ$3A꯿OںjtQ F !j7q9r'$;] P^PdEg} HW> Mmʿ.}]u&P'^n(3)qdTQ!Fhjny؇VBj{k[ZUXhD * PDwl@Ct[l %ʼnxw/_n9m{8L9u)Cv7tV~Qj:{KEֵZM)EQOP(Ak>g# 4vM4.@UAn4i6lVZ7{$EJDAP0s빢yw\c32}KRƘ( Yk:묞~\~ȱ dXaDXR)S}("eUq;z~"S$">d=@=rU Dd5#7!9@+DA67[ v.cePPs;GcjڎIM֚zl#U~wg1gΜokHDk?---.v\[=woAIX$$&4:PsJa}ʞ*DF'Ov=mE? 'q6u̙Zkk-3_|chɑ#ǦDTZ]ZiA)9g7 @1-,aqr4(RT(%KRHP^wlHoXW$"r 7ZΘ1@9cLȱo u>WICab@o)h6 G6||ϑ_TDN 1t8iҰp("%p{%Ҭy#= \f~sZkΖ?96 2Thn } f`7,J(JJHʼnnS`%K%9Uo|Q%k7@Hø ޳ԓG}@3e5=b;::ȷ-/0Wbí_œ$e~c}G{VtU%8Cp@,P@Ԁ. Xf~'XCIр7&.8i`pJGBR%r;d&\Bh܈o|[DY͢W8õٟ'MSg,92VtK uC8{fk|v "G&D7?Z"e 'OWVȦ8brRxƃF,b=mĉN|'2CU1eFu=٠"n@HYk߅B@?oooZ9i,Y(9kM%ziu(mų*PA etX;>(\ve]wW'.]PV!M)Q?k.%ezi!0ē~&Mz,<cĉֲn:/˙r7(FAK}w XКGvwvGBQ=RIsNVjH EoբtY`(hč2PJ/+ǒqݷJkCI*DV.uĩDXW{+KnR*sJ_[ 3r$$ƱPZ5P JAl AEWMJ0J*hD{s%.T8nRbQ+A혠ޢ4GZM(j`aԟ \_C*93DML Nhnn:#<ϟEz˽ @HP/}vaE41X Ml(2LcLqF8Jxo*0X~48BE`T@rͬZlYV~ioorT=G GojG!e$C:xK8-51RC)i%M֓jMtrV-bvDC h$BQx|Ck˃i޹J?@V -st$DtA>yssuZZZhwwYV}H& H#]AKc@0$ H!2H~H\sGֽƝHl*ΤԌ-G!pإvVd3O>}2Q`@ 1 l,0O^ "R#'FNz9[(7y%Qr)` < #N2{o*@\'0iXfUE ( ]E\NUrhᣩEkc-qPm*{_|6ކx5POZk?R*㦦<݌"pa"̫trgiC+cdJKk*) 0c3@8 l12"kш$ŐĂ(uɐq[%(MvIEH!`g@V>O{]T:PD ȑ8@烵-8RJJĉҬD!ՠke 7 i۔I'+_^I6WZ"6tVײNBr|xIi!(8RJS&I2k,OĖv[?( To/wVʆpȰ. .!JZVkW{hK/e85r4 i&ڞ(Jkzc-zdb I"iUED`3)Spb[9rۮZ`|s\|TҠjv} DD6?b%%ćЦ2iQ n G$բm:xa[j"C>{Uj@-;c<3"  B"H$|uyzC=sA ^g_D5h `ـFv_=thEqHq_=3?T$TTv\PZ`#X \|h@E[ ˲mBlS.K~(kJDO>$&F#eR>N;׼ ÌZ5G[b@b^@DAH`/=J GTaSB"&07(ߡābgH .tN "([U3)⸐6vUZ0Apq9F8onnj՚#.;q-@F $jšN;Em6J)u9bؔ]@!(hp=X7!1zKg D#6D&\Eq/h^. kA8{h8EibvꚃgFKʨha~,Ӟ4cT[[@i;@ ",;v23xz>֕IZ*Esj I DA.{2Ǡl \˚;-1N@M;]AYSW!Ir'Ï BPȰ(%tơ- &*k?;8 6Z""k10m8 F+qR>/<6Հx^> <wѥ"EDXDXT01E*8aiIi(aʩs4"u@ 1QȴKgU~&xw:ؠ cQ&t=[nmxpRք9 T@(+J))5O L%!MyQoihɜEmh8RICTeh"J)T< 3-F&s75;$ڲ6ncKmE@U~(mŇ'# a2tYZݗ mU&!7@:\Ƌ:rWsdb`bYmA ٷ֭[g|<4j(@oel( _?hNb3C "J4Y]!ۿY`)])g-`S=t4N`T> J9oj&b5ڰO#E(σRJkx`GQ _+$ BH@[ sV ĀUihbJJr_+.e9''*tlBu^4mRG 6,,K! $Xue;ʲ}fhV9D)Rf6Z n.{EB~U?M}>%C%|}K#īck}x M @SɞvwKorQ(7lZkLC '0Kfg& IDATE,YefG`9[1l)/ Ḧ|$ጛA {<<-AH&Nڬ%HB+E" ~myV C&`,X?U1hDg[VLpH~!BC"$$h)X!I6 @Df흆4 9hkO[N u&G  lbH hMՖfEz|J.]W"am鼤dMxoڴ7 o}mws"&eOM?5_z%.Lh=pp=W+4 @Y|@)#kFoٳgΝ!4|s_RQd2!оBP)TD?olM*6҉:QFG},Yȑܠ 55@.]ST ~]"Ξ={ԨQxy&J_>sڹsM-[J&%%%@,FƵk׆)'޽G uVZ!g:" 蜔dɗ^z_?lذƞ)bq9sэuǏ_[[kʻBXl!3\_-ihO hԐbos*z/_ Xo jh< 6R/C? "-]s1=ղ9?뮻 .[ e: ?Vc[L&Rxns~ꩧk`;$fdØ7Xbx_Θ1O_tRʨ[1Wi#Шڄ $% oHbpD=lhU6Z (%lh?T;A5~iU,+#/I#RK7kFqw@߾}o&j[nӧω'7e'/<++k̘123oݺsΆl;W^ye^/}ܸqpqǽ+ݺu#8wa#&LL&Vn~~ȑ##9@㦍5-X VUU c_~%\{Guyyy^^~3f~饗t…G}txPq<ZHǍg~Dw3|,d*G tw9 z_iT2yKV,0YkڛD{\ Tņxhq7x\S^  y1bySJ@q:hA̟F`q]7<`J*Ŵ}_t*"\4}b`uaNxts+hXfs?1 :1k!QliZ)ׯ\|GTH]&>RZ3%^%fV}|h=ph]v}#|XOFtYSʞk;vاOן6_x1cƘG*++Ǎg~{SN5 d2_tXWWgamȐ!999ͫZre$ׯ߇~s9s9+SL S>(lݺ5ЊjA!Dff^;qٳg'ԩS ̹nR/b4>}zNNO؏:tl/M"kЎfQhi|j_\ᘮ$E2AUi^)vBBTS i"մN0] ;;2H׺r^zٶu˲<[zuQQQvviyEЂ4o߾ L?%%%#Z_YYح[ꆆ]moذ$drGh~~_O64iҠAEb}JJJxB\r&@ >lX%ۣGUė\rw߭/((kDj]kYg̘1w\7\]&m0ˊߕ'+gf0ᡇ+ 馛6o{SL9ꨣ; f^bE= tI'CJ_ov3e˖)~_EyOv~iC2 :ug}n9tT*epsϵi3lӦ dee͛}' ꫯ[;w<23;` '%դL>kEfWm&.>)MZ+eNo'Rq=?\??Uק}t؁w}}}aaa '/\_jU׮]x7M/j-|'80 t7uR3ǝ=o|{ܿ]|&q=Ӻ7=bhğLٺv%]7{Ox^< 6Ron:o1qFXx_~p6e{;JRܥKÇ fZ`fϼ 6 8RJꫯWӭ[!C Bdɒ;i"ZܬoC-_xbxט}ӧO7#VWWgff{+V30M 555xG5~vw3?Cx?6#>o]\\|כ[\rI}߯1&Ϲy'c+S%rObfZToonb:Yi&M>D_;H1I/֒6ntaOMG;_52J3gf߾}:|;sF_#:tرcM| m#+SNrC=t 'qfGzk/b`_yGuСC n'M${h4ZXXضm[󊋋=ܥKu]Zɓ'եRZ6N3>p 7377א= 7 ,m 2cݾ}IDn&L~Gydffsssׯ_U:c(vuۍANmmYÍ7N81HL:|͚5O>d}})bBm 83"++<÷s1z9s&wA4C;Ptз@IH>nR&o_1U5IR^J)ܘf#|3'h^ѣ?3fM6-:ƌөS.#3gyOݻ駟G!5.,,;wO~*ϭ[N89}D"򚚚O<{ѧO?aIx&=P֞{X[o}GqꩧX2<F7yyyӦM3kZ{[nuuu[[[ۥKG~wȲO?G~A%HlV\fSgd}ngYrSX+?YGJ-߲c!)Rd#{ +{֍rW+dm4˗/7UW]աC@x}'Olr/ |Ϋ"aq[(mF-*,,1cFtbjkk322&Nv5jTaagȑ'|rС|' 㧞zԩS'L0|Amٲ%lUٳGVq}Qc7/wǎpBr̙eeeH"#9##. Yf1s"2a+W 㻶l.` .[n1jSNٻL[e9Kjg68PKb fNO zŕaÆown{l"##㥗^29R:(`b~j*#1h0wm}i gee[]6<\xر{wq};v,X@kcHw%̛7VXѱcG/q̘16m2J>##c˖-?|, )e"o_ò~28[}0<NɈ̹zb6dVF]:lڰ&heldž 'N $[\4z;u4a„3e_#C/-[;#G {qF)b(zX5e&裏v%~999f>/䒻k޼yoܹs͜Rl۶/~qOݼu]N^'&`BxdK,NtȒ) &6([hC41j*nDDmCJB<1?q as#(ǡ,TD{6>Fn4m{_Ùlh}ф M6gΜX,f;ϬtO, y JG9眰GMƎ{ytMiJki@/[ IDAT5ݚQhlP:mp )J, gg8p` :Y wsIFb\[n7w deeuB$/߄ϵ(p/Cuɓ'=r<5dȐyM6mڴi\Ÿjsu=^{5\SRRRTTTQQa^z`2eJ8!x-rcǎ#FM#GPFq '<М(0GfHl R|Ly-±ybbԩ_|E<: ,ԩӧ~8{;8n4{ꩧV^ݡC?yN:xcǎ5n(ڵk7n?.yO,`PA @ƏIN ۶ }ַr2)b ~=vlmem"I:1N.ܰ_J2vp)hn&-ʄT ӀpM3V 9X3Oٶ 6;0pAu`-xtm͝;*ãk PI72hsy/ِRڳtiC1E1)-lĈ@~VBe@\PеYESZzuN|.ݻw޽[ݻw^= =zܹ1? y ![q뭷yر㢋.2kq…a1D|Wf͚e^Mnݺu떕e}H<ڵk|M<73,kŊ555B{lĉݺu/2}oΝ\skFJy 7/Ѭ71kjjLvlT*2Bq^'w{ޙg9cƌz<\| .4 S۷ ƍ׳g;s֭&o֬Y- "ȯ몪*DܺuUW]H$< 7Q 7%r 33s-jt P/?..!%)(,1*)!ڿs&Z%<Ԭ|_L%4|kl-2AoHJ)f6!vKS3'2^JWn_uDLurss "Ny}: 2|&U12[lY>}"H6mN9r"2!yyyC 1Ĭt܉/[>̤5+&ͤSM.ҚUlؘ Ni婤|H]YMcݔN6Zϫg۾u*Ul59)$/UpvSIr5<> da4LY)̤28cG5iOL쥒D>ݑesu5~wk׆o~f߰aRWWZZb2ğ&DQGiWXabZy-))ٶm[yA0ϵkӦ`=̜9N _yꩧڷo{Kn^e?ڸqc@f^zueeemhhؼysЃYT[nL$V_7 !_u%;}@ƍÌk\LWwU&!m"2AFD.A]-԰_|Ѵ1 88{rk4|իWS$p%@Q`W^-jlbaa![w?|AAh,I6`H=l- UvTybs^Nie:ǚ`qh-}@+._b2#[u ϬC6%X"uTkOeYY?h~ I0f`צ/h_aƝiɝI`Tј "a"X,[ӝw~{1a &aG u<3]^Aرtʕ&jH) )55=pԀP o3`+n{n-o3gqu͚5fͺ108HvڦftATذۊ+gt{=.@%B8=|`G)% 4Z K4"hf+uma&X V鳗$$|̅/Å cΙ YM!SZ~4q) m1sNWO3gFM3YH,S$2p#Bd@ [rx-\[gW{}p! {y F6y\Z3=o$lӦMjUU8C6lqo{Ϟ;?baH$=8?(9ek^"N KD (eL=,@ n:Z:6 $d.=}}@~vnc~" 2IC+6Iʟ9C s9"){sƌ:q'NJ HJr73,t8k 0{2l`l[i-Ѥ^@ _rX1jc*8iTX,`R(dk߇S@)'JQEFX jf I " ($@U@B5 =\OfPg?@¤Ae:psA=c/Ab! F]!$ qx>ZX O(Ɣl3]}['vs1:-q.D5(eY(@浧! IȒԨk$&m/j)@ zk;|% i1 maTI*??/va3y |W"Č]&ҧaS@=:!Rlg_!ርRtsbrDL۹SvFf)*ayJo4: @C%sUNE(Dp n-'0 D*LFy~s$px풿Qkk $$bf)< ؊S^1OJV:j5^Bz:"XCdX ~KC=ۅ ­֚M8 +gm;Q\ܛa$7o AonH`$A#4{6„'09cw@ P2KDD ,@LgX{M$&X&Ii?9Ik% tE`ӦM#FU#FFK8v]k!  nC>imls72 MV'uZPR:[ 1׻{`K!s Q_ˉ`H3iHCkdܙS.R0kQ-$mτ 5Pr5/K@3wZ#³Yfر|=UEQ.&Dz=-LkbAu! [l tt‚-PSH3:.3ĈE+ }JdG6Q>! iY>IP@"9'z 5X)C@)ӐVDd۶8O>d.]M|9섰,G#SdQ~o`2{>:{P0d(A0akh՝ S k [hPS[8H57.]DHd!BiHCk ]zguVsV&tdemS]F)-YNftϨt%U7Fnۜ*4>(9UGt-$'ׯ^Cc׈צ@juug jKI= Q>iHC+)ePTq_|_~&u6RP ۖnR(:,[!-;d9h@G۩Y$ ꋧ! xB vީz’Y/3zRoߐ /R챶9Ͷ! ((g_lم^hr˖YVdWp$bFh@ =S-*a%,)rMiwZ/' 1 R Pl7;ض ;U|PL5Ii%"`!A.ҐVAي !رc?)S8$dFVeG>X A3dv &37h7`[h_1%[hy1n9 -m1}.aSo+ FF&爻5j9rJm%cM!l|_2CICA0\%%9( /~tlP{or΁=׷sBN%@-M9MrDAA3oܸ: dVmΛM@’l`#ڻ:Â}}ve1",)k_F_ҒbPKJ"RVG4 0*Y@3%G7πY*Iaڌ,lek `0#+ fi9I`}TU fB(@(@`@ h!3h B VCrXed LIC$$m loD#fv9H,M"a8RC*;{Iz4LFQ2^#eBc#؁ósa9A!Ǖkr~4 (ICV  9A#gWC2CA@)v̜ۮcuEiQQM63{YXmmަ ZZ&$fIQ@,Cla@ 9MH{& ]S)R@,jmk)͡l@gGEs l1[JnfssЌ,F  h͊}Mk [ł4o|46f  MGk,$}䠭QP36ۆG4퉩ɩ-@b6N~̀"riAqaBDB)-9:xeķ77~oh p@XJ er41$.HrX2dj.,@!Gós߶s&G5,~q@*CHHЌ33F r 9Ⱦ/.[hB{Xy~GB aG:d7_b$dA Pa@J]L> eʐq;"FAdLÛj'A(XF$IH$ %az4*3D@@A Ƭ(:"̱?Y "2 @V!M.& 9Y BfhFnoȁCE9F,1NDhѷdwJ4I;HB%knv55 @( F`$TL٬2u:rs0;G9MrAB׍ZDcvq@46;ÆB H"aQܽL?3v/-ijS~&D@C)lnv& Q9ȰSzL @_"A3hA6^e`h SDA[ f.I"J (D' <`!X"#3#2\V9}7Bܽ@hQ I&! F` ɸr.A0J]Xf l3HdDf`M7,X9BzegGlWYIKgD|z9q<FB`@`F@ XL)}㯯=((ACG zor~010hqUd,Z)r$\ft)s YM=,ȑT[s@(Md8bҩN۷m4fYqrȵm`DQIl$Y9_ 9<<`iniLMM#H@d(0)?ǒ1?ᯃMyi':J5332B® ȈH@D$D@&](IK,@K )v!A6;D(L f4zW(@ BKM&XDj.M@w?A!'YQm- H([CTk;*X& BFVϱ""щF=3w.HK EL!9M_?ԯ9@9_e | ;goȁÈlab~\Ės1BS@h,9U߂9lKH J ;}o)dplCƎAR(PhPI@>H=P i9{q`ޜ `Dk2.vk:N9aJ!=u/XH6~|`-y;ڞ >VELn,JZ-R.dS&Hy /xQE|eUg,,BJ͒ whUTv,"k{kYRȌF.}^mF[j.lj<|[$ ,bfB3n)e[>Zo9@9)+Vx!n?˿M*GB"%-,[QWO+>0(}[SJ)%m-+r.3 ;"J>+cƽ#ώPdm/{|:r~@bsr&};~LߞD{G);1{'PXֽn!z7䌾ÎK Zzz݉s3#a_ȩhe#X#bN"YϨQߎU:ioo(dyGOYMO\.H{I'R+YJE>B#k/oJ!g%'2|vAh?2iǺ6ny|؟ֿNnj3 hD=Oo9Fc͆Mȹ|FvޑcWhUYm;^sݮ,;GE=Z!⦪'gwe#ϭ7}2ĺ6~๧,^{'/}#g?h7A7oݱgC&ksZ"dCRݑ/o=9nrjcn\v%iOIDATݹ@[eM=cED;}I$lԶt3 \_o_i!+>~: nR%eGmksv9όPfm=Ʋ:߷so{fc0<cȘ[)AV`"ɱ_RH6DvLA"P8 0 c'3 yZ+[]U]]5}>ԥz{wُ/<{]څg? tx՟CKl~Cdz?b(߸ R l{7~O|;t۹ Y(ou'qnco|oQg_ҽt '_{gJxp8.6N.ȕb>0ԅ$rbX@9( 6ӳ'ٹ{ݹ0aF)0*RZ!@THs8qð*P 0C~y4;&db1DnCLeؘfl55OwpV4ipdw:8)49^%0)e4ЈmNxq<N1±!f+8366ép^f'7rKp8l.F=wLȔ*qsoo1t혦~c0`c tw'_c"t3BפfҔ9w8t4D={:|_.^>fiؘ^vNښQu'WqY99;IVp2á:8V8䴵 βj*ۦp#6N'_>&+8f;Y2T ItpagOE(1Wpmssαm쨤Hɣ_Ȭ=VqjckQ& 7omkcA= C;uvx\p?R٘.V;g={#-o 6nGD--ew!XNHZ"<8U#V&I8{=N*,œzCha gdBhW9"Ys*#pTQp6RvY|ŒV)^տ-A'8M,X!,f< ʝIc^ZTtًvZ uyCԚˠ5L $E pcqcErN*qw詉P`1,)RNpb`C 3XBŤIŋ#V;I 7GE-Q8/4 Nɢ+՝dֳs%L{}>0uڊvŤ7ss]S/]aarBZuCݡ!.ᠡ~Ԭ*3I`37m h9{CE8E[So J^[]ACR3S gQNV 0zNe.L{6M1%"h(a~ ;qV\ x;6'yssCxV%}3K_ۍwCeXmlrF?8:kyNhMn{k*$Asr V5B2B*eHE6W/YltLI[ЬJv?>1¬*jHhj5LCH VA='HGD R>՝MI+KC0e32h0rm\PT8Rt9j8'*٠ARry;bg+E!/NMA#Ñ Qcp"pr:ޤƔ>uK$SįϿc~QPsI](>.+8^}lNy5$LK [2""Z*^8d ‰@&8q[C #\7 g8NmjZ|- GӾH8LL1@ns\j$)ݺ `I C'GIRap 8]8z0h?# GN.,ׯ,b~C8tr#%8D/&هw#뤻 ix8w9r OL/ hmdՒ1ù z~(bvԨ]A]o<4iQk{%|q?U(?{f}1'D+Yf+aߣnUP諈eʨPG\9U(\ÇZ~,ɳ +gt@:򉍅!uG9?cp\d+QG݂3 `? B*Xvu,ol7OlX?$kxGX.rgߠʨgGU=O/&M>~'8@yǟ! m ,ɸ:q[p&=o #4BV'=<;wƉ !(p5tD܋)4 5i<<7H`cK6j Y2!$-/olwŠ>2 NFk(+|-A$JD? `d``NJcoZ{tr`6E`!:i*@HEVNĬqwBrͨ5|R bIj}!hȐ:W%r-m?֚ԫG~&u{{*;鏼g΅rRzDpyˎX^5tuj{:>Js US`wl,A5!k_6[~LE@ vGlBu[?KOR(jŨ5 to=suKY6>_g(G$|ϕm p*Nm- $Scu̝GsC8ez}c!ϫFۚ:5VA w1 w[~*C7țOltxp5~c@fog #OqΨQw]@?V<)TDCD`[!@GZuK+i"YjX:@:f9 T R0Gdc5}TKy̥Rlw_ʍ 4/߇#j%2/A3Gz2*Y, pQ~߲ysU.wH i]#)P 4VB2GۃHC+yuYQy|ypY_W<.7Us2D"?X(`ωriR_zSmmb\{3|Zvsљ$:+ONdN$?i3ݡO:T0ai1v[G[d|E"b\So|%TNp9/R2rIENDB`stimfit-0.17.1/doc/sphinx/manual/images/peak.png000066400000000000000000002371601517235503400215230ustar00rootroot00000000000000PNG  IHDR ^sRGB pHYs.#.#x?vtIME)'+;: IDATx{ř?yϙ pD[P$$]LƘ5f/&1qYWc~WѨ_/7\]A xCP̜sR?jh 9 C9U}z/$"U'=ŏ  @LPPAE Jиjͯqf"eMr۾GqFH2G3pƔ~ !KP1 zsSDR;z'` wG *H؀ $xK C8KCݲܮYG&R("NH712HOC YPA-bE5`g T 4DiXMHQP*9J.tt]ɪA؄ & 0C^PA)Br`|5rf&cZ*o-:b *装gTi2PF AY@TFdmV*)[r\5B.t1H7F4ʘ3'z3{)P zbN`]!4 50#-EB4gIPJbH?G(,v/w?hի\F0LVP.Դ$&uM {lfH@ q- fIJ;{/Z*B e\LޫF$,Vbg#p@ 8p swOg6S }b&,U*bl~aIy} k9erpqT*頇ԫVrhZ&l!Q"h mRPbjR"(=KњA-meȈm(HyY]0vB`fق@WꗈĨFDԤGRNk'd44HP5ÄZ-m&tzKe06@065I*Uڌ%I_{!PNjJ)9'AQX6yEfUT)m$Mj͟Z %rKL A-2ԐuAZSİc dFc D1 u%+ *t#]4!bv맛}F"g[a t2QHOޘjWj14J/*DL)"bԀwj$`w"5xܧ[194o%X|`u3*([FtR%|aZ0l3I!3woǚ`1@Xă Ū@ c+WDg)2q$T0GZEI"5.fԨִj)~. Բ3)2UP[Lޛd)9uG r  BEs E뒮i#D9%ՆtAho%-IZ?oZ6@L-a1 jJtNvh A"0QCf "i F!ޓd h %QL"Ermkw8ӵf+"` e!%_SԣsT]PF@@]PI$cQ e L,>"H籽q`@ DDL1 'Ss⣐3+hR'MP$`rĻP~pM! zaӋ6) 5J#WCxdUe6֩ZdyGM h\|Y;A=DА K`7{PD)2G6BRZ9L_rE@T) i?`A<\l0e1UvZ ET8(.U{yusJv%[} ƤC1!!8c!.= c&A 涓3Yp D$Fj'[c&cu`#jf)B j4Ȫ&gE%*nFkЛв7D |$^W*6& 8:j$ @k@inplI+h$kR& lq1 jHJpz˄Bp U(Mr@ՅC ' fNB XHλ% 2fDXQltaXpv˯,3]q@qT̶`)orVF7dd @; R J )b4 -$ bL p[@xٚnC0"##BՇ( -.On!#+!)5咒XrZE2J0{Nhb}go0D0(\# dpQTJjI+b"RDԻUh4o!(;xb# Ҳ umSP7)$JZu0.)krJK 5S?껀 qiaMJP?7SlC>%B[`4%]CAz!A uY2zT ڈ $)A OALULQ ,"5  j@6Y@A,80* 2WjTS_ar[H LX3a+n .<2sDSnS7 \V(h+ Q*8 /b, 3',54o#)jYԞyu"iYRT+1WDGxzuKKltS oSp~,I@"4)%59f ΃we]Z3sYʒ;`@ \m;bEѯ`OG'3balJr]f&ʩ9#QiΊiQPRXBt2-KtȖzT;V-iH. 9d-ъ UEDZeYp૷]Hg)7|A D(/l QG%lEլP@M[zS2 )3|+TڦM5%j)mrmFAA ND7SD_.U4Mׯ_?|p\K]^~ey~1DxZ}lذaŬ@FX yEQP6y]"QYҌIhYoP7q8( ,wňQJA9 2Ud *mR J",R ݎXjHP>JlbdDD -{ĉ~iD===~} /|yRYt=SLw#NBUA5 ZxA P:w;h̺ooʂS D;^DLk+5 T;@|DIuA[ߕ@ETr,XzsdwX9R̟?GDRZi%u [eayv^r%RZk"Zhرcwq++6lظq?7g}8>#MSO?~s?~׾5d+s1"dɒsFQt嗿k֬=u\kkȑ#g͚%"?O?H97uԣ:78qI&O<`"o~y뭷ֿoEdŊ'|rWWWYY+gdޯ~i,%3$K8my;o.:3 :Ĥr"EBʒYV~AҊoMmR27nn]wuذa"2vd'?9C8?< ~g뮻zt/}3yL{=??3fܸqRjĈe9sg?K~衇.R˿̙3gҥ}o0k̛7?K?׿ukkk K5ҝ2* Y;1D;<>tЕ`N0f5:e\v ҒB7gNeIHH61"!!Sz/ʭ'tƙRd̬woN{s/^nݺ^c.JJ%Ovz;;;ooO8V8!p'^tEZmƌ{|Ma&"k֬;96wuu>guVsssi> RþJZ@:MRtx`K :IIXj!T e T_.iFtG(cmu5njj [5&Mλf.ti3=zwsZܻ;w{"\.{p衇q^7iZ'I.]Rt>}iFG? '0o޼N t"Eѣ>;\z{N5P/RB6 JYA  @&JBٵ/|QD ]Fk*ðV˅mu?6`薰۸H)"q:hoo>|x;mС841?́7qn=O477755577{Q "t9s`CvGy Qg|ޯ̛7T*`Ń Ok`+V|ӧO/~|rQGum]'L0y^x_jR9s^ӟ9vafͺ馛7x 7pm7nɒ%/z_o?,뮛={oWjmm2d!rW<K.;[ZZN;4f͛k=c]]]3gZ5?c=hѢviԩu]{wW2mP/W5 .8oWޙۄXPa׾.¶4 C 9p19kj2mHDt 0j5M" 䍱l"d. ^ h7_wGP#/nT!ѩ9w`佸Ǐn)r;SEmϭcyڵfywe펎{nv?~|nï˳nva]~O?ĉG'@ϟvڏ---y)G}tҤI#GjgϞ0aȑ#~߇kx3&s?hd?%c2],msXKBpR dgkj6^w҇ $IGJ#4@L j<?Ô5jO|]S6m-3pTȱlhJ;fg2y_;kmOq*oss_ypz}'wƗ(q6b֌f,&Xi -TmBN dm7N)c؇+UA4$'Lc 1qD$L@_ Itd1 䋀R]U-z^xa{{{L 6=+^ބ$I(ۗ,YjժO?}„  i8@k@-gC FBNA(f&>l-+IvI!i[ eѢ)1A!0pk3 ]*VUimi* Ҫ/!NҞ%&%ő =CNL$on}zf ðOeRt=MGyn!xƎyS_ܬ@ IDAT|W{SN `=|5@;˪ vpGZ$1E!#o- D:WӠ6)(ؤ .|f=2kaǫ.Qq&Y0?LAmTidԦw?vdd3cx쑭&@S|w-ĂC)&}.379w]g7{58rΡsYק?'kc;qe-D|rc \o4Xt|r.˽/X@)$ ;eTY n)8E믿obŊܐpniZx1C qvX@LC@"ͮVB6$ a .!]EVvɪ@bj\MV&}~dA `a7h_A1?IcmC 9c>l3Lg8oOӣG~7bzM75ꢋ.;vGMv"fرӱ̚׼9眳_3f+ώ5j\s ӧNcƌK hv/}nv7)2eʔSO=1'Isw=[ӨQӅi.7c.ꫯo^T{.h=0awns5WIԛE4S}SE83ד,==ũKlK~ jJ,M[7,q˦LjͲ-5>pEJqZǙ,"Zmw?~+DW^Zq[?={l/]vРA^z?g.y/Z %>O}S}ׄ |i|ׯ7z?O;k֬ɓ0k_v}p7>z{woַY/|Ӛ:6K;f5V`+0JE AKVEzM\mTaaLf\slA'mo |N;cΝ; 7߼zG<=-=3gμ}71y]>̃'tJrM7w_Zj^5}ZA; q\p',Xpi=3f}_C ] i[Re =apԈ6`RwKS}}|tk6805VAs9eYQ٩Җ!h>mUrNG,/IPjpv[EÆ j? /gzܣ-G2-jmm2e<5x |O?:@fe]\s͎;8eʔˇ{K@8N~`UcF; DZTqI4MQbD/<4hU Hm}>AqJ%[Ҧ H̪'=`P ܺh0nͪZmWX,Δp.Q<4j6DZ,>dȐ@eazMӴR477wxSOOԩS-[6k֬QF=#e}yWַoc8q0 q̭ f{`ְtO{7~.[n~uwwתֺV(`] L_я:ꨗ_~+뮻N>/~1YnݡK}(hc}/\TEEqV"АYR($WcDIaXwiL=xf`,U϶Z2泾q#wԪ=\??XZnޜVl@AD ކw|=hkks{x .`'`k׮Kz8(d}9䐩S|'tܹs ȣ蠃/r.׭W^=bĈ<|LO_Ǘ?я.'8c977fHБ!V%K+?{㷏SJ 2o 57oSK-ډ"@S?wd. 6S8]sY~,}ݞP}WIFڼ[?Z撊?.ITl%KtwF#IjNb1g8aǒ9k9+v)%Iyf^~{.q,"#F袋#F8蠃rwqǧ?icLgg,]tGydw-"GϗߢֽkjON{[J%'瞿u 6k"+#FrN;c ,[ 3K.7n\ 9E1Yv7ok7,'Y,~}otEV]'n[϶[,[o9vUd\I%맵}8dͷsoOmݥ>-t>tf?f$"צ|8|mD࿏o~*"=:Y'YIg,Թq#/T>yu&Xێrj77ryҤIgy1c.8 ,s=K{}!WrgNObʔ)~=T1) ykIfʒ8/.\0>}mhiiɏf[s'M>ߵ;g{ p'9)K_LIl\~Wr,JI(8_Mk/_jլY(DwB9E!Ce0rF761~vs+rJ玻fw&9}rݪSUY;[e@q2T_Rty3 9QE")>@3;c{o/aC?dž~}„ Zk'L2Ϸ5jv'NpyС&MڐM&I[ña!Y$sn=3f#|G}jӓN#"()?<0*+湁UR!=ÆCޝҳ6 '̆sm\ѳ~zժUVQoc@O>d`ҧ_4a缫^Ȳl޼y+WD]%ʧPAλ 0IzTygZfT.ٳ= 4YEV*Elqo=/[KD>O0A:5ktvvzIˑ^x}驚T`jBiUV8h\D{駍1~$VQ*S$CP8lٲJٹd&;`IXӷ3%l_No|1HC՘L>W8wB9*R))j62C0bf(XiԫΟ?ܹ^ #ӥ^\D[KR"&1:z/ Ԕ)Snvox'?Ic̤In>8_؟gSS%GydҥΟA @SN9%SO=51gyfEqoZ[*27 .O<_rTgFQjyǜx__'NUW]%o*#̙3eCQI͸IA'?+;0"dɒ{.MS/(f̘km 4bW/|'H)Ct =üd{#,f"Jj(O AҼy㏟:uOӗ^z)^sΣ<7mMmh繥njS$;d"Ni"L,j$ޝ2)Cq7""ys?駟g SO=e W*p~z3{ﱰ3% D; IC$邖%.T6F6եC(6'vI@EA/_cԛvq %fۺWXn/}\1A+ =+IB\vmttt-Y[, WJ-]7J,RTon:9syDf7sIW >3mU~u6y&uEX5t٣O/\za}W>er 0z:zgeD{Elݍ/ِnmt g|;\su]{W=nt} bn,n-IMͼt3ܷmֳqfs RRRcy6:bw̜Ϳ;^liFowYJQ;WޖOOkձ+@ u&PS"lGCл~f8YӮűm.\Rww>t94(Jt(`RTĉM)s\ jPleM⡫u#X',K:qba.I&IxA˒4Y "+]@NrK5v2iOK"ιrc +2 {3ck//VĐdРh>r [V8$[U@ct !P{mں0 {?@\ 12jRb 闯#jJ jL),2κaXA, 1"NĊd,1K*$~g]gBSXAŐX$qBKH H2`Qow޷;mh?aY"5 g̶O28KE$Ie Rge$"Rm2P"JK D~H}DH!VB` >C@@DLY"a5cXRǩ5B]V;X2$BIqJj]LB=iRaNRl$8 s"q(q:IX'lX+.KYXĹL`ɿtDgzTpUӔ4̒.%TqaT$Auy^RL4""1Ƕ&q? j|oMlEL & ǎRDҚUW!% >֕LAŃ%6 o+:AWYQb>tBPSY5u(Z\ZPe~ZP"&Ew 9I/M/ D@umop̐CgΜADeA,_uUW|7ڊJj^P` ϙ5λ^VX@20ZSLd*qee;Rj&p ~o7b$+_}_Z`?:lIUе9ȣM~!"ҦR5=a4ȋ?P7EJc(mR `7jUZZ3/XV,_8+9\EWɇ|"(5t( ulYC s oa%RU*q&"Y_ qGUXf*sMޅg$0v|9tIy: R9v9H C 3QI4 l8̮,Ћ^y7R`'֦U. i zs]E(}f,1 % k r7!mFBp(G}L @ H@^Ӿo$-C%Q"Ҁ!P 3vU;Ɯs'л^ "*k騈 0"JU^R`  CI @BBeUc^{<{}s{9h!wN}!J<GC69H#ѷ0bh(H{AجHis{)&IR@:3k:ꨉ' JicW+ @$A6ڇB+dފEBX E37jmbrݍeij@efFV꭭MZ4aB#K%X"BтxTfn}l|:6ll*DqNk*4:CY3Bh^|Dov#f2Gv+R%nSFg8ދXC&m Yg8~6lkn 0)VQdECGBr!j" |P Pf>DNw ͢'cʉb  M)#/Fn~-HX"bрb r.H-,D^6`M`@'/ܸx` D$Gw>ɍ=p"o?b/ ĈW\9y FHAGG"gŮD>bϔx!{bGam0DY+6YfJ@։V!Q$HS0q8 D"0P E "^%GO"8 ^\s5]Mƀ B@L6/4"P|ۧwo;-qꕌWHH QB^ȋ34N}0+k4B+KF)IDX[J#&-%@^, x@/}V3gB|F";VmXi\YVι7-j,|ZwvN4QA)I 6Yٳ&B߆Kj(pq׆ N2%sŋx+QGZ% CsfsT"~!O>3~S:<6={H1Eɪ1S^~4, |`*3=)ǎm-[]RQ ÙR'ұ <4Rd', 8Oޓ<r-wNB4X@"M )e3O剤|!Q4Z<{glf#J p(<6lrD}j$3G)(ς'C_ p_ߨG Pؿ9^"A,?rPєFNJi2/7xH( kk/[{IOxE&4so喑//V439|[4q@`NM1s_YH%_^q]J )"x'"׻b1XC ;&rp¬C ;L'zZF[ @?1&fy@œBlXp;l@~! 'b%j4Jc #-nfpxڏNrʩgwOrcSU[6XU7 twz7vU7<`C|_4sH+V[ȏnE1=ct+E"AISg4uQ{ xG&n1k5`2hM-MMfLio-h[Yzbl*zP:o?ݚJ6YH4+x펐xӼXG}gI -X<4@'})?pI sۭ:yF. 0Ri?6546}/jkY}cV;lU >~}7׎|yq\?eu糀袋.\dqTOLAi<{-+q<90<Ďl1iYgqOpq dY>~&a9|Gq}$xބ`< ~:.bAB?M7ݔ7-ME: I|v;Y#(x:^([._rZ:P\VaU}{Mێ .$:@ }~G&X4D^Y #<6$G?;žسS <^ϹeE2A&~>h&cH ;,H&\ a!XlnlnIyln)M_>8/v|tBpD~s'"o@O2zg!  G(?ZޮzW*LZ 'b5Bp$}TLbL-8vl-IFpDdAB fR}|b] |zPeB, 9MA}XS (zEoX7r'H+$]7JT ,wd-Y2RY^ p>h"h ᄏRRi;ɊrBD`<Dqfئw> Fbؗ]vy,.\B 6RV|zqux岥 < d`|Wb64N7y 1"|ZYҡqmd 楍ŋ|Wgq x5J<JQTjBJ2?S?#MAhdp)L1) /JË-%a{gjji{}_'M`N\"R V*3c'OXK_0*o:MxlcZ)YȒy # %>缳{.Z,PJe`Eևj]vf'"MD!ǿwѱ _Y7/#$>Yam\>W0훏\ux+M{j$hh̾7RAwwW~Q~{lĉOXS _U 3r@sTTy [ho:կ~w 9I_vIFF"کM-[ k\1E|qxF뙧]b )*ci%e&Ͻ N;Ơ@)]O~;nX>˩'rqΜG?Ywx{n:r LHHG'dAWFp7MBll6i2Z<28Pj>u t=;ͧ?`@47W. khnmqoFz4KVC4lK `c{} tI"͓gk6N(w i=R*Q)q$I[__Wx) μVȄe&/W>͞>+֌mkhmJLA)? GM].,Y«/Iu޹ᄈ[o b@Ng2ؗ:caÅDE HE{ɒSJibVJ IX؊3,vɓgfb̀>MFҙ7B Mh`U5P|H5*T (pZY :L̢S9Q{9D1D* H +g.)m26# NdG"R6ˮ:/Qp FNf58bBB>!V%+i=t> ؐL987BU$V+98/EDD+ { fD <Siֆ=ߺTħ'lܮ;nJpA p:q>pǶEs֒}AQiY_c$~]6g45@ē/U ɥ,i@Kͦnj*Y521.ŅOvD=@oytS<کs\k5+2}*`+WIoZ,ְ^{Ҿ^ @ |*}Ͻ za!4>$Z&̚}wd~/kg6|g&:R WTV4x?BdŘ* 'mH.c_{0]OYJێ07[]u/|-Ny̫}vBWa㑷砌8"~ʩj[">'Zla'm悇aPx]ք @#n1gsO,kYEPi\z&+R3-wPqh\[kך+~an{.8 x%ZcUnoN]>ih쿏zeC{ݾݯ}bv3zo?aۘλguMV3B 0l 9_3|';;٬kJS ڑbn-x%xqom-~/RYeL{owkȸIc$Ye6(I&W$M µ^?4447 pťWBHO_Mszm$5d=?9PKx4~Hd[Z}5#$cT%.M{åhX*f(ł%!!0 |dI_iwZiV-h-t} Ֆr>7[F5hy_ԁg>c P'vvǕ6ʰ쑕w5w%Ei LHSXI4-pŊ1ƿ Nا˘?g./䣷P]+fsp$a p29_8y{.GlwUVKGV>ܝN $c qI<#̌\j%.mUW{Vd\`$*JjkRlo.5tx-6YNk>z{Wk+NLQ.8oOO[2Cmit6L&<Ԓ~U;䝧mcC<Ͷe;0fOetutM7|Ajp2Wym,j_=uMl|n];Ko=KYƵk7^7fBZWϨ ˓]B&&}Sp}PՈ;_8_ T.H]]Y??k5ac[C}آEla=m32E{n1PqR׭& {J-~hzq s:Gyw٪%6v[ +}]z(UD9WA}~{XkʼnI~NXh68e|.:slj_^sE ~þ>!f7u"[W¤m=ƌm.x}}nCbͺ]PgSqSP77Z} %&x7}inC ˗z1k*N>{MeQ!_寮\ۻW7^1uq`DZ+&Kmm6ٗ^3@y(0֛Z@3??<쟕@@Λǵu8wġ""08AG}c-'#І&~})VhݢcOP(r93 (bV_;d~OxH뀀դ­.|Y?K}zyr*DKVhǭ>tT}=v\³^xgE)# LyguWyNy3j nخhlM8,Ãn?M6{ :|j5I\ozحv*n}u]נ0a+Po7ZZdA[sYR^%q5slw5Xuݺ[_qꮫẻھ7.|KqVm5_>꽮 vV{M3W} XU[_q뮫{zi$RzVXuwVIC=.r~*u}׬mpj9pFjpJHc'7ŹVIm6]5\dz4I#[Rd(vuUu+n}ív׸^[y7q~1_ ~0wztn%GYR8ZE{&h# IDATe= u7H{IOoSNl{WO➺p}2ㆫx(Y=ݓIıxy .uNw7Y+NOCݮwǩpu蒋LƍmgMl'",|yӍvmz2{_[3^2뿾kJ U$6 .e肟< c "2O:cL{C䭥eopoEfy\aI2(:weށ.]ɻg]tzK..I*@(n;䐃E{=yq^Ծr~u1mt5,Zu/~Zl)H6$I :&nl[0qUsxt 9~=9(TL2,IQ\q&oyty'%p@FI&c6Cű0y}~3u~Qc-8ͅ5YV9ǟP*&P -l.Id|bu (?k4jxuwZADB 3ǡV֡'d6YJ AM'D4%cs/mg[j.nAm2$?9j^uUt*z),KmA= pP.^tJncs?Ni q X J\oƙb|ATq]>?<唓ObvN4q&\*mk%%Mf-O>u=ZS Ogn@Aʡf,E٦=7,DeڝبXUz.;7_uEm?Z.R+A.'Yi- 8F:G1 ۳ G@r/B̸H7YsM*5Hudžl!V[%SBGƖ#˜qa YtHE4q1Ae Z[ex+#͜5TAg:(ј:vLQ 3hϙ֨Me1 B)hiL#6t(kj:ԙ/i|- AGdEQ`VQ% $!Nk%o36f7g(8Ǐj3Hihw`t)4nD-ɍXv,ڀSDG c";ٔ(SG% )F]&4qE=h1 u FvIVj3JFsق<t gJP?t'7}SiBK?6}wV}h]Qλ7abfUG_RTWKUVrk WEe4ȒUAd+"ȖU+~MK4ͼceš+.* pZpm@  jGqDE"O_TB;LF-/;滛h$$baafÛsg=ZpHT*jw{5KQ=O0cW{Iq HEdLxe@ .j)?K.T 7~\w UplF!=]-R@J9긒)[K-Y"aPTlt36U E|&3 1,c=>H4L#r`wo]?pFqʘCȓϻ8 h ;&+g:4L#schhZ׽qÆj5t~|G-z YHh U9#"a+;6+(&A}=*M;nC$-0cjiK՞s~Z)'e.15dƶ~4}=+D,샢7\qȖjgEǞMCT=e @R/tD%'{u`SUޱ Q4*j$RQpʑq؂`A]-ϜJtHΧFAKa{%'PZ9!'\̓ #/Q5 ƑĞHބ)XIӒak8Si:L ;Ki ،MFڑΈ% ;GשRbChC &RYC8ƿ2% wda证%)8L~p\H>v2 `"#0aGQ5GdI[hO: Y{!(2y?83mC+EhE MX@kR>P,0P̡j|KK9+--#%B>M= 32 a؂Ԡ( \RTAq=3 Z3 yW;Ywߩ"@۬Q@T(> D 1oنUmکSP}-t뽅q YtVP иTXYAEڲΦ4ТD(;eK0ҫ@#m wa,*Sˁ3BC6FJ U|~ܬ5#y#n wPh!,gDAPW@77FBћFGtsC@\ @F1;VlV,z%i8!Wི꽢'6゚j? HskIE) wJ;W˫6ڠٱ;f#qwVXIq͓$QQt $/$M.u)Oxν X(PP.F%8ȪNv:U Lr*sH<\ѧ;PY M~t`3@`ZDQ.~{Lв뮓[[Wu*`0X '֓W#ddJgV1w頃1)dٲb lCԋpw>N)#M㑖|􊢨f.r0T!1yEuP"ZRzr)Z(Bix@b/?<*ĮYiFuҨq(gH kPZ)H2&.@s#wQhDWد"҅HX@{"Z4"LڐVd &y&BYi1iҤh0HY Dd PiD!23Y"1ps MLkFdYH1shhP"VRB&2BL)D (  (fG^B(P) )pR W_9圢{%dY拐6{0_zR&y *^H@b4X( 1 x5 2rucO U&ƛEZ^9o~} Ӱ,@+8ʋ1 Eix T7vϞ5^B"1yyU*~y)G kCAhn-ŎΎrssl5G?W̋/G?!0\k@BXpՅ<娹~{QZeڪU2_B{G]?KiL3(»k~~CBK[9Rde] 2J +: dkKg]}4&p 7Pk===#{ cTХh7Nf=lDʍҨ9 ^ze|<:h=oSo@UgS@xEo4\k$\ w#d@*$l믿1ɘ2_*EM]dXXk9@F4ZZZs0044s97 Cj8[CL@4{yZF˜1&4M6=r&J(ve)?Iex8WdoQ 575"+z薓<ǏY,s.0 fza>cڤ~A$/z7{|rԧ> y(K$IuROr˼+wΕJi\٬um}OOK5ꍹs:)$I:J---"2eO=cv]k;]ve}yxvRvi0 'zi3V*N;{`RNg=}mvw̲̑Z -Yxʔ).λ{_*;\R Q3Q{[;|ͥftm̛7ɒ%IxD444W?hooKsXdk+pɧlУ*郃/-x)nI,2ouIVU#T*]tE|駃( .B>u^IԆQڜbD! m1]aO C< P #?AxK.(^ֹ tR5M~I1o喹J㡇>o?}wUյ{r 30b" h KD OË%*1`1( טĘQ1%APDzv7 &sOgU*m!IGQRHL&BuQ-Z>!nV[UJzGuқoYFɚp߾}{:>蠃~{9oYf֭x\.L^wuGnlhfFb"c8ɼ z4iRSSsZ1-[f͚N~b?x*<Ӊ/ hk ;w:J͜5 VN'|r9=Xn݄7pUUUNJ)vBȇ1k븘jƘޡzZ8@)5b!뺿կ ºu늛QᮒɤMʈ( 9s\.SDQ1s.Cߌ.̖q:NirpQGU(ZrZ[oW^y%` vСÆ ~x*^re6u~L&s`*0KL檫+Å***?d2 ;"A4f̘}ݷ.8qbǎb\l/<؎D"JׯK.=z+۷ ̹RJ[hR} '2,kkk(J$f*\̊aOinIV4Ob)K]舢-?666bۆ{ŝ=N!p/23WXy,VlӧCCjAiGDd kF~2ka:Ib-A_;b`nذ"L$;4)W +7pQ8?h.D{`&1]Z벲|>/b̘1655R)筮d2lmoC+[& p3 \ȾML7nTݻc:wܩS'f>%Z^[l8Li_v]VUU}߅㕈L\h@ԯΑBdbpT@ fˮe%{ݻww2ccm]QUUU}v 1Qc8hA"Zz)S`dً.Hk],qZ< ֺ3efOD{0j/+DE-m yv5:=,( &_}۶m a5"1x0 !.]X%tx",\ll\SL&ǁ_ }⮴A曐8gUTTBDԹs.BƘ!Cxׯ_: F?"ւH^{JQ3D[r؍-O$$ c&1G }Jc ȍB`]2h Aт%aZ8`ZB +xױcLJzbzGe1f˖-gƟp9l=ܛ1&Bq61sLp//׿t^b&whbmq3gByg2h>)eUUYg..=y(xm'!<?׾f}8pys Ă}/Jn|AlweeeRJ3|"?w.ӻwo=Dv/6 ;TJa.$'n!HlܸnǓb֯78#Ge]VYYi=WWWo߾=UVV4wR]]ݣG8ͭ0\~G1k,R'Nlll\n]qjXx60M]|Io~;1kR?㧞zʆ?M\pp?s>CL⸩yX@Za!8MMM7|zܹV& L}*=z4. {qܾ}޽{vio7Mᅬo1s5jJ)0rǙ2eRjȑUśmĈCj+q{^:+oϰz8˿nٲDb۶m*}ċ-}.:@7,.nIƾ(^ܹsov+`epfXt_lns) gyfs;<zhɒ%0_ ꪫkrBH$ikt;s\;vH&"HG&wvwUeR 4#`Y >f6zD0ye Y|n"pfRuݩS !.bq{+k)o2$H@555z5X|xy7wj)}vذa Ǒڕ w]{أ .B4^d2r ǎ*[%qsxWy;Wo\.7{l!ӡl `c->7ID>~:Jk}m˖-W{ 8&M0Uko !ߥK"/Lpp11lCAKk} 78s0 ! 'y>#FªYfvm^z)TxQk9 Ck/g;2;wؿx:l+-ӟNo?f>C,`0zȸqѡ hR>&Mta[c]vm߾Jѣ2d  A0x: }d{r>};xwr yԩ $~6y׮]ӧGQ4j(h8;udE544!7mڴ&!Dnݰ&O#=\^64 3?_xnf@3fLΝNjM-0 ׭[w{0~k *8Qp kX8+6*;'Ȭje~}/ < h%Ň δ?яHR۶m3ƌ3'x Z0;>uǴ2D"aofA>Kz kٙc{!)%{W&ill1l, ^~7 Rnذ]~ƍ,xW۶m̹{AR^}a~˟z꩞={ۃqᇿ[6,{Ygb:J'tLDtEQ^f͚eoASS=SVo>|p)_;gΜy)~_ *E+>_|qԩoFmmm&rv766" loY%=yd0a}3fx7d0lھG3f!VaZײZAcŊ,ǹkkkR-E~3c !8 w^V^ I\"[zSB뮃l\5~ Qje/^|gRƑv@2NlT#UVX*}łD"[8Q}-{WXOPsτ vds7nРAA֬YS(` l۶Z3JaߺX:R)k.@'Y';DaaC!΍L&[˜}M)HM,>m0iakVBCiYPؒZlѫVRͺ ݼjϟ?gEw]'O` !on:mڴ&AD-bZkBauDD p.ol.n,cPa(6nXYYYUU~WSScׯ_gy?O)ҥK٬nMMMح3f̀d26l;W^e˖'|rժUƘ8|MO< '`4iREEѣa$ \=oee믿~'#|~ꩧVWW3~waqo?֒wڵkwkΆ}߿袋*++A.:MqPUUE0 Jڷo-)^{@>`q|ݻ33$RǎA4ZC>?cDtgVUU&3ϙ31 T*uVf~pglC6TmHL5XO X/Zu! EYq7뷭 i1Fq@K9{Z6 gB"ë*^, ap˽&*azk믿iT_TZ/\a%Wmtb)_Dº8M4 Rv CwEaZSzXUUUI&ywa\mСC Sы nM!O5#w 62& "M%ܕƿB_bo-c}J[aMMMK,7"+8s\QQayHkfBB!N_~ժU6Boo/[~کgp l6CD]t s=Rʾ}Vƶ2e  2f:Ch :*0a"(&H[μ mzt:Z0]C\[rٚ5kl2l0Z-t1&~pA{ '@ [Ά(gCs)fV#X׵_|qcc#B`Y|~`s1XNA֭f[袋SYYiQbgN =:l>z;wfZ1;V !)t,دc:yĒ] ޝj`nvJ< xrKߑiY|9fǢ6mTƒ/TP"hoqc(Çw/Z; os 6=H$w`"Z*V8 fG1}zLK}Ah=0 ǯ✒*$)~%:*`J0D, )f#8dq4//-x)mۚRՋ-=X+P? ӧO޲S "zW %@֭ۈ#pQO4[np˭dho.J^+Vx饗 vgشiO;!.\rʕ/ҥK-ZcԨQM"HR=#/˟RR믿8T̏>͒ҥnHVUǙ8q"t.B Pp밣m~_RVU .]wugiȓl6^{!d2UUUA@V|H|סC$ Q(=JdVBxW]]}cуZ/̟?Pq}}M33F=C(`1C:&]3T_pD80Է]'i{;2Gݼ`S\65~,&=C?uMKgBO?m/ \ׅ2nqia 6.wb':di%w7k)KW\tUW]?S `έODq\" TS%Y(i̙9es0bXj._"6uf1uezˊœN:cǎc={Ml]fgvgܸq;I&!N;sp'<ӦM.i>\E KD0DU7ʲ[U԰4(!D}}ڵk= 7n\yyy1fYoBl6\uaٌ9r"fˇ6Wo"ٽ_WWgx0ցhǏkQfEI>s!s\6]d 0;i=zh飈ss]w i<'p Ԓ_0i$XTx_|Qkݿo|6K͒3(ޗ$K.gG+Z:´6TTDBǺӭܩLF)V-F_iouE;Oc/I_hش{銊 !,5҂;O)~H|,XTFh2‹WVQb &>I*֟:yb$H 6L'ӵkW 6W^10 xk5lcL!̽q^GqS555]}AL?ul:&֡ɱ8fmL V7&Oiرq:}z饗}Y":! ׯ_Gv̉D"qM7I)*nPlذe 49+Vgyf==X}o\.w5X]Ze#Ʃ d}=ٹfacDqs/u8&L?>VK[pOW";2m޼cǎSL 8w. g}'شiSSS/3/^믿Z=a ܎&ekc[S_\q0昹X`w?rµuֹs kq Ѵt0 _}UZ l}f gcm{ycQ(^z%k[`*xXj!w6&F)D[Y&#`iOuu-9%r YV_SjGݖR>D"ѩS'[{Jk v?Om)2Z,E~n%F0UUU <.A;AƩ ߵkW4H)5dK1ƘX#Wפ 5;t|!207W7$} #dcKXW\e n&E[ѕH8XEٍrjkiD Còld۩N6ҤE.CۏWK]krS.oFBELҐ%'J׾m ^̙3-bӦMN?]B>u݅ ~߇9HXVlR^^~qs);f*Z VU}7x-_h]dj*붾ٳ?f*e3,2IJ@$N;d{-[TTT=ah'xaCCܖIB(F™yʔ)D⤓N5kj@^f1UjvY̖}JZ*ֺOAJ ZLG Beص(؏FGiO86:F+,#CnT҂#"6dXDY0ڧva[|EVeUUN[c elٲ J̢pvCR_B/X dQ.]=X +Wd{6@j˰JbBw}̌N;m>c|㢇rID$ yW|HYFuw!.B`O>ի___Y ۞c:ӳgO$n4>j6vgj:.6y)#pc9w v6cfu놪Pd2HX-a:+ȸ;:zt,)"#J 贖jv*TQ2u1d[X^-sIeyac$xH!(!HnS`OlS6mnf3Ovr9~k8ؑWn8O QxfJ9N^JƟظ G. EXDUofioUQQZXP̓>͊ИrѢEwrӦM=\s7v8mR19,|ÞfH0` Z>eXdlj!ފ~[7D[[ZU@C46i5VKcߟvvT(8S+I(iXlY%L$s2H7B$1)cs$RBH_7bxuuumSlaH1pQRly  ׿N>SN(̈́ !ypsXn СCm ;Ol/aҥT/Az[JjyB[ bȐ!Or| %VX1sMa}~]v}Sh[4;ˍ9Qj*=m۶͛7Ar!"TyAE?Wbdl*LEp;yOFPD}oEзp ~|EP|c[3 à-D4e†BlD kXFo_Ǧqyk6& n 9 C1y|\ʃ[1 ,Xl}0Gz(ĉ-Zj޼yMMM!d/^l̼a?=U2aʔ)~!ڊ̙3q۫V探hذaE Ny=z}jտǹ+f'ZkC]fMGq)wuM&}fcBgصEqݺu8mmmm.]f͚gq wg8cl b6Sco%kw{XQ|v]7mֹ0Llх8Ě`~Eۚ'!ҜRr4)be,!Gvl$#Eb<1T^K$g;1RD"]$ j#J<CQ IDATțni˖-m+Wy#׮]KDk֬d>}OuE@Ʋ" rY=0-1ҩmN1cǎ7+ QqdZI ŋOZ\u#(i(ղ3a]*VeLlǝ2B~nULṊMZNi!YP|Ay\a$TX{`ȏʴUjakܸYawV$"/  Eaq@䐬+ QGB zs9 S#D2!Y'$e|v.umm[4BH]eS)R)vZ 6PB&r^oqn .V+K,v_[W>uك-+z)-z"e lua[-@sX7LcCR)֊X} V2-׭[h@[NJa 5|Z\Q|)%쌉(W_mjyzMhًܶ]!M!ᐈ00$e[Ew.'C#ԡ6CCdؔسnu0JkE߬<$/"6~O~¸R!O֯ۘ*2.ړR^ckϊ", 9ʳ8VCC|yTz[O'T u눨C.Ͳ 6d29a„Z!ĵ^y> ~SLA,{7<0a|Ĉ6\'x"U Ģx@kt;lUbl'~^ڛ{lbOj*# XƆ7$!2x[KB(z,6"VQn♍o 7-pyg9R4"dIȂd DZVQ?h][Rel?۝Xq1[D-ظuO>b% o~(HnpM,w_6}V-܂8ɓmF"j߾#[ "}fp6PB8L+DӖR0̂(!&{nKo>qs$KM*RH0x7p89MDwC-$Ia &&I$ÔtP]׽뮻v$cFDDzmAm|O@y:>s=vsΩ_(ێ4ƌ9'?m]c93\paXl[ ;`GyF +nVrZ R A v`M]kҤKOToD߳}SSR䂷!EGܐ,arBL6 ]Im]!y5̆0D(7rza#b jȄDXne7j&>b3CLY"(?7=wihh@:hm-fJ) ? |ACiԒfm:t`ASybĈ%ʋӺݎ_x ` -?C4"Nچ#MbAXHfA^|oG((;45{Qtxi5 F3h= }b$RNLyE U:nBS6IEX3(2i[{Tgh]7xE-A.wq:sc`oD{h7nNw\F)%ڊXsmT\&gDZ>]Cq (bbY,h]P8LǚSqY$$q^mqJ%"eqSı!I%Xzw꽽~e:p\ż(OcUY^2`B3Edll8;|HRRիWwᦢ(8?=+m(#ZSS3o<=GQ*`{'Rƌ~.я~d5zqvCv֩Tf~ښ (..! S9/DD$҅q˸LBHlӾ`CFjڑƥ+BRFtBU'yf!㈐aq ibT`AW{zӤ|V7=ݹ4q/`b&A)6$`(ZT|Goi,P7`Q5vM7 W)AcnݺUVV:d\gϞ6]|5P&[?ye 5v1ab&#){t!BѤr%HJX{JS{WHHCR,-hvణzjpD^Ċnr 4)pTY;B"d1iZƗBO) #HIlxEL&Jj^LArϿ>U޾[p7 ۈjK)M,@"NK)nj2/*ji+;iCN!NU7-YVSXDLG$K$ŎC ͊FlWQ. )3-S[QhDD )6'#DBD7l3Mu`7'2RMGRJ%'@8IID rb qm.i"#0FBy҉ࢇDgO۷obJO?߃6rHV\٣GN8(}VJr-Ƙ믿>_Z3g}G}4P(t}ѢE-Nt'JDӧO:Gy2[6SWWճ,YiUBIs3$RBSzk.]z,cAʰb)XI/!"AT(3ݙ#: cVn*2NPv(6(&RI;N( J&oSϲW1RRJAar539Bx$8VDKvC3=]hh3R;S0={v(bSuyy<+//ԩSO=u)cǎe_~zpa  >cǎO>;VQiuر!x?;G- FWEDG!(؍ȕR@tk`MKM*]㯑AjUYC-%y*wYhO.hkb2#~: B^E|.(%#= 9)&a!9b)d{ ;묳.]zju6MRgq?}(L7nŊBC{WrAߤL&CE$vs=wGQ6M6-Zq,ta^|1S$!68Ƅ\HKM5Y)",d]'îJjraɪ Q5IvKyiJF+g7?9Y$'vX* וIkca")r"l b`"ChC!om"J$?|`l߾}WUJydrSKum۶ax 't깱1q>3gdK/q@u-[аuV"z.\د_?T2L$ԤuiӦ)Nf+tgehРAܷo_j wqpˑof{~nfGګ4vtIN7z=O"XPD@l-hg2ԑGYSS3~.] qC1[}ӦM< "\@P"={vE4l6=}_|1 |>%o}[Ad5 ?-R#/~F(&a H&hwłb2K &G) !@BIfXdT]1J'x )"*(6I' t>ʤMjTT/?IyM v=!(B"bS&(~Z:ÆX"Z3d-IHح2NѲe|M"ZvmccU }_Jy5 4hĈ/@1{G&0aߧv-YY(8ξh"5}0L$|GDCaXYY F8;wF^zᜩT b'i:H&%%#׼4vYGiR P>K&5O\E+S[MS&v%{RiJ4>_Lqnlh|HM6 ǧ~s&B?.8~»GW_ޗYVU~k}{'hi6QPїaPAEHyĈ/8 ELFAd! 6Sw8gcW.݀`u?nNs{^ӷX'A%,)8a& T/Gk%\R9#HYeYF̲iGDMh#_|;22E$ !`"FS^™Q"=5Lݮr. ~vSwDI0k7Î{\}w}+.ٷwl,iAEU! /ݤۨ"."F#VH,-ozի0+^h4,d;Dz4NgK:*y7yFg̔"Ut.N+Baw0% CT4C:HCpj<D 3=YǵZP~h4MqVz[fbAf\[0NERI;E A쉹$ .v3G@*Ts=?Q$]}oW&''|KU/̈ᨫM^xYUY u? :Vw@HLjJ^Igۆ WN5ePKgxSM)ٜiv{Ų gƠ5^]ҥ#]/H)Pl&H e`؍,p$N }f."JkLgVrhjG8izQGaUx*u\kM;=޶˲Lfm-S:57g KtS,(*66ΩmoU%֭QH ىkInnrRjHC>55rX9PޒSB qI%e1D5XRc8apT@KDDZBjUUwji9CZjw+\$=< _tJ o_C1<:_Gg8}$Q89h4:,n9$ 3;* {{st[t7MeGN`Rv @ roׯQ̶}Δ L3i\闏t6dR0t+Is%_bElO8J7 `=;w 71 -3-˗/Mx?~2iM  pV2M.86Τ!Һ& c a9(dN+;VZcn{32jU(:җ4>8fG3 О!DI^53z svC)AĈ<ݿl>c  (5罏uRL/n|SHYŚɍ7ZkDճe˖|+=H1\f^ȑYڬ@B h϶X0T v;0QN{$!&XGGpCٳV=7n\rN;}-z}(=39> ׄ]u mf,rdԇTה D)k&IqSQ"ƿkzuP4kZ8n"97$A`,ƿ9W~ӟ^x1rʧ kCӐINQU(7C$wkѿ041. &;, ̱Yu03g}by4McڵkZm[*^3&3H  b~a%H-CaiyF!goH0l KՅ&>6n;q WS GmԨVy{wO-"9|#pHE@4n=^Qg a["-TهFvMiP1nEedMZ}R6uTɬ ¦jpl%̨m +H*ψ="✋, fLXN9̈ƭFok*&Hh邋#ب't &mDžszn caI54?yVw!)ox.B}LC^h{-kl $ 7ڱ]fՑӊ:C2gfCnkE@x *Arc>N;-җ{ `ʕQQ=]Qۂ@ ME57 A+%u?m|:Ͷ@*囻7[ %>Q-wKgZWMl)frD ܁I 8ܑz0 ' (.Ic!o__EQLMMhѢK/4Fn 6mG)J(0Ϣ%,vҘ2s26OFU>猎VGz߽::sVlh # E -2`M j!ʵF?.4( 'V`n/,z1P6 ^blkRCJj~hleY{Vxk__$Is+s_$22) Cc3gihVi+޲O|qVN&h=3W՟FHxxFR`vkXR7Al)֏l-5C&Cg '@k"g6)9vq /A_@iOW@hƬb` D"߳nFQ-/Xms>u0ׄ]s92$ z n >+Q$vѽ85^~2O\܌Gǧ,t UA VՂd~7F ͟T aXJz2K և~[H !2ѵe=ՠ^yP` 3v}:Nj5$Ib'xpŊv_1s<2}jlޡJCJ }vNnkE$ƒ"7Wβ T^UHO'J n瑼,A$M!촩[c('drߔ[5T8C>Tw7,iSYs}]oͩ),%@^$0*D`oի.Ƽj3އ~… 2i @U%($1vByWcÓ$qEGGG9 6ĠϖQ^p'tK_ҋ/Zg|36lP]271rYҀDa@97shh4& ^@7JS-p-j#o*/PԈGOԉ1P@TTщ'TT@^Qe2Prj T QH4D5pwOCP&+'&&D#|gd'^IJ gZң=s/*ls65ZƘ%K|_\vu]D.g4Mo/[lɒ%ϏXI !T.qc'|Gp k֬LG,${Wx߆Z 7恓1@1FT2uZSlZ;̾pϷ Dgk}h~aj圣wG2_ z嗾J!h+4I0hg8#tU2e%bARkd| ւ$uB:q`G>9QX^~vi_}LM@5+ꅈ,_|3U׼f/|y,6NpWbBJ Jd3+C'"#($@~\ UX\s]֎pe]u53)KFs")&v4ؠT0TBI!`Rc)P֓LR8ʂM^2ho@CdmVv]Hae> fה@-!ڨ YI'β7W%[O:1,iEb=]2=ܳa"["9c7 nGn[oSe;{Uޙ'?{>*ᜈ};jbWܻ:3wj?É<@Wղ,gAwV;Q$BFɀH̴1dPc0q jFAwvϒdJ=:ƠAHI0ņ OznD(92Bڪ" 68{?mm,0wkk.eEDO'U66b&A0}-gH:Z)1gVF[k=~ԧ8∷DtyUe]'|K^ . I:l%\r!|;>`+hI{8wO|@+whH>ꨣvy{.2w8=??׿t;.Lnҵx$InƭWR0/"y2-N&&: *#a\ܔ9ƽtC[N[:Q0%:Guq)CAp.HۇnEYA{/7LU TW-eWTUJ)^REW{qhRN^u?`aUg#`)'h2}m…U_͒jl ATET)ԋQ O6K,9StMDzUk_/\U_va1Grʕu8o~_Uk׮-r?p|(f/c=O{/2zϲ'>9s\XfM8szl9 ?:(> Ua}91AN[ A}p6YTekV)%F:Fߙ09aGy&P/\qmaTm45x힟>_~ r#|bE8흟^PWH buTU!I8O{Z8"Y%N/=p:o6'T+˲F"G&)yôAuHh 5`rӶy繪>~6<<|͚5?_OLL͟??|+-:_Q۵֎z(˲gq;Mʦcq1_t>NS?{޼yw{^gF97w\4ヘs ̠r۟@.>ՂcOP;5 )hM^9I)|@۲A~G? ]aP3uUNXrJ4qI'x)벊qj?"@Qd&t& s_g0yL7$g}ahMozSөύIF1 Zyg^ ;+zKzW_}? G?щ'7Ng}\tE;wUi$N:#=>\?&6#z펌Zo|1 /]1$3W w\<7nx"׈ !%jg̔zݕwڙj@D4Kk1y|d4N(m=lvA/rĞ` XyyN$dB5KhP* |lKhN\ tNs qO:~ȈȲcػ\cQYD ګI]:S{v'|OK/tٲegqW_`d\_kAU'E ^gfvaT w߳jCC7zяhBW~1~Q?l.X`/}:Zpe[wy'sKj ޫwUv^9ww0W^vG}:^U⋲,cJ'&&vDؠ\Hַp 6TTe XXjUӉz:zheySl~:呛~16Q\RUK ./=>wA`m5R; iɿ:^MI@8d΋I›f44To`FgCg.3gYV55U AW=5jli_[z 7.{rJ.Mg:#1,ն2s5ŀwE꽳j}ꩧ^{oi&̴ĭ +*n|QE_7kV朳?я~`lPa l7aiɪ1%D ۟~j쏚%E@ܿ[\6k%JS&8I~=cZnG`WtfCqI} nҗ4::wz]o?_rڵǖ.]zEUkC|EqFfӢz׭weҥGcMy5n%/zk*tkXU?.[U7W2T "!ȡfs !Kk^s QĶz1jAsa "-REs '&3Vng_9*1,<1jDcNTU?f6z4Uo݂5&? yйn[cLzWȊ\B¿+aXBbcDtQG=+Eݫg&^N]00P P{}lX@0&#4:-J?Wgֶ;)Ol(^`PI[U .@KQ͗LK%/hD*1Q9>22Raof *G{Ij'Rے l ԯ.YFI>)\f0|NsȊla5jlmZ,cڹA0/<zj0^p`MX60:Ȍ{,| N>kʕ/]㱡 $J$uUo(@DRDl!?J w @R2}7Igߒ% ,e&B@0)q>" CV5~?@$!a xFB i)8'&&c9sW&ZJ3X @zl# "yAĆU=6`>{8ı6w=A 8cĵF_"X*c)^,5 €}%@"Yen b7mVW[Rj߄S>+ .Hf,zvNmL)fZl3s~?xUMZm֫);:QH`Rя evF'nDb(M =iwD3)ٌnj*d#sGfB`|+j\7хlW@Ɂ(@,4A]Գ o5bқt#XA"Lʞ~bΪ` i'h9wNS'IȨwV~4t-1eAXsglj'24X"!!8VӵݑAFWoI)'I.I7Q`@Ĭdز,?G!J,24Fbs03@5L^k}B:6Ӆ~/%4 4Gޕ DPA Qe"լW\Y8 !$IRk<9quAFa" "_[(XfDWPPRs BҜSb4PM5pV@*-݅v1e2/ށ^OFUP"1H[q q2(;`@/E O$MJZF' @ Y@TAIї^cۘ̊ɅCx l,,aE I`Ȱ%Q%ʛYG&!pyZ(C'{6Y?!tM!ӕ\ܧih,mUiT(UVSΜw-87@M #ovOz{oHƱ-%2@Lym^㙯 덍z.@g.o?S݌XUTUO7ܳ_AeP؀Vگя1ID!h&D2;w٨FU"*EALbA e&ZՅQk<}mBڠB+ 3S-P !cOJ 3&~oꦮKej1'A 2& 5p 0v5eNkH <_;A8ZDsJ@8M"PACh̛5ϙ&O{d*AJ!1RGKH`milVʇ7kUL{_k Lpԙ`3HLrFVW;7b=EVNvl@l ^Oxd *@H%I `:G,AA@X11229GDƘk͗$h.&1G_KjLBZ$ `.L-?d&j:8PBi͸L=DЙr\2ŨyxKjdhôI5>Si_kU)BA`vWo}: `}Y POӢ,2!xPR Y$P' BF#{t!Qh&7%^{.<J7;rU4^ kcm_GڣMM?&JuXYO0 }\֨0e#k[T3YRI撍5-֙wrK>K'œ `mm,^>cvOkES;:xU !:FUՄy6JVƑB ׄ36U()#qD^! ,PV%zkT5Ёin֡oEK\S"L'{@vTKB %a@=Q(4t655%"ιkߤ2شKaT %0FOkV 9x^صeƑ^F18DRè`T2%v,Xj@@ˆKs3{;_Q㿏}7tl88  tS퉿 Q9MmVܣC-T]Fkf]wD4co|?8. DMY>eEl6 " ,K"N; H$1)kEiplr-,A0>cFE5U.<ҥNԌUUU#5&tV5Y[U` 9j{VVB B #A#f<~-X bkmݭF&7v 5AJ,J}:g Gf4BQ 违6e*$I޺;y ]3%LBu6V7nR3wacv{jjjjjEnJj?O$zbj+h X/ (RM0=K5EPPJBQ ;@j5n2` AI]411r*Jj3Llz ύ̳~`lfk"(  j5j^(! PCdfÕ뱴-&8Qf@fh_>, ALһn]| XBx[IE >1џX^g0O R>jp 絯8^? ] 4&iEQPlO4,^E\x D={ݑB!um8OsX!P1Pӟ>)K(64E#'F)$-}h&aVjqcA$|'(42wO%|OG;o.=RH<J< }nih^e`{!Y' ABcމR,,5]pdeCJIҤ0O$$Yz^WP0$1fdjJg : yD|n&+5X MDp^W\jO ^yl 6V6'> ei [=!EjϗB^J0]:5 %E!dM_Q;|?lc=Y=UjH?\&]I;&Θ]9Y e˼Vn]~o~1mginkUUê{3SUE(1BQWHH@(.']x ,eg+h E? HXBhOS6 ԋZ+$R @%01a>K經.DyeX1?疯D sO?P 6ycїȇTɭJe'z9 Ȍˈ8dg;~AX((5W.2i@7Q_7u&Uɣ=< @)B*j){vP'57TI(I=d*{Mz^iSΔ<ٹ6P )pi .rO5ł 1ndTKK}e Q9)KA-6L<BXvJ`P^eYh IDAT04wդlL׫P[ܡz׿4*Qs/_D1`U+3#[ګޚ%+m>On1^?_?yh|]v+Eꫯ^HF|}ƌgo.#ńWQ LW/OS=:I 4(*WH$RkY4U5`; cL!n]neZ}L3k,_{yZ]zwwwҐ"ͷ- c̜k__{~/٢F06?0jUX`_YsL]yAy2$(\]XJ-v6&[:f ON]s?V|%YˌIf8EGRfEO?37iL>Eܒ|Qv FcFutYG=7.ڢ(Z[ujTN[3gμ⋛ZJ-hi:FZXk v95i6XJLλQܱʛ|QjZ 3e_wiu𤋮*M6CWL ɞ||G}{SM7ݴ{x[mZdɒ믿Cz뭣 ?{Yr8f꼩E%KB'N4߬Xb;Z_pw1o޼$I=Нw93ޮ+X`-潽r3<3iҤ &o4iRSs7 zUG?zǞ&%jį Uz"۞NG˖eV975]H)_iKФ0UDn@ $%6F B9 * J7O y y ?PYQ'RU.%nIff g̘QN= /p{筵˖-u]'LO|駟>}E|CI'4cƌYַ_3&M5nt,JQz|}g;䓟~}ݷ'쥗^zQGM>>䓣Rk'8}3f̛7OU5֝zk?|s2$~ AQJZÑ1QsJJ{aio{Оw"eV Fi1L#B)S}ѝ]t˿/ȍ7X:::f:7MâTꫯβl]wM>5qĸn.\XV/+W׿=~䬳Ί#|e͚5{}g^M8q~l2]>;nD4k֬ac6tMKwta$fǽvY P?On4[8_Pó hh{m,.jRS.’>- '&R^ uNU?m>~g~Թyޅ<d \ A_Y>TBIjܽnFUw]\sMeӟn{<0y_xᅟgiΟ?nj`j\?x z1 eY!|_tV[m;zshV38׿">\|yxozӛm77xM|N` -S/@W HV%oQXB1JlRYٱr%P9<{Kf lFȹ(Xk Ts_tgO܃|\~L`םeZUNRp[`PXjDm"ۚ1,vmz%Kn;쳣j^z>kw\D5o}{+1hM5 nZ6Mo}̙vڞ{ټ($IZy4׿Jo:34=.JBGˆe6ڈ\#ч@Qj”9~'.Z*%Q2*c1sX[3fɳ*S*XPvkIQ-%18 םv[Xzi[-sr aRkvyׂlFN$h"/]s\.~t{o_T*]r%M7*Nf>:?~۽կ_ժj'?ɫfmZusn``UHV}ݗ,Y7{Ͳ9眣b{܌o~Z`l57]bjœƜX:h&MAW2Xm-5u}J{^KB%e5$~nv6:BZOwRݔ.IpR*f Ud0?2/xϟ뭷6YQGM|uם~iΏ=Xoo/ {_x;R MӨChY};C=_pa0`k^ZgV曷~)S4u|fk֯~#.\Z=쳯 ŷ9s433y.[؅*4 XhkQdO~ݔ)*APUJIϩ<,]*N 3@m6G jM@߼!Ͱ/ ( IM~dr.PBd0zL5,_~DZ~+_y~1ӟ4G?ZpaS~Q*~Eq_|ŵZgdO9;><?*)텸9& kJ^IDE4ZP`r& 1tHMbL?⿋5jHm LsjEX-A P٩}XS ù$Im*URb; 31xx9ᏹ`XWZz?3g^p_Wg͚71^˲=yE]O}\.ϝ;w-nΜ9ω'~p̙ӧO6mڍ78}#8GyꩧN9|3=#|s;iӦy;7n '/~id׿>/3BU:]vYUhj eoCCYE ox8{xq<tjW]uUE/BU<_o[V7=4^rԩS8Z{WE$_ǮY5^wܨ˦ ޫlEL-_z@gnQ,EI6- o?JC*51no~T&Ш$ov5+x_\Lz{ZL/$9!Pj%n@s8 5D/jqo1̚5nXdɎ;xO6yqkSr9`ZLr FaM˵Y!4b_1Visܪ9k֬N;7I&QJoaa6]{u|{>1>51 m9s>?qCdX@JCY:/H* p]D Ԍ bлX2::hmnc LaVIW`yJ:)j N:DAYy}Sapo?3wuׯ}kSNmz_[kwFȔ?5\S?jzqa0ʬ n9i*]1EQD &5Ӫx6lk-bz32w#!xͪ'͜>3fDAW?Fe(1"ADsͣ w /p .\}.lrg*&JJ "(T f%5}y\d6h>mi1 Ν+f՗O|FHĶs(Lyx( 4hx5't /pG?:ujUӌkURow11XxfNӦz1*ۈâZEQXk d4muݼQ5IF,Z|MWkR7 6nwHsᷚwmBi)In5yM\1sQ"Ιf  ,(M@%Ip? mg?mncv:rWK^) OEa:ܰf.z3?S |݅ <'58Q=M%Ty_zGy_׾vܹgyfa-ƾ}i}ݛ.^[ry^lcyc9uLM[ѻN«`Fd+FI$Q"l56vW .W=~vù-n.%ioyZ"+?xl~:ӧW*\p7cv^wۻA?uqѨyi͘ŋ3'w}rH$ 6q"B LNC.a:IqP3oT5P^Jul,)@ʤ5^"YaAkn  ~X㪊 zQ3`W㐋߆m Gif+) Tg4H[$>Q5F ,r- (oy83SL*8xA)688ͿWgz{{~߶z1e\ #X`ut3#9X(8BNC>&8hƛ8n2NcIzCPgiv yʾ4I@ `[DGTP&i#+E@E * Kwz;L$u"A80m T= V5U|<pB%Ucc$Jh)q6@*ª!A FqdI"%4NG}Z$aˡ,XD 7.^᐀6SMe;3+) <S %FrCIT Ɠ?u,$p04vֱ1 5y8gҥ<ꃟ;;H5I\ூ32ʼLr즗FH4LB ZNRH[@PUUDFc@̏}⁏uU'm_Z8#9 - ~OR_#xb;CXpV q +JB`@&]8%(5?Cw68) ]jBb4> 7itdY.Sס$q `޹XvUB F j&aR\6@XF`蠏t++!() 1H=08JP4&w 8N"Re( g2l,ZR'qTPaM Os!a# 3zkl"d&M\BLTTJ PD#pF[r& L2-N 3>5Jznދtvq㺼`p4Up +H!8%9m75U) 2}Cy/[ol$dbe2L Djzb2U* 80i'("8odP5$R=A z@JX&c@WJ 2!G615";ZıD$HE44a%T \R qMJULE 1JC=ee 墪Symn >.p6Y/8^zUWt.+.o~;IDATo}%xSKB~MGUzs>WV==s-BUl*H$3m:QQ(%9-)!5$g Ꙫd&:8@PRN-pjYgv9S> aRE8'9`D@Trm9u꼹s LH"spͰ`H8\jiòR$apUy7`yHBciHPH=Px<-EW'1gx C.M[3XhH?D$D hc] fW! T+C G ˿?$^a"i|UcV8_#CSnHWJqD:6 c>ԬNMw]@🞰 W2%rcJ"T;=Ħ;xˏ]Bv P'rI냺p`Ï|K;Sm ۇ@ "6s€&aHHp# JJhU8d.?г{L(@fKxp!CtprͶ`XU6 p8Ae, s/:y[Oٜ K8WA1JÏFPN Ǭ1g6Zt/o\(ͅ\_}dO鶮ÂHR*j,./K ] 6{?3e=}psV*7%[<]T߾E`ا;vE`cQ`˸jN򛾫\#軧61bXTTF܊kNVDr+3P2AԁqdqU %W S婇upOg5ԭxcYxY}3Ln??s^Խq,Fse<.I>ݵdC]:q缅=.8` ~v5&8 ZQ]zΊpj^ӕpV{odg}'~8& S ?;v8 m=%}kJK:G*ut1S_K'uf+M_zŻJhsbh+/`,NP[1IXT,:}C\uϯZhBE+ [?xX穟j|}mp?#W?Q"ڡkw=>қܢ9qYR0WxzҾ"Q'n±Х\ZaNҢT'໧|z䐚0Tr|yѤ+/ BDsMδ#IZ`8|SpĄ0NeѤ+%~)Wym?߳e;~wwf#KCB0$F(N;>a~_G8%toᐝw9d׮#¹?_Xv8kYgGO^.8W]Ztd:SX;ś>| _w9gZVȒcwsΈ[G]:Œ,9۽=|w0dts~qWSr:QԐwW8c^>bK[g=qvR+` (-,C_;r?zjMˋ'?|>g|~Z0¢4?V$BKU|D@5Fr+P^'sR7T'fY-vJ&~`E!6il`^&vRIެ4} BqȢk)סƶ ^ V8f!tPRl( O)0Ւ\ O!!Vf58VW E-xX5T(jN)Dz{ Qr6T)ZdWDZtugŋCyo}mp@' <]koMɐ>@o;]5e~جR0 *_|0Ѓܠҫؤ5D " ٔp|H'"k9V7 N TZ@꒓iؾY9[.w5$Gg1`Uv8$ݝёn8Wo㬆LYN D]SbKA,ptW;թ@]~ {LVG@ÄnUCge 8&a21`تYJ;E)Aӭ}v5[P V`|/J8@kcj Xp$8REG%jqތ3a `~UEJW7Pk UQR 1VJ2>3ڀqޛ2W`@D$e rQSy$%L)9b XHrq&;$ص0fLyhPA&+rvuU_B=! aFy}( 3KpG%(A6@ # `81jT_j81 G8XBO ;nĥPX3q 8%gE0HV֫+2kRVGj`˼I׬ xa[CD1g#ÉXQrd)9r 9Z$U$'xCjM.xQ"~:c4[/8)CDT0Q&;_@j 򆔩B@Z0<,P@!x?pr2Jpa k!=/QAˠDLH\KlUAe 6kiC\sհ32DaH@.1,]V e2K O+mgmD P tr$A$JI+y1{""CaC(ae6qB<9(HQ)JAKkKB5&!C RER/bZEP0k( GGkJD`"&){p(]8nD8<%C*Pp\ N8c 's]  'U]wT+-%N.Y5į\ 4hNNI e@-ˬ-n]pL:I^X2@*(Vp35)o%W2IA~䐀i=$NSr%aϙIM/6!"^ZfA8uOIQM5>+(@+ڜ1LD>8xK& A18 NC5u{ʥ T"y&X$л[R !MQV˂[&`X *%Xh3;fuɈ|RX< aVs%B0 bɍjp>!+k2albM^l!p %Ha 1!jaJz0!8HpXa6lF GQkP%0$ZqǏ;9kMԛ~R$1–]Br@RxənQ$Q`)QJT󄘙MF| (ap`LRSِM"9d5W1Ma6Z$g8P% 5|͒opD 51-pC0ks#B`VE J@@ ,3kנ2!R^v5F0S]RSc ǘ<Č?NfLiᰒ.9`5[ 2UlO p,Z:>\K@ Uxk(<^|( 'A-e"chɛ ٟWɋ36$gcAr65aMC3e>qU ?ufZ} qJkZuvlfڨa%1D 63 o}su*U~Xjs adOXRh4aWr? =153`hcZgȍFZo8pTH!S[nry/Y'nQF bDެсT8h8cDrF 0$gY #EH%N8nK)9D}-QN!jC#=p/п1J`cB+r7G[8P.4}ڕmL62Cp_bgbE7ZFάO'$j@1JD"Юn/&%L}4&9b%nd178ߊ'/P2ثjNX*4 b%  <ۭJ*C@Ȁ-W5+l@9Oʎ #10IfyoK**XVTq?Uu߽^0" &D`0j4F.\иCL\;&F%ƅ&C.@ tOs\MnNӝʩS9?Fό:% rcMcEx{xL@q>}& ^04*_@du-<va4&愯|h9H=I3e+% vޟ~>Lf!>ç T?UILr^\_Ʊ_65sVucėlQrח`b2J&y;vaTs}7ЊfLvƭp'dg7+%t>@sg :1 dG\#y:C0e #kG~).6DɈ~t^TˀD0f>WvQDc?3;k@5II*x",ʯLz3s\Fa&vbͩd3D cVY f'~Nb4h}5uVgCBո& M:EVkBE=f4H&d|MZɖqD9R,c.:ho+՜j%}~bt9w#go;_XaiNb3 x=rիG]:@tLLk00JR.. 3ET?o*!Sv^&Y"p ٰ3[5t q,fm&Buaz^:Ӿ"22 \œ&2}D>~1l58 \B"wrT5MV5]@#t3. qbIG&ׇ8~Uc$wYι ȃ^x:Tf3U:tSDsSn=>) E( 0g"%q0VhrCY(7p/4mw0ؑsyEԡNMg3N-ba7C%mfBmre N[ Y :[ 5TIͲi8*7/O(R. 0F`two;Cmv;Bay2 |6z/ Vfv`{\4{CC BĖBe1^|pK48][|R G6_{8y1G3 Q{~aEt=yzt1ofgFT_{t=S-^g12]( ܧǧHAzP` u4LUo|I<ΨLMToa$L?pB쑧GRZ ^?,3O鼝PQiN4zV VJl>|zRo% }v~?u;V&A*2` oC4Tjy"eVma|WϪi(UI#U6t yZT=A%Abp72^K]u5Ͷ͚\<@Cy `)”$ϽZhEG0Э}rk^yx-{oۍڷƊ$o7+0]н߇R"/FˌK9 fh' ,;t0WVn+duҶR1#Db*P^n)bah0RJlhYf hgu} +.7ZW/8i"f[n5G.FNgF;]:չ~*(Uq}xtCG'߅Gպҋ5di WXzN@dպi5A+akaק\Yļ+Mh}$yU y IENDB`stimfit-0.17.1/doc/sphinx/manual/images/put_files.png000066400000000000000000000276271517235503400226020ustar00rootroot00000000000000PNG  IHDRsRGBbKGD pHYs+tIME8@*tEXtCommentCreated with GIMPW IDATxw3;[W;:HQ(QD%R4MT-A@,$Q#DETCގe|l]kؽٙ/B}|^^CpY"fݻwWyqqqςj|m6:vX!jLZϪUٳ'@o}:64nv4KJJP k=}>?Q{JKV zudNNM-ԩ"bfϞ1oҤIWb4JYvmhTFPP)~g}ݳgO.F/01>_Xz)>}:fQ6Om?BΝ[aٳ;ILLt=׋v IvvvglڴB@Pt( xut2Z$VJ8xeN/&*Q 5'5?5Cf)Ύ6lOE=[qD>n&e&jqr#mH")3#9y<>ArZK2#'s"bڂ-Ieܿb16n7Vc1^ !|>_:iz:\!vW̟?0;vlgW^aرFawc{۶mReKah2Ƀ|_6:dV*2izv 7;,zokanLfΎ{n5ehB*M;}]O(rocg^01'#GZ[oKf ^:e&9b*3n6c)9+/,D6"l VMF=n,:n6ϟ+aqXٺ`4)`^:00|墠UUQU5Tv:!NgHH Ct:Z i6MӌV6`ҥK>,9f1gR?~W!]Gf OKi쨰Wpn;Ҷ{?F{ϧZn8S2wsǐ)pU<ؔdcFnpp?8.c2v$^8Q]~ǿCsG"up |2x2R$xタm'so7Mf9QLX^ON.]4exDQjǢ(l6F… #{뭷 ÚbTt_=/.ǃСR\.?e .++ /--EӴN;TcZLmj09y.=ӗQv4)a2œƦW`U4Z` 7{OVѪUﯱp!Q-HRpDn65SȜnފc[6# 0]/AoMlI ɢ'q]Sq>N7/?4V,]L['~sB}Ү]FW7^yT5+`!4iW4u%",;CN33N'NBr SҸ]m ΋ԗ\-L᮴) 1L}u/3,C^o#K^~Ԫp 2Mݬj'a?wt2M0:td#TL7zid"-5pFpn-V+ł_&¬O,YRA x F0j3C5`ZT!L|z}S$#І-ةhŋY`An$&& 15ԍ֭[W5aWaS팼wJҺuJ۱%c XZ+kcc6ƞy8cZ JL\2) Q%&Jtlɉ8*x s).0ELž}kG0!pIIB@S7qa\aQ!iHޠ `5Mj۶mldDǓ_25[67eFfuwS҈O>u$5#3YHXp#;|0BSwx. 4Mb`XB<׾{!D}tg[Xp)|g=(j%vNu7 EQHJJlBB t39Cڅ3E&xpUUi WrfTC"p1D DG@kjv+A뮻yD"9mHH$R`$D"#HH$)0D"F"HH$R`$D D"#HH GnUW]U+R:4TGop̯c|Q4x0zy6 2匞O>}겍%oJۘl&AW3z>Rpv LnqsFFÃxAE1n~)~)y:yzk vY;}j4%ӿ8fxs7m+0En&[ä}.$H񻫺0iD&[ӨD¯o;weGתdW^y% [ʣC|r}k}&~ 3ac3ZYJ6nտUad#4rZBQK7 dH^\͐ne撵o8 v0AkXm5xZ4ƞ>3^c970N ˈ> @7_?0{e4J: SLϢ-x%|\և>77i}/y=oպos hf?ZΝG';0g?Ǣ9ts;]BSX|E |Ǟ\UuKUl7O/Kϑz7a}|{K7#Vg[6]ye;$}?'b|^{<6 ѳO`#r9^hmt"2>=3F{^f€ \V۝x (2W( a&8~ycï- wq-Նedj;V닊0._ƞLٯǶG)V{uKuv8/Θz7[{QcY}{ψ"l=>= qy:/xoϾDWFabwDm?{v ՗rć8R{*Gaެoh=7 m3ߠ͈ gx++9^kk8u6 q*Ts-έ:p[s0LTdn> 'sv`n,E'F|>yE<ۍ S;|?t/wp3م$zr :x zcAXYzq&I e蘉LQu>s? ̭d;fCĝ#csxT5^=fuտJWq1~u3*n3yxߥ|)m߾ݻ7).d@VN\TS#00 N#ZQKƏkn}+g஻bg>L\ܞÉBwr uɦcHfyq+8Z]x%h?L}!NS!˵'G߿6Bzdpo 0if)#IH˴?Rs;K4U)\v^KtCٖ~qQ %!TE0ra )`N);̵}2+)2:7NhS|1CUS PMˤ(D-XTϤc~8\)8,7\2Rd$L0ƣsmd 욅KiFEiXבح*)qv.u[(D| di2WSFa\YHJL\>(rE@$b01DV.RjiLGXa2gSGaoH$gST|\ (`* - }GGUwzMa:3O3N1c@?]8[yL$D-?=2L<0 3N/r~̧0^dہˆmX5`yLWF2ISGg\u. a7w45ja{}&_xtCЮy\v故_lá"lw@dZ1%.5'I$R`7aUг>dWxIs&zbG011n,]RC& (ζiMw=/4EYVbﱒP:T˜g`S&B7LZ7aH Tsh\BBl41 ز/!jo=/ȫ((T{EQ07+PD ,ΐ>QClޗi·^tO7 SgȽ-4~|z#.ɢMZL@hNI"oy EKzwJf-7= >RNGA2NO70M95#r2垗H Պ/?MSvmbn{mo믻x|.N-PE6„sZ'2ج>pZ=/4)ڮ1ξLe=[qˀ,~<^"?RT% {xCQtīz)߫Dpl ]32\\f}sh&D$k0@jYw^ka@V6o~=JQZ◆_-LS3 }|? FbR"C׬D2B;lSE~EGGQL_L>ƸWfJo22lT&23ci*cH۴X<>NQ2/.nagX-*Z|0˟#D{A։LvOKqHZ |/2Lt\0NE=ͮuf&2uعح>Y9IqHj)ZR.2J@D"B CSd_/N$ E).[Jd&].1{6vndi".\6Efʍ="S1Z Oe%@]R#DmK$H`?%$|kћ:2s>p}ΥkVb \Š5yݵ<:# іo+D"9 SSi %)Gϣ[VRutJ{xhh;cJۮj,EQB?|( ާyv~/2tݲCѽMny1 .qߟ]DrfNʖk#;5W^Ƀ#{2[P4܀ȍIjb+bbȽ-Mł(zj6-c#;Ԓ\yA&Gt&%T&2i=-.2%^m.V^3"g2M3tڰiLN&9&ב#]Ǜ7/d|8#)&))?6fB"IpնIal-dAtK;RO>%jah9em_>ᝈyK_Pђ O~J-៪ L8{c\Izr2cPTZTb"%8CGeUEEx#=%}+WW1rDE(何)#^}7giS쪪 S=_՜ZAZa!Za!֢"%%h%%X=Z\LBT6W- >>Qok1ߑ¡kTER N?N\/%hvģQ-%|Z) CsbhNfW)&DadO[W7Y~;J!LEfQd$8Т4!r-ׄ@щɐ5H?OW^Hg]q\e UԄ8r(a)gx}>R2xxu?/l>ra1׵ϵ3**|>.ix~!0UESh EAUWPLC`X*PM0Q-cKBre=r \\}i&N UT MsϥaZ8eeX"5.. i~vؓč-b~{J\g:ڟ~,R tDJFQQ!k:ʜ)0λ<WHa(PN&/kдb>7hv;'$4V xv$1ы@NW]|qKs/^ɿwWo'tZ^#BWTʏ&xE3X,6ͪZ7 E1׻Ut9r9皾Ykexמȉ7-;2hBD>駼,e߾R6^ͯQh%U#6) Zr2Kix.+V2O~(j,'>艧u)!έzsNEa.Nĭ䡨~ah~AtLSGB59'":]-o.Zzg*}=}}EPg "&ӧo_\tHMB/,V+jR?\4 ~;}zG5ZqHc< $&wCJe0*1ѕng?THR`*k̜ɷ&qD׹8.]GuN0V<6_;= N'V5|P6V:+苟bWRxK1( t= SC1p[ߪbxÔВ"}w*+?_Z^+&Ktt{5̚Œ-[i) ӻyq]gۍ[72ǏǞ( eyzh׉[avn!>/9J%މ]oYtK^OڗddӔt&bccCmOG"4(֭Se\Ȩ hIENDB`stimfit-0.17.1/doc/sphinx/manual/images/resultstable.png000066400000000000000000000773631517235503400233230ustar00rootroot00000000000000PNG  IHDR?HcsRGBbKGD pHYs  tIME 8!l K IDATxwTG-tA "{G^{ĚX>MXc5{,좠{bsewgfw.fF!vr\B!ħf\B!ħ( !B|:R|k>HպiTv!BwDGa:{IFy+!B eAz4[GMJ90B!x[Of/2elsT[ٝ|o#[P$%N!o+Q$Q*,R:5`3 Jl ªSPd-Aȑt+%c#~uї0bеZlA @Tsn 8pvUS_)'B ~? @T4GrqVn$%a?{ g1GfeJÿ̚ybe~1gLeӊ\d4ϭ;Uf tiϲI1G&4 !u盽"OүzE90a֗(PD_!=c/C>|VÖSpPJh@oqI5g)M Wv)B5?ři6'X4h"iRlː-MNsdХy`ܞ,ЋSDM:fEd'B ~Jk)zL]`kI4K=Lj+ k7S\r:m_mFYg>GS31TLDQIc8YN-M9pB!x'iڗ'eΆ b&z47h[u ZB;Z:(PQw'` A ӹOi ,iY૦B f!4B!^"1B!> B!:o{ ! ~G!!BH#B~% B ' ~#9#xef /n^^}1InHХGCO2I=f]0t֋Ђ^ h6oJyx%|> Hʼdk~uٌٜ(1S Ʉhd4APDd3GE! E!kAI-(aܻf49Xpcd2b41LP`FLB$AHoH*O>!G[E&䇖kVkp]ssj!׉wS󋁏ل9`Fz.nУto>hB%>P}Y0` 666}FSNOkO"XMئ4ğ d`0`0< f #.IUis&;n$^#rCѿs)),͏05&_sioݐuj|̦%Kc`У:z=::؄`tvx!׃Ӎ~Ҕ]/Z5hGD'?=ЕSHAf rѾou\ A/K?oףmslEe_kݚǦ?< =\ɸ+Y=j+щ z4H(|6nKKhVKżI|.b^;,)(]oZR(?^͹UC_"|)ь~2eD}7(,=>,KI3iŚt=mcMև\Dl֏JE93|,fG4(Kv' ͳI'܊FA;> ҷ&F шld2' JVv3߃,w23g:FV}yzz, uEuqz^2nnf{%H!zqVvxVL}1,Ԋnf0u^\56usǗٱ` Е1}y2)MG{k2=<!12%诳Q[m/ X!m5|?nJ Ӈ-IJ@wY?n/ JYsRR`4X J*:%oYo7l>v 9?Aɺy\Aj~DzPٹRu[\ k>;@ݯp4ᾙ*E.{+Mu}P&Gz8Cnа=|]. нUדM܇k9*<~jC)Cvj~±'1d*o4Cύ;U3kZ7*kƂur?f8sÇ<;0f֍@ڕG`z gW~g +O>^Õ-Ue+Qh4h49Rr Ug=Ʊxu"b4yp h_6E5(_?ovTtMEȿ[Nr?&ѴAd.nMF{|4$`tK)ϛj19FSX EAO K7-fsؖ}8A}IOE ֫ANϻ NaOC9s @mTlu44d$'4-?06bx~i86V Ϛ)z `_cqC<Kkrer4S' iŢm(А^?K؅T!{@~KT2EWA{`R𛷈HȤ}ի8W<'}4bTVss@O;G$d{x6Z1Uypr;K.2c!h1Y>Ρq[@am}ap!PK oˎMr59)/΍pG_1CylH~Y}\Sr(qeJe;:A p j H HĨR2)1+͉ 8ѥޭcݟ#w˯S ;h=P`6he<*܋7qi/SF<#KMe/֕WEWݩ_Y|>-xvWt)HaBZPhA\; mOO0t6GnnFtFϱ6p={.l\Kn^f~=jGPNwfЏ{2+O Jzb#*}r?x[wU _l]~4%,Yrd9<-[QشƼPa/@2X8љ<ʡP3"2d^Bĭg z= JZ¤V= hpqù@qWШ|{ڴQ|d ָ5EEv.[Y Csnzn&Ce~ʹ+!vtTe2wTE7c6rG 2VAML1na깒^-%#W9|JSwimJ0lfW*g~2.Ӎ jS qȆ?G?MԿ6ccM}TsE_ qo׃i]')-y,տ締6xaj $W١DEQbت}'D(>x)saEj泶AZW*ө%F5,_֌>J^)(&0dA0=/&fhyIdyUBJһG9)/1ZgO/9O\[Ї*]1ga1"q7:'~Bs\uX ߖVW0~5%Li_V[g6iAhRew×}+a-ކ<P1j 4ˇތ||N9-LXc<hl6[c2[^f%6VV%֕g4tVrŠ: wtxVg;;;lmm ++5J J|⓿DKlҖf|j62stpgv+xLq zL`HIɔ0Kx]ϡ(֦/o?B3{?ksɾtlc,(/Ƴ?Gjb.Ӽ1,kM{9|.<ņI_h>?+iWl!C@}[tGPґ`=EaiT= z 3J+48N-?ɬ|!=|0ҧg-oHPe4utzJѠTP%p\3Y^ XL_D%GYw2'fsӲe%WɌûg2W\!7On𿸵osac)NBwYb6ZlxY~:Lhs%>:>[[[ceeZNU$}?!',SD٤@Ai!ܯ]L$/0a7WɝχA|,5(Qi(:k d&VzpJ֕[/TL`rr6~| Q`3F׼(0}:?tӑhPZ bӼ,jBBsll%=WxϏ"r ѠABl|GͦHmۯyƔ>fϭAgJ4=?,@F"%v>ȉ==rAsqs֥)8||]63HeGˢ)do;yӊWW.QC=sIɟ+w0h+%"K>C$Ə0F0[>e`6I٠lғL' ~+f3ZL1k2j0&~t^Zx1:4mʅa(8ȕ6%yviζTRlF"p ~hcSlmR> P~or="'ylX00 l S٬s#lMBH#(R{4U[W"Q Wkwb ʔׯQMWnP8kLd}LY vY/֞'`S\(eMeB 5T *ը& ˶?:˯M- >,D+EܿlB!ć(@ 2*i `:Z} bqBhY-n6:.F(h tOyl@&e>|LDim*DJy̢Y ?[h1bEvңE J˅٬xɴ֕x &6v8ڪ>zҥg9yM?Ax@! E|͏"rm_o]B}1sQ~n' Ceč5FѠkqJۿdZrJ<ޕAn\\mאq.nzyOʮN,RZ6EjHl03jdITkG.3.)ް/O]|ѩr&( }-GSz)<ߦo]Sd3 ~#0sC YJd.~Aǖݒ?:r ^ؓ^csriE˩_2v{~ INSǶ|9G6bq4W>[_JIs=3rv^I' 1I>=GOFatr8xvNjIg&૆|zlZ5UKڴ֕d eXLy'o]JJe0R.S+?H'Lmyr)Qc-}#nJ(p|eߠlJ=:eJ%a8ls'JJ鮱jqJx! &Sg&*J (*\=py3CszOWb|p-1kmD#rS9=>?7'̏nAPWW4XO4mP`mQfqʺ15;#xhQzM9 謼ܡG{ IDAT-mz/TRUu6Zó'$-Hk@+?1(:/ ᢄfـq 1Z#*GgToR6B~[EO@lAMݝۥJmoHv[_-hD U5%7}PX>{P=gSȃ[r9~B f o+7{dK4i}.^ECFCKnf4j>G%!{~JhfMlXc #k|޼C\#|xňlwQ6ę%pAjlR.ʿ1Ɂ+8sdhJUCF+'G<'+˾BٕRyZ!La;7LC+7d%O N3y)VMemi 蹾a GMyOjgU>bx_9x c/6O!9?+r;jN@^Ԓ-'nS6a1ڰ}:ºW8z OܿyW˹OjOȤ5mwϦp8.v͠a.I9A:#} ksGe%_Ke[*|Ḫ4DjJ\?z-nT¯lg VOT% /ާʮ4z+c*.P֯keJlp$Lu߮VZ+ / 鿾TfO.-sZ@sK޹j7FYgįl&Gk.t% KGJ pa*iNxxe,x{{Zd!QB%ؓn]d5wV.% }Q1"dKft5ťi&rW,U9Y-w" 7SA2A`|pֳj] d#M홾 CCzv; ȥ9ΩTa6+>'dxlVrt+ʮCc*e' [˛m9ms?w%O:ӿ~]OlҧZ3f wǂOxϬzK  ;0Uףs15&V'9K$@5~jM_~|^)?zC-,]leF̛zQ7ٽ'.d.J.D5<2)72un'%6LeFqni76Z݀XH /<0.lHǯPokX#ҋM>3j|>Т}p{1?> 8IFT)t7_ T$)2` \S-;Qv=W:R67|spobƊq}'ϳqL.&گ8)/o%,{VyzltY@ FW-Ț8sұ<ׇS 9JdoFn&)HZpnˁ(8wfʮxkwҨZWeiJ2׬*erNUi5~ ߷r7q+; Y~hoOH/Flp*OzP6 4w|pyj2\phS'.ӆuOs]LDk@~>s(o3 9g#ۚ{ϖqqqvsN>OY=1>G\<.QSfUw㯿J*&lh4b0t:Z-OQm]ǜppp{{{찵+++j5* 'fh)^>ݧ|ѧ:vqQ]>Pa3R>[!wnlTg[~zR-{V7jN$3Y2~՜<'FQp~<ף`B!ħ-((RC"{;<0~Q!W,79Mez}.L !D!B!0DEGK&!ҕZO޻.ΜN,QiMulmmQ /8T*K{Oz KnWwo~^WfҿXП aKo|SC|F4aWk"x4$-Sj -IŸ:1pP J5  ڈۘuGqkYM;h936c%vͦtޙUɘڦDg,9b.Q Qc{Z$]g 7QvHެ|gMΝYڮџ`\eX P]?9ڠ|G)8 Ձ`cOAYW;ۭ ~H/WKB3R#x/5quc;\P(1{rA \7kGcPbk#}?/:Ȱ3h`6c+@&: 5<8_@JW!c)}ԔR2+(φ4y;m= {o8 Z_<5߯ơ(m+yKG\¸%_!GI!BH#B!B!?B!!BH#B!B!?B!!B yóz8erBH#xscPdB!ǯi^/gò9/A3NJ[iqa3}e>Y7ս/1i~?z0y~5r$xWϏ0~Iǩ lużz[i@vjwo抿Gy:/oWst\ލJ_Œ&9SmUnf,CQ3zSq%\TNڽDI͏!>>ܾɍ{Yˊ,ȣCR8nps'gѾH`_!˞G:c߾ޖ&17wr{5=G\/G.a ™GS7z1:,>]?Sl8 !BqFNU-sq}a9Cz+'R!Js@~X3W/$?v ıh@Ln ?p-.XiLo𽺋ff5w N!D=ޠg.5`֣1(wN'2L5A͘ оyjz ne9oL_Kcu iI9?:r$xWϏB[J5c6%ntuo78ޗp2CQVv 6W'M%BV1cPF7.Lp[ ?lC~9 Ҵe\ن~56qr/@ٚX-{~xB%ޜd2F zNVES< mqKD+Y>o߷uRskkkPըT* &oFj~|B!!8BM:< !B!B ~B!$B!G!B!B ~B!$B!G!B!iD+T`[dZrnRUYӰ;9rJ:6.L牕R|bBwU?l!3=UVt]טj@wU7{16u-h:2ZNcOu ~jھKٰl΋##w̯F8S#SQ-ۻ.Ҍ߹mc \4/>[lӋN𐬔 O2&ozcU'Cu!ǩAܽ}k'Wa5=;sl_d/M:uJ&Eύwfȕ#(sd0WOdJ\YVB!(0lh}_ ѱcTKJq'/;SDW2U9򸹓͋f=C2xr|6 Ŝ<5=7Y¡T(d)Lk&ϝn-v{|k1rlG*}e_#.wr*LWp>:.A|u7xr_2egV AqorrW&ٸE-ܡڈf[U^[l!YCƂr07㏐G!>& Hڎg+2m_07.l2 3cǮ n&A Kܘu<1n3{NS'\kŔOZC]' &5ת0nc4GF0N#_4=/CT|Y~#6ͫ'X)[ p/C?ͫ'LdD9c0<9 4V.8EA"!B|Lhq3?;@stߍJq^8s1c v.go\lT3xQ^x#S$~HAWhb#ScV_ddGm)RƜc.:DW;]e\ |L2< =2`mRm;Qއtqzr6XldWeF5X%>1YkV O̙9T1o_dYUo&'^FQ>ȣC> Jܽ=ILn ?p-nzpk5u Ap[>1b?l3j4n@Iσa8˶9qgUFYM`YNydN,w9x%&aTCZ8ē ]6rZ ~dWMt4W#kxpv+ӿ΁(GcPbk#}?Mac@L<~=E( [Zp"}:U.3sGC̝p_/Ӵ5?B!XRh*f=˘ƅL<ԖCI]UCZC89/d16Lw}-&!GE](OV ˹IUi)G!ޮG)>?B!G!B!B ~B!$B!G!B!B ~B!$B|%!>^a!io^ϝ Eu-&U%1x< #׫#nkT|X9H>o!xx?'ub j@=9L63;6/%q|I>ha̠Jp]wMK8.6r)P=vakk VVVXYQԨT7'^Bue$aƨ;"0.h?UR2= ڇu 5МgF5wR.l|i:9\ X Y\ IDAT ^^rQl$~HAWhb#S |/L{?oK6B7w9y\'ʸaZ.s5c) ]k۬jۉ>|5ݟwSz΋c-s-M[;&5 0 &M@A^"(P^b"ҼTT/X@.^!@R( R7#fwz&̙3ggyftPhЩq<R΄ų鮷 oIZ~$ Ap˷IJ|IN=u21vA/NGx_?zZ~>| sI݊en0r5z%o؊d ;OcTJTyιkh8*o*n7HʺMJ$[Pezߒʓ,qVhѨ=iu>1 ]4 iR/mXAď ?l Nq^#MH ֈ]^R6gE]]rO(#B#T(~L撿K1)o2)dp`uZG .A,?eK`|V4Ϗn/t{ ?b:X+^733CwP/YQ./t{ ?bRSڊ/f$;ͺ es+ݭ0L#WveHbhCH hBAH|WޠG(p  nҥď1:Kď`NZ&lVᤆ6e2]6:mD&p1OxMbRcн.&>9_#ٞU2adE۩3;9l 3o]y)/`9sOy6?glK9>"60sO; ~⇷Vq" X/|0SP7 l=D+SI^M6l%uҫnSc+wQ4n3}C*Q3'L d& R' D'E{J,#w<{=Trt"zm%>g$<WU}q?OYNYǴsInܙt]+['_1,?t]B nxjsI.)Z/ܕ8c뇏pvd6)cϟlUO04}t ?I♝,ƚW$}x?op<^4tQlQQEZ~Ioj%2u!|v.1([+Ig# OwTQF4px|!|,)(~"{dy&ؒT:'_&S3@˳8cAKN{p3\ KO;ɥb7*7%p~%~3? yh#p2qt kB),EbχEр.CZ5)#+ ^uk!ikJ&+ޟ įjs]XyӀZ) qh%,*KTvy{w bDP-?(t =At mZbQZ_lÓ 1b g,HE~?c6)/EKq=usЬ I6 c>fiߘ9V_.KT(܂7 + iHo a^ 4gi4{kYp NLF)'0yZZyr|ԯP]z#)f TP6c4`0GNNdeengQXn9Eg1; چo³,0l;66.l^GNVFAVRPY% |ecچom_ljmfBL*՛1b1F`hy 2'? K%|g\j zBf D`/ "~A+b G#}b "~A+b D`ƯX~'C,?AX~gC|~? ط+ˏ G* #2ó SeH`ѿ"0{; G#]q^e6-c ]2oedm/Aď m:T2_mYn?]>eҁMW~~*PX|;P+mԨ7(PvjofڈnVfx=@DlROߺS] _ SY~#oS$W~~1[|T]Z{t Jc^ۼQ4n3}CʽlhꇏpvdXp/C"?|^a_yinoQ?b$G{cxc(/-k^l)e0?||h?D[x,/)>ǣ8=iv y\#"~A`d"KZ7HfQnzkJ瀂9-HLL Sl2-vSnL@WR)uw▗NI Aď vі[bw-&;ĜOaa5{.M 3WJÝnxjsI.Q:jpRi^POq姉ZCqW^IV iز\9*fSiZ?otgyd&qGd 6 Sm= [GdRS_jiJlRv9/+dr_{#h4yYv]d%فi$/8 #_GT)n_B =BR]G;&>~4k^8K߁nRZCY&GC%1oLL/[%kt D8bjg6K.z[1ólh4` //" 6΢2R/6s>bPGwom ߄g#yau1d\zz=t:jh4j5* BQYezB=őnqX~? G%V"dm/A8G Aď v3< BdAď mGp2#Gp6dAď mGp2#Gp6G#}b "~A+b D`ƯX~'C,?Bm!3< B=Q3<]V,k{ "~A@Y|n~OZxNvI6񨧼gWB,?A슣,?E ;s|q:>1}|ƴ֣lK71ɂ﫥k_>KZT5Dj zKx=@Dl.(y4^\[%#~}b^Af~񹒩jX~? ؕ1K@0Ge(l8;2 K<-_?|}iH7^A~sJ0o΁\їZ_>Lx{_K杷~⪅stlOn i&Y7CR>γ걎zciyvn5?m)&2Ϗ G6~h/3yصf w߭̃, ߙۉ=ϩfwGk,O~tH&IcN?wgyW%RQGgivb, 7KF扞,%se͟2v14z=O©y/>?Z0݉yw5.z4~}SGƮ_G#m&.MGx>{Q6`֧\FA\Hÿ;Ϧ>Ԍ_<67o+1Ygеh㕓Mf—Lw ysg_"V3W+P#/N!0f;41X%@u,߉V#6:xS{1-cҹǣ#sVMѮŌ-yKȾ+|%YӋYԑ<)>?AC3!Aď vN2Ϗ G6~#8bD`W#82Ϗ G6~#8bD`W#8#_NX~? Ά"~AoAVoVaّ!fioZ|;*?/m˃NyR,?Bm!3< B=ő3<[a36h'iDuI6gMJq_'#c,| ǜХ>a<<峒|tn量o0=' S@t]׫p<7I $o_݂ǘqtWr=h>λX~? O8oēmLq8ë6cf)p;u KYƸE)0"ǻyxO5'cG$fʍPu.{PsX6{ϐGJG flwvbsٴ?-dz-a^r-u#_WhZsO7BY1lIETGӮLZǏ9Ux. vaptQdzO65?σy3)JLPEn :u>7.Bjݙx6V bD`W\ywƼ8IRf>fas79xmR|4FY\/JƄ46 Ă8te[tIѼL^\-ukJ5V0ģ#sVMѮŌ-<,yҽiXG#}ueg"|+露bN|={&r,W=*R)W|~QpˏPk?Yr ˏߊf3F| yyy䐝MVVfqvx/!l5-BTl 8v +mmp^1d\zz=t:jh4j5* EM-72sGfxz#-?duf/J)ތ1X~? GeW+^AE kl 5C,?Bm!ςPOqy~#_NX~? Ά#_NX~? Ά"~AoW,?!Aď vE,?!>?AˏdG#][]z Ύ GbȯHw8I|l[\v\'#2ó SivaSWtgmOwQ ~+OFǮycEX~?BCqᠵ+9A~sJ0U D'E{n)`͙'Y7/A~wr͈0CAL&2㷳h뇏o gǥ|0gc2oe8϶{{}w"~AoU-?*>f DZ8/D#j%͘Y|)6·8{dR1na H9h8ޓ~ɤٿr$4^B 5vfqhxN#q[N_[l]27Od/}-CoLl6/lsyNm~!UՂN̻_vыOw>%{ i\Ph'#A,?·>g> Y 8x!ƟL\4Mux4ʤExYฮi&- GUx<oS3~<\W0ߘϾdYXfE KyGv !|dzqn͐7gMx%"j5{ <cs*[Aノ%_^\na#8< X~\wƼ1o\RY~p%IYwѷIIU4FY^4 i->m] _\)"{b-hwMFt]3@0i$f6O{5 v?UtF<ܴ<j#WW[kI)N жdk]X5 IoG;q#KھkI򧡃kbA,?bn4 zysʊ;J˱\hOԕyW⸦ P{^9Ť-q#zw Vu7\SNMD;1gHHL ȻtЛ͗^215*N97%p4D`ƯZ~nLg}ĥda0摞xYA_OV&^Á+9\9Yk4adc䐓r"; crGF!+ǷY^ڀ.CZRM%q758ħs>\P6|,+51'ٺdY6|%^x$'b-=-t$&[MN7R)_i`M Aď b)}W^y^.mCoEHɬKOoh^pE07D`וbÍ>gC0kGӉcvO% qQחAMM؏pR˜%#u{ž%H´!מ}N9zВ300EZ@;yC{ >~Q9ՊϏu?}fH:auƵ*{Il6c4`0GNNdeengQXi׭٫.c'C|ʤƪ,}Ǧgy6^df7|6ƱYn?h#{o^gz=zt:hZ4 jJB ].4Kqxg(0;rgW\:h3b!*,N;dcwjQ7cĆcpTj'TuaV^V=Aj ?POqOߡ+C7L2v24;C)h9׳ұ>-1ꃃgc2R14[g[I2a#Ī!8翇ٶ;y㻣$03v14z=O©y/>?%v ݽ "6IE]_9h8ޓ~ɤٿr<1Y˟g~ecI*蘫{yYs%6?;qkԮ[aux{U+9w+围kՐvAYGX4- +xͷ&MS{^b ,g"nj*_sym˻˜%Ø$1X~ -?g(KG Baeea:SenEܭx?l$q^?z:L\b:]šPj71WᅧNIN~"ѢIzi]tm;(3>4r \9/eMKҤ ##bJ~M"I.YoEt a+FSSZ~w/=jqSշb CUV {6+]XR)jym2ṮUDV}N. Rv7/{N!֞NMA.*xVm8;Lxs~bg&8%Ag7`a<1= Y^vO% qQ[03!0GgBu%ŬZ@;yCjXZ4J%QVV^Te]C7[MPҚ{,_E`M{ Ҷʺ >%ה/+3WEY} wam(kU兀6TAfʂWt!;; ׭`qe oϢѝ[dm7uKYE6~o}gCF%Nl߼!B?zit:͛MOGPAͲegEߍ֤ӊʥoiUU][U}PY\?****+i k¿"A,?NM8&)S',?k#Z9cIzJNMIAď,<㩑i%P_5BhP9z8 6<6xm Kd>)HK*[z@՗ď3􎞿U&Ap>MIR VWg:C3PY~$ut%1\_[q$Z#&.=q3Y]䝋GA$D!LSAry,Uo±坋wr(Kl4ApRd  "~AAD` YV-Z%=x5Dq$ "E⧢ ,[l1x*: 8e >_aV<,^^Ag5JDItA MPCn'?~Shq$S^ HYhqtX T*?.\H> vk@΃"а(u]};ܟ`?|#@<-_?|}iH7\n;\IY;Ϫ$ܛ{=vĦc43GkɧpJ9WzZ2%|0T=J)DwUUd`Dsֲp\eR6t%C.~l "G\Qh9 2HȐQV9A]n@]!#',Rn `*-|6(NjBǎZ-%bP}ggWgj-:쯭ҶHW6%EY~Eq}4A̅K\z3nE +J*9^-uxe(ޥY-etP#~h4h4Z-ڐшBBQ[Muڴ$neèIX]+Nu_$b«.:~Kê.z;,UsT\5I7[< Aߒ:jFCPVUYs[n+ҰKy=GUeɳ> AASt`;"Lǭ%RPT}kQ*o%?."\@ 6=̑,;K9Y^,;aY1TǧBNWwbb7,}^K[Q^xU#17%qng,}jN_ٻ({It BRDRDLGU Jí^t&QMX-,92@gXk)~u[8H)õ6l{MhhsxmKLMm敚:XPJYF U7))иqeX]b|T^+Ke=VQeUe>}P84ӂWCj*FPh֝B +K2'{1BdMT!mr^mQyXIENDB`stimfit-0.17.1/doc/sphinx/manual/images/selectfinaltemplate.png000077500000000000000000000611031517235503400246230ustar00rootroot00000000000000PNG  IHDRx=sBIT|dtEXtCREATORgnome-panel-screenshot7w IDATxwXW] X`5jذ%cbD#ؾhbƘ&{QT# uUXE3w=nIlT@ 7m@ J.B@"$7!@ 1 !DH o ٛ6@ (iUx&JqO3דLT)Rim!BA1KtM0eOdJH˓Hؕ-G&MX!ߴBbʖ@02s}ז?Hj4 Mlm`ffgڢJ8GQ&yIg51GW)W+UBLS;i3%Ҷe3F]-5k쟧5|m4`R@ToT]|`Z@H _I tVh|ђ"҇^Rd1tn^G'W]Ze|6{8:gM* mb`ݙ=Đ@f0~ 3A(ȟbh0O^ py{Z#ZVSJ)7ȖEHGݓ"0b{[.'F8FNRɫi$+$j΁t7D< 0yś:Ώm3ӶnUpZ3#R_«˦bO2AKM?F;G;$:8Ri+HVT6!J}Lt ͫ`*3g 2fZC/Ľ+ޏx4K/0+N:j ɯ̄x4Dzon8:qm/ɺ~)C}Y6 N8:c)^f~_#cWۓx4ii5?M]qtv|~8BI $͇ n浓udo˿[6J 7 cǘlSNJnr?,k?d`E|ˉo@ KaGhWǚ||9ADKI*RYD"F!OEQdK"dH{\G+S9ϼwJ|hI.N/m 7wq /,[GR-/(y1@r sCY?7b 9ǎQon(2 a_N]'^ø75?,|t9!׏/=Ak؜ebb@ܒ)5_yA>tN%:d^KlJǒG4'nܽŭ3hx(wS04d>>QK]dtoX j{\v~ʻM@t']ӏ_r]՚ڎcÍiQBtJ]{ha'j;8PϕL!QmI-ѤxJɋ/.RZ|=|k,ܪb&aQ;58gp~[0888vw\^I /j-)GHΏS$eTDZI?H_w ccϚ8g,j]HZ8hP*(|'D3nGXG8eO'a&S!Z^ޭt۔|9@K&|>{z]Jo݅;]қ:lq^ؽJde19"m隴=fy#H2l6![rܥw}Ԙ;>]UgI__#.OX1vʛŏOvS&D"\i b_AP<QxnQ2 dg{0S])gm4 zu !qLddਬs#LyElraoO5XǼ5-)@jM ,aV<Ӛaё֢)_0%_{3biѥ1o߻r8'Sl 7 2{V|>#6$ig!6sV<9.sdlFA/Ȏ:VX“X*"x"ҹ|ֱ&\K`kp+-H_Ј*ߏߌ{NvWʄ1#8-ƌzgK{3}L½dj% 79 sp)`Val3+Se\9/ C)1E$ 5\I,3~Npdj}:ľw-G}$wkJRTR,6 r Ws#cm6$n`^ٶȇQrQزp% F%jMZ5LM(- Z6EѢEA]}ZחVB&YO]•˒R8X5J?f혌¹}NՕ4dDFSVF~1 'iHKSա._ %<<k*YDul-*QJbHs,]Ë_]vsԨ6_C [wsbOh_Fڵc;a_Ύ|\u=e3>[2MS]Р4vxFRzmfesR m'`y}ii8}bZn5Cq61z%mLי K'׺>qfl&̘۞_,bHX67QƵjKI) [f7JaYh6KtMSeMSX5 h_ަVj뺶嵞s̝cTܲ;:9FmZٲ`3W"HyJAR~sp#!}֜ ODݶeYwO~ |\Jܣb[SXĕal Đ"O ֯x.ԨM\ṃ$G%KM1M l"H_l&CM I"QTAK;J%c ZFACjrx,ϛUcr^ۺIlTdq>rvp:|QPdeҭ'lʤKţƜ۝u%v ^FZ% *1w%ӻUHQ6џOeH6L;.?iZ_=܈@)'oÝZ%j4cNč 7ZK/軴c΁m*va>~s5`@C/~gmi1Щ^m$M}3YQ8qV]vΛ_4} SJrk;L3_o+s.i3WB{3|h8/mtcͼ2 [J_/9y"ڳWA r O{ñ.e+[*# KZyFFPl\NKY'Oҫ ,-L#ޢ-({>ZP*T̾vo/ + as *(gۤjPk( dFyKW3{OsV"i̱e^. e PN!JEHQx8UJr8Mi2`5$%qZwC%[NFm]"`k[:u)W|i - :C֠RP)Tj,KIߞ[ !.:s=5x^"J111}yC8ɘ59Mn_>M -Y5jTʴ8 [&_V ]oDPըT?࿇!jhij~WE ( DS,dU 7$dΔSƫ!BA!9.Ѥ=+/JB" sC@7BB$KKڴw &  W'8\+,QP"$ D pOGMĎu XށS| e> :Һ1-SfZrgk`8vwդS`CW=|Zɬ;mXu62b;8K K<ܿ Ozc O(3Ħ$./lk&NDzD<(b7C>z (yK"$Ǭ%iS r4>hXZUVB庎Eqsļ<-GeL+1\">!XTmX/he#5gWcq+oEy7/c ugndR15BfH&xA:n\1>}. kUR 3`):,{"m+[bZʙ~&SA&)wuԘ1K&Ѿ%fuLZQNX2nqv`>3α@*hAYIsXw[Jx4oq5{_<}?Ț 2a,| t iM̐ith`wʛm\=~J:Iemoɴ YݚP=}R\yEk4ȶ1#l+D֡yT byUb6ן֭%<Ɏ:M ^:䲸gkZ'fXC. 9;_JƼ!uRrEH F6Np~0p|27seIY&xvLmB=᷒ƖY# $9ci8?AH* C=Ȉn--U-cGw$_J`C೬ccQ [<ɏ/EC S8~NdD ߷x"䊣Eo=0T$6ۋ[aH$6ըTRi*IQI1(Ԉl&$MN<ԡSY}"Q( ^<Ώ+\ y]FU~淜\³;Xt5؊9,u95N%^4)-D_g{u7K^$= v/_ņMełXHrMb=L*nXGg}峠j?VR*Q(rRRSHIIz  c OLJn %)} Yx*AϰOkgAfw0??or?ȇrn3y,;~kb]H ǒG4'nܽŭ3hx(wS )/LlUx-#w|2~'"/[_~$db\qcK!:|:w8+YbbfOa#7acL=v&iJ `2F%jg*^>D@ ]ռ #cVt>&T3֑ƞxxI%<武Gi Yi*?'8JAO4!? &Ƽ"62 lp%$J 6iv(B8@ Q[BŬz+8w#g#W$^b A>m|%Gu- wY<9쐄Nȣ-/?-^S}K&ih X-c;R)]zDEifV=;ʸVpi5#?af:^aIZpi?q6h@ {(S"FL^ CLLi|gj^͞[!y|n-lQTtFJ6Bb&&2fY%!BA1ը/% !BAqՀV@o IDATBG +;!BAELD"+Y_t!DH (n' 12?JQ3BS_G!BAmJR%g?o&VФpE1)q)Ōj5hTh/Ƈ[̫s`orZ&#C&0p~H*r%Zcq.C-ih "*n^ybMQܱ1bKPqp:}mЪVU)r2 $fӴON~;qWe6t}{\y̚ށ5L$?d[ԇqy~ݵحVVEh%Vm@i^>cƀ8 2Q>G^}7o;*=s_{cvP <\q찒;9:*giW3{Sвvzˏ"ѪhJ3}TEZZ@LI۪7bp{ZX!U&ҤmUc¸ urZMr /G3XDKL9Ӧa*Q$X1ʳ-4P'Xc c<+9FIuf!VD!Ѧҥ#ܜyc9 FV2#_ns34j5Of&|wdrE\yִSI $쎽Ǯ FDkX*JsMeYo Xuw@soD?xvbϖ\+ɹgV_Xw֋ڦqP];7ld"ɧ'Ę VFDc2#c[HA-6H$2쳧5aՑ̎ϧ:GFAeFjܖVTS:fkR{YLZbǎ鶥kFIh v8ʗbd u`J@z~Ю,+I 5, z( O5CYnufq,X L*`\|wCAVD߸υL/or}+aWA\0qdȤ:}3am0~\wQ$}[Zy <c7ң+N6 &kZo9X+aZJ"/gx&8:bv!!M>ҋ+LhņP_+NqX?خ?BOډ˘huѩ 'm/>9X.|3u]qtjNi{ LK_mvۀ)"`;/;*7VcKQGрyI2~y-wlk]_Z#lk;\yscmǟkrvRLAP\Vʸ}z:#IdQ*Mwoq ?]Yge@hHz]Y>06c7rBa_̙{{pp pgW  7βW -0iхL!uO5[~dg?tk"µ(T2k|Ϲ K6L-S}vGo%駇Y5h<:'GЦ_RbϒQ,ȶMa`?V@6ԧ {F`VAUlk!hW-^lƟy#66+|WyR"?r^eYo $FJ?S'8xkEfr#%@@b^q]?H=7 :|:w8+YbbfOa#7a9ǖt挞;f7cD@JUgbfMɃi 9=uʟGG&TuPks*=\0ח!_5ǿȨd$fZs}~?c1Jo[^(˰zlZrHhn8S{P^|6OonόѕrL?.V߬,^dl" Uɶ/CjjL9ӫӚ7dֺ|f%^mݘV0g%Lr\<&)q#1ølW8,u䮌%,2=*v y9nRl~slq*';8>:MH\U0!r 9ȻSm@9z39Ct )Em4 'яrx I>?*J嵮/).c"(Ø2fj42VTm݂#[ǰSytG}DfM!*YqP;:ʽG}Ąp"9vĴ4wcI͠/:ГHҵ;] xJ\3zgXIi7>ujN$PTd68X"*((#l{㉷&K𘷚%f K`\MɎ+"ElVJ`Val3+Se\H#ԇO$w菫OV,~ݩjQ}Mؿx?no'Xg-b:.Mkѳ$XJ"}@/4ӹ<g]7sg<ok}G")!r5/3w[ɵ> zLe<=uT-}gHPr0=\]!VJ }2s}V.){y7,1MYВ%.qZ&#D։W[欿r-t ޮͬ{>0=&g{r)f=*dOIA l{zG=…O S; F=sG|8nՊ0yW>܃f,11'QWy$R%#猢9M3gg~N3%O347K?jS Uɵs=l2t7 h<э? ~FUeaOCӻ k,iABΆX"1|)?%Fo6Z,NJr"Ӥ穊'2Ŗ0wl TqIvfP%}AE Y6eW9aܨS M`ϋΓ&ԝX6-u㔽Ûqk;Zyvr;\34%hH /zG4~g"G_xVaۄx8}qnA*N7r* ѿ"DVCʋB-ΔV +mLF&QcgcA5ngBo_"Zt mbRZm3늣SsOK깆P_+NqX?W1rx'u]qt~iئ+-Sz4K63kڤ@vL}zN8̨E(V3y[={A0M^Ԏc6h 7yѳO_,eticQ&UJ:-)vB<5[Zj]{Ji4"]{fykbnR'dQ*Mwoq ?9ϼwJ|hI.~oݙ=~hYS:2 @r sCY?7b 9ǎQondXBƪS 8=0n rE$,|t9!׏/=Aklp S^~Ig NcbR Unak(ڕ$-Ěq:WτUgQ8њjRs<ОW$^(γayꌃi6sUPԤƄŇ[Q@J"~_1Pe~6OlH)i~ 79B[7CW#JG)_/BJ[dzx@ Q/= s{isc?A.+GbL͋0£WvcԂRh`iZ6`֐<,\ѴlMy &AKmN.Q4Ĺhno}Szbv`n;Z&u2t4j0erqE~2[V8:õe&nV3b5 Ywl^1E>C5wf43I% 1':TueZUְ`IJ4tHi_.5oȬuzJV#ں1#`NJ(c awz)k7:Յ!yYSQ.)[MVfƤ,N>nRΉ~Rsiwr" {čļ|(zb8,u'^ (=>Ʀ4QlC{l񱫉eyll@sgoDd Jpy6(|⠋Ε~/Ƅ2g(jPĆq~l>9P4)r <}+MsexaUcJ<%^FXu@!KM-PYg#M J Ve*!5 IDAT1.e7+Q埗<XV1=[J%x[M_؆]i糏 J%fN}y%E !QJ2~={3W<3f{ "p|9fR HĂ\ զ0s7rA>>v:kֵ7XDQdֶi[7ƍ eeHN9:WhFu^=z6&Dż{q* r]J=6|?%]NF椹LMC$(t)6?9Iڠ{>r:+j]D 3{8vd27ߺާ3b> =O(h&PPWR\Ryh-ZVfØq:t+c_S9b5">ڱ9ٙpA\Ep H߮+pcBǶ1({G ؙHOM8O8_`?y)uYW0v|Ԅӝz\+Ĵu:]0[lDL53ݰ[VRvDG#c{+ƋIro(={)uug=eǜr " U2[l%2jlRPv[(/DmNfNɽOq -F0ĩ 0" # 0" # 0" # 0" # 0" #P5av(+-"JKp\F<ݨqJV0̣d&y+sit:\osYϣ?|q5kތdՃ ~~+uPh<*ygWd]*^!Qs?x%/m8mn" M@E_R:bFpn.~߉ɟ@jC`]'|O{?k-^Y3obC͌N4s-)(w/B}2 rnXK=`ķIĬ(mQt֍k(//]s1r Ypݤ\=? Aܫ;ǿQ$U~COFu.,"c9/ws {8\{~o+]ą(9zO܌t:vQ9ŲǮc@F:/d+^[lg+青Nǔ\6=W%`LϿw0g:SgZ4L:;3sһӱKwêw{du+}٬2/%}|z]PJ]LJFǧOj>.X_9?/տϵ{cQAimP> |gy|z1a1ԬDݿ>Mއ4^Xg l`2;>cs/̔-]wU8j=V30ur [WaDwTSK:~ef1~:ʪʒ;ᙯgGve Pp2nǏ7y<~dGB9+muAQ沭%ǖ!{J^Z)ae ;kٟrTG몿՟jJ]͠&A}8 ꨯAiODĭfIH5ĵlt\<%"t]k%YnqakןMPşsF(ֈ x m~-:+3cBFIPb+K eܔo߇\[-;E8˱y )Sx6Hń9,B-#6ޕ{mCo'5Wv9> mW͆Կu,5 |'ĭڠp҈11̊sE& YQk% /3/ِEv]˾6׳7&>5q<{(K$BhOBl""23x7D\kzv V0:|:ԝ]c<%?YJۤsޛqK?x%D{[s :H ;;Wn6DT}|z?|<}߻(_CRhnA.ƺg֔H wSQcoX9+1E[).}~ܺOODZe5FޟsQoA(hϮmY>ݙg?Y3 E`ɺ}utw {-IK 1!@jotvto{?/]GϽ/e-o&υ+o- [H+H5 P )B npXǞgћ Pr:kj27G|-G嚸M_";P<_𧾾sZ{>و$d6PTWrEylmڡX;qQ ȠSF?.>WfiXB3^Һ{I{xoO^3x" ">sldNԔ8LRϾBb߃Vq=I;v>n=!Aj@콙 r]J=6|?%]Nl72"֧ 4W#> mƖ&ng|L`=ގFs4 | ?U\;2';.~¼A3}W&z=#jWUElZ3]3Ibqټm[~{DFuHZ>7Y`즛./#/{V̠'Әz\+ĴY5Q'`6+DEл@ɗMhл@0ӈ?c-`ò%J IGMF.X@4%P%ErJT ÖebAXj{/v%+N& d‹#h/γSH$j$IbbZ]A8un@BRA?0AAAIHAA W}" * %t#*.!A*UȂ -'$ HB B$$ HB B$$ HB B$$ HB B$$ L=1Auۅ.ʟ,KX,Vds9kL܅K$ w-YT\,!%=m{46B%Pr:+ؑM.Y6H:w!*2ψ7]c.l" !C78aE$ Ctt$I"[w֯M/~"Mט -HBAJ5$I0Ľƒ$]j"Mט -HBAL #Pkx/p{7)w"2i]9\Z Ç$U #P3Чq$~!H Ҿb"UP[@߰ul}x {'+dX,|U00 0&ơ}; |+ӋHBALTFhG~~qf닢9+!]b'64N1$®9חxM&}ϸ - *O-iljl܅I$ $nY}UޞVI {r0 ,a2IH2r`T85l#)%6}qd}j*t $GܛӎEtLD!\.RI *jWM21MUt ktMe߯srkbZn^TZ,K& ,aVd̊\9]O=;8pmةKFf|ꁯ7oO$2`xtp8ʡ-ujJ܅I\ 1Q].+o%=D7atʫY&: K&ŰSZ& 05 Mkٸ7Àn`ź]Tdx&tT4T]BӡQl =75B$a躆vpƩ9l}ri)g 7_seX d梪Y:$RyG~3[-Kt؉Ĥ.tw6'͛C8)n],{aZCZοY^ǙDɀk??nC93RV գkI{S9̣o_"=9mKL_,$a1U1a5ج av+r4MG=N( p޺Y7$c (F\.&ht7W<ɵ-iJjθ - bwy躆rQj5VZ躁hypx llJ@\WNeĤrK,ȚK!a6ɸ<*6X{hqb"s~KG~ѵd=a sKf(ѡzA>,Djٯ/%&4 C3q ?*I+aO/h_^1i$d(VJ%uJ8B}GJq[F/o賋|GgK}(*]mqvVN5'.WnW.{ˢ8'Bm<5wJ!l~?ȗnfӇh &RSD:kToS*䎾䎹ώlN{Iղ Bj̚0paw7-^ÞR]-a߆yၙ.$&Nx X4c6ʫzgOePOxKsXS!!sNdÜnu75w;]{a&^_|ǡ|څc%g&0{kښi%NtMjE8ʝ*vbaHu@Z,d;̃l??/MMw j2Y8c3{0[Sj66B$X}g6m ǵF;;J~!wH#_T=xC#jhG<ށ Rd,e%8J+qy'le ^aOr(A"2Fc"a2ԛ:NA :'s5HUjK %sSt+ц3vIι≮rv.mdɟֆo VSPٽ0i:1! s9' ˄Ȃ̘1a3BB0n7*]=V2L7cq/2OJ}ӃTwP 2|2Yre;vӐKHoRQe%'&xPu> @6ͻTθ^@XR.v9P*sL}g<d܏'uZC.lJ(I>N:w}:d}ͳ |ׯQ9,PdŭUj{?K\J tH%ADɧv ]R7%U,Xlⲳ;x bSiB'_E^m,גƼODeՖsȅp9{.GHmܖw AQ$dIc˨1cPⱄ .x &=lYbC.uSgN=,[q~dHD*ܒdm9X2suߘ֯}##"-vJ?AoSKvl,f"̉Zҵ|uEc+{p"y$$K{ h;VȮwbqx'&pהHgI-bjo(e V*U˗IJJ"99;wPn]]C h4ڍ9neA8"hMNNF$z=^/Vz""(~z֬Y1|Nȱf̕[ؼ?&]]T د綽RCç.ٟ^~-yO]G9Eb|"""3L{Yb4R,9̍*d+_4o\ ^F7BٵB{3 = lq/1{ K8vED* 㳝qzXl(\t EK#Ŋݻܽ{N,& h4NDxck{'11N`6Fn%}OqXĬ;ʅ-*|R D89gq=jԨa,~'={6FѺӄlfɹ~ަz`;꫃^dԪUm۶lWȧ1>6OrwA+ 83%Iz~grq|}wF "#;-ƒ=#!$~<*n\'9L仍~!/_-6T/Nr䦽UxHHYJXT<|QP-6AQPYҨZY@U YA%9ߤT + w!+KP`ŕEJ$DFȗ1'S"0QH ΩDOĂBPPg ͗g*iٝOVda;xMpW*@6//o*U tL Om"HE + o|!J@ Z N9D| XHZutn DA%I,P2E70 e!4΁,dbs pTŋQnD'OOO&#h (iRxE|XLBeB(VrNN(ɠL(! \NSF4"EAG&$b9{,i6HEeIPdYQe) RҊ\DQ(FX GVuI%<߭(ԣF6DQ$ UQ&"v"HhlUQբ<+?ѫoV-dI1Kf&f$[I$*< djhD ZNVEc=/j,@2*X b'٢ff d&<"JmAуvrj5rF"6 ]d ոw/j+|};a0}Aeˆ<˾LzbIoeIR[OEa6ҶЈ }MVrEcVdbSQ"0LHVۜ?ɲl1fX2ce*ZVg/8::;ĂN[EAVdd)>Ϸ~?MNS[8opXTN<='q$I,IHEnSPg%?(L2ܿ.|S6@$7߱5!c}Y$ɾ{;ĢʣC,KԒa}%# ;] ( cWI.H$4`t*&lݢPM#<rCy]k&yEͪ1,| sOE<ĢdܪA6]˾Ydh_ҵ\81rl޷J*A'7ґF+b1~KbΊ/SZ Pl4i=%m}IvУ)8LFbIȯ3bl;ZT-'iѻ7־N4\gq,ݍ^ofB:.*)WX{T/Օ/ܸ.c؝!pg]3K#gӬb7t%d쿋<\+MрT|A c~jYwѵ7vv#ػl%tzz LѮjldmIݦ\e"4O|ۮqZ5 ;A>]ߔĒ-xж%YÚ]~2o u>#G}C՘s9Ng&^~7%%a1zLd .FODk7אpc2ӫ.EL&ip&m[|b ܍fˆ(tb/&n;7ǒ L 9ˊؚٽ9 9xq ef#k,9- %K.v2sfu$͛x}a΄9u<t!Irt*Ĺ,c5<"ji==JF2LUghrzM>O|NɤK]#Ɵ@-!nQƣ7+]WgQ1 7$ "[4Z!>Ӎ+.RZuĒkXmXz7#0hRo4NlJ'/孈.tr)*$=J|'%_6\ 0{|o}5dΥXV(B ŧ%ì~f]D.&#'r?L\wћ $b.3#}2fj6F'b@@P$ɹ4R$RO":Wcc]sR?Mz#\7+yk f ?IqJ+*dȡ":UM`(hʮT4 S*5[ϵm~Fs֋150C?KYY> Vfpo>kћŜ d'MV _,=2Aie:zEH}_c5;)!M糭\s"lxխЍeE1sV:!wfgPT^)Xݡc$ I0L& zkњhN/??Cfwx{yヷ7^xzzᡳhѠh/jK::v6Wb hD|z_i."Zu9Ҧ^M68eYK*Ug]@kz b[^}ɱo֘Gxkix5!2"[4oJ`[*1 PUku؟TW(6"F\Ciwr#@,2!MhWuXT:VVEԈhlay TR5H k%z"G0%t:Zer8J.j=Ēj/Ej8zp?F шld2Ym[xDa Tf/Z4 :CաjEjkqӪB[8{DEF8%[Tdž-`I+ȶGcxhRAZѤ.A;Q &QT'lt~KeIr _vN>r%~TrѤJh'C*XJ *T`ѩ$k%9HHk4b9J2Uu(@TbH% lktY,#i,,j:2@J-sFTu$˪*X FTu0 "FAEVue:O̯y=XbۚHÈ~j&}RAUbIokE+6ټ!huxdF,Z1NSdک4+\:@2("b1j ?ٴs'b7QH%T6R[7h5tLytŚ߭l7Þ]ó~LB;,۞(F4H&.z]X{3و~VV詣Rdpńw*ʖ5HHf2RmӋ 8;d꜊LES (jMMCEWZJD`v -W; _e=ѭc]lP>w1l=r!.ϏǠN\>| NǗbdkK>|*k>/K5"F7bAxqԳZYl[}<[ڬFDzM-U,]98?/suioE\33Vz0"\DQH[.jO6/s4mW 'R{gs6}ѐR2c*}sUzk2y'Mc˒ r ijO .VIDATgQ[ƭ8} $!S'BCgV*dո hI3V=Bh"w5Җ^m>~MV-YxΕgFvx>.} ll+@=$ > G/̚5ӰM':"p/|̩*"C[\`2)5]I+π) 3A 96cDžV __n"7 hXPAQ,sG^xbEA"GWRey;zl/ }%y*UxwRqDls'|6/cN*Hw/2Dkonso+ߌ0,{GVp)du_f}3z?r<5Gi|x<<߬:HYHǷ OF^~#6D|=S8y~a>'btt0FuΛ\c/kV2+ Mn3O%ZV/E'*c&v" XVp9 9ϱ8+~6[_}zM_dIr]*y[iHjCF3DM&Ogҗ<ת-Ru|_οQTvSNu-Cy,}(gcc)P //N+lNz8_FU*Gޗg+a?7?Q_Gҙ X <-2X8(ʊVO}e^M(B# hJ?`ɎK rwAL$>ᑖ /wQ-tRGsĒ콧iV&<),PV9#y=޵TO.DGZM!?e~ͪG^6Cp0Q)-f Y1c ^*3[{3Ez2[" a6gz&FAxjuxҨ۫z*-\3Hα~4Ihdk^Xpۉ[Sw8{cpt3\WqI[Sg mHB>$L-ᑄנQilf=ĕg\Ӽ8Irᖪ\K,b.ˮFd Cm*MW{/(&Lb|pU D16c'Ps0Fx#&.E1 *1ˠ )d2峴"a6XBizY>gÁ8Fdm4m Gf&bv}F{mêh\!&Muwnw 95q1sΜvňS}8m`bN9HF2uFʌ^G9:)%=|1rs4(㋇WI@7)1|7/{%.YǿDE[}4e/X/E*]Gt ޑ2g8'/27 9g ս.˸.BHt 3] GO~M8!!!<>M&56RWL&#zҕżR(EQTߑ~Wp6O+HߵpY,nޤof\» E@oŢ s<~i7t07sJ=\Y᭕s< xmަoᶉo5~lB0rr1Z=KV!ȹ+XdM>qShDjKehOGm}Zcs!<5/VXAmY{}Պ<=7c'S' G0Sxx?lBr'غCZ}>}d# gqD^~E?*dSEZKТG6'Wv_=jR6dscOYT^h]W3o3?KO_?e"oX[[7AQKcOoY]QG\A|I򱅌^Sw>~M/X|.x/8VuUO1^ӗu!gXk4Ex+>VfH{emaIs~EtҙeCH&&]+?FwO6wJ/F9\7ұh>!颼/Eu p8fZlk[ y:kxcDC:u?z.nJyL<ȪP"aUzSs0!_NZ9[CyUo-ϳL)oOf]0uf͘n2,HR 0`VN}+7%8ΈZ"HWٴ`_(=w&='[[j !Fل$%ŋͬ]ޞ~l}3ŋC$$ɌhĠOlu3wn1I&.-tH*xn6i"e,adNn֧h| $>5\ c3&R"^>~{ e氭ɳzWe ,ds l8|`Y—,̀פ6-GJOǨ'Q2w"եlҋZ^lp2e\h)#>z1m%A*P$p/zeHDEoJ?ήfƼ1 JFgҒ|"el! ѐI2slbfL!" &BFJ~o/W꺏ݬU"jR[ә3F\E|Pe'oGզCYے*ހw/eI:TbXs_OΞYǵ$vB'jTIT ؅|xWeAF |DTGI4q4+dOn_y\S*:<=1 lZOrũKv M7FMtMյ +vNO ?s._~e/xutdyO<ѱ >YY|ukT(!W9^aTU]\ K9g*д\;OFswpcqy˗/ۏsƅ캭hFVρ]:\4KӵK'zWB%ѩO}4%v|>)̴-SavuM 6ioО "TXָ3=>}*TRB p7'm8+dddAԍϪSF0e34z=oӔÐY&?'&G/>9OU*@WΓ6yR6ٸDkFƳ323aQ%~"|TiBJ,*RIwXsQ*TbQ~=T%QX< dWj$Ȳ <UPD`.ƝX"1DJGlͿg3pn#G,k5ء=cvWvbŋSZu:M/϶o"w>\>7gF~/'ߵ+NXOoo7} W q ݚ(xzzyzOx${^iϧhϹp5jzrN*K*~=Y[z3jPږaF2aa nqe!99@>%WK Uc!s5zS0ʓ,ywΥҴffqJ[*{[pB0MR? kD\2.O ɿ6JaqոfN(Z]5.D@FEXqK<,齎fsn=#^b7MXmIIܖl8t6j_IiU2od2t^H\fsW)1ݗ>O@}^ߏ/HtJ=D;bGØ-˥c W$ rn%?u˓t՘˗-pqkw3|kkRbl1W^cOnoF͉RVAY )mXu_.k(FvQI_g$Q/Cյ>OݪI?pl;pSќ{2} j|wQNE_goeDxV#3y|X)Hx"/p~\p1yY2c1ljP&i `(eiޯxv+>8^ EYw1QXOWon{ߺ/Ft˻|5k7`?ҏqew"N2iM@o6|_6BxW0M[ğWRHvRW;TKSj|}B'j&C0BU_{N)V۹SO]5.ɽ{[lcזync뼰ԠLG6'}WSr3gfɂyvW9 ]1'$RȮ#Xn}^5p_i DT>YC:*< ϽuA 3lx_?~+rMvC9%ٷ>-QJlf#1ږOe`M?䓬;Nsϣ,->1brda|_m*s%3+F2*)>5Amsbz{zu2Y6㎍k~ÿ pۮP郴G9ܞtp%?t$-^Gfo€7j*D}grv?ѨVo#`Q9RTQHZKY>w7]dƣ K٬ -=BH ĭ~.nɷn}Qbv:117zBHHO~ GB| ~tĠ+Q6sFT:y,fjڐelN9^c(_$f( W_s/T/&?_cHs-:4UW]ԮC lFը6Ӓ%ow)J?t q1 6]gɣoOU#a:FUb)jy2k$ĩTgިt #!NON.oü<[FUb) QEzI5 *NVŸ4˅B%WY]*P%P#!Pۡ.Os uIENDB`stimfit-0.17.1/doc/sphinx/manual/images/stimfit_dos.png000066400000000000000000000224311517235503400231200ustar00rootroot00000000000000PNG  IHDR-(sRGB pHYs_tIME  È IDATxPOd':x(H V׹Bذ Į6h84TofMP "w<K~E_GO}W;V>E;ϵ>K[dsmhLm\ lfTSܲ6WLd6y3^0;: ޯ_H rccGwdQe}f,|{fccs \zscNofTSCf\ͩ6/vUJ=f5c:v=N WӋ YU.痖>ι1fvr 4YOgpƍӛ٭mf`L=e͞HW7{}"W5霙z pQLw{oƆv)5q칥ݟ,h|ڝ:zc6͌=A;}4ZK{avWkc*KVX+;5^rR )hU&eǃcd둛&r}I=y+@mfj$c0 GWr|p:l3{,*Y`)=';s%jtQWA@kԽS\P^l3Jmf͏ 63Ku.W%^JZ _U޴ubΞn!q7#ljP ڝ 3}sKëuLfvkm6s1>ts]TK*iiucO8zl=Kіk94W [0#];.-'{~/HZsK\:swjor|}u[dv9nJ̠Gn;4<@ѽYYsfSjw*YɱЭ;2J$mSn[9bV#~̞:Ң{-<}nf;1ݏ;yT1'mvj:jcUp6w/:i /(s:}3N~^Qbx`3KLA_sONVsGi Ihez:?9f{Y3E N%{'Rt<5O]K2n=!B110| >EB1?Icc>gb{{ua(~7+=+yjOO·㦤j[ <}_b1w;~^楿UiCbo-murxX%ˍ%nJܰ9Ո{/6|a֎YrϵS}ѩ7]=>㹒RxiG΂as>4658_4H r0\yہf ~@ 27 Z62fꃰCpऄ~98$उ47$ԇ*y8_Wbhu9Vxϙ @U}Y SwHc躻VY2b;Z.[m7iZYy!R `4W=dUps?~N99X:=Y9x:dnM`H,ہf ~@ `Py#k3?m~s-QOwS/ΚͻaUiGSS3؞3l/ 6,^{?!` 9濗Fi-KԼb~l:ԔXMsmng r?xnRX@~vzvE{dtE/~{svrm@7=xfx_E.f~߶mfymx[w-aK] lfSz foԄ \]̥^q]9!G^6qt;8bΐnLcCJۿY⌺%?rTo% smT<$d=Z,pUWYδI.J?cʩt o..Ɉi_¹YP;覦6'22@_njN1HreR|f?winiLM_ݡӫhqu3R|-n)' ,;csi3p 7k5(X} u < ƹg3ӶC\L jF/[`f'2OԚ]z@ O-:#˯Gl  M^:۶Iѧ:7?}T1wo9/~ U4gELdWA^Xz2թ(ѫyͤj| Z DsN(e狦Qwg.Vg#rd\wldL OAK^cTX7oN~;O[_NCDKSKDzw;WUvv /6e 9~A_4:WrAs(zNջMS;Xr- &l#7yξnGoni~ҺG@񷆾m_u_4ك9~"0|\W$>prB1M2_4H r0\yہf ~@ 27&sid@?k|0@0$F?Dx9#4K`h2vYPвZj<'O趌o{5^oH}:_Ym;nCi+yzdu嫃̭;՜~ϴn~WThSz`5XY5dǿ/?CoPp?IzoL (É@9ؐ:dn`Pc>~^hu0?R/͔4KϕΫE ~[j'Yi5r>of_,J*x0d~ 餃(0VUR9; Ѭ躻=M5w,Qwiw-'DQ0Z?dUpg4K'`ہf ~@ ,P0lW4s;cCb4KMïIbY9=T4.-p3z>n] NJd*wϑ>z]zg>:$_21`i x{|%o|^jۀPq9fRV^Ɖ`5 9x0/ջ_x1r 7$rg [+Xx0ͺ\Zp}8񼿳P{ExL֏Klx_._dt^nmp$-WNJ; Bkqr:xhftx:;Ӿ' &4dܥ.3&K;k݋+$ W,i;4QԞ]moض ]m1}?mZK |z[Izáb>%x t/U/cRuxURGf/*|}Xgձ-Qa[ t._TQ"3\LѶծpU1.lwOK=fKfW<1;Zw0T}Vl.5l૑K[3S"9t?bKo{>= ܯ%mm~87=׿]V?ow~{^5~% OYP "I%u04u;,Z< `' ,Ad$:hp-u0h so2{Df ~@ xg`:`/8'YP "I%u04u;,Z< A.yDf ~@ M`4K`9ƃA`AcYP@9X:`h`:dnrG$id@?k|0x>c<?D<I%u04u;,kSaS3>Pk6$F?Dx9#4K`h2vYPx> OYP "I%u04u;,5~x?ٹnIku_[߰!OwPwG'a.˯[ez],u0Ea-~bj;̰В~נƃAS{5hFiI %೮`ٷBګ,>ɈQn▿!Ns 4dhH,"6{վ'>n.иgS-.[)'^ J]_o3|ťL]5-I\/‡ lu0W?P!Zs`%u0 ›YP@9X:9x:dnM`H,{gu}?yOG[W{v26,g?=JIki;LmK+Gzg8hnR>>>Cֳg nk[ ~p,]R;:qzr|F<1}&svH%ca+w֎=ڞflpN:.I7/gEY~K]6܆.>\ u9'KpK1˺_VxX`|_t\ ,jGrGy9rRt=#?w{gLj)X륋]XN]a! bL~\elc?NԺ-7KUEj$5^-'^| --I;&~o9ӝ:^Vk_ve xmnt:_=:0>v|[ό9Bnzg#Dn:9x'q^^v2{^όgZc_IUn2;b>ݨ#~f]ks8^kϥg+$~[S(lbW.PNy`s ,K:gs=b4K]uZKzZϬynԚ|0(yR"鍙wI1;3Q޹ZvN.K3/_YZ'wCRG돇:mO׳ƃSG ?O9/ <8o/];k<8f^Wi_Oiy[/׹rr%?~u7皷KmDRI<;1{e3}g?V|➋=!{|~࿕0w5_D)*y9~iʁ'7gs5w+ ,l|Kcf~,ԝհuG% 1{Wnꖿ ziB}KJ.H8^НWc1`:\c/U:x[;80G| Zs0 s?'|w CE:ק]~5X N\G@:uW|¥wņC)}|vq7$M#s<ƿj; Sڏ1)~!f~c/~~.~*Yhg_?渨gնsH"wGť𾎓ՇW'e7MM}΋o}]NY%H <4l$xYzuh~ޝ {?Iy[ꉉٿp~1{7@dDv<zm!6qEgl+g\bs/-pָ~: Ū6I<;tdΞ_ufQĞ:|޼_9oDI4Tg`EW^r?DOvB6AY@ ǗlXv>+ڌL!ngo*'jy| 3rR!wÙv#2Iʴi98ukutHcp<]TKoo%norח%U |.'K;}3)n\1>NAgEyS_Y|n8voOڏ5Uv|md4sU:T@hS\) 8pƃA r!1%u0 ›Bf ~@ M`4K`NҫKHIENDB`stimfit-0.17.1/doc/sphinx/manual/images/stimfit_dos.png.png000066400000000000000000001076031517235503400237100ustar00rootroot00000000000000PNG  IHDRq9¯sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxy|T3{&+H&[=hq}۾j[mkj(u)ZK𾾊 He3!$@*$@ 6ٗz{$Of99Y&gyJ-~̘ T*/@VKa ? OR8`Σ)@Ɂ3Jp itVpA>SSKfL@08^{5ӱ̟?}1|xo>pFc9q3-Dq9 b0473{4A`Ϙsϖ0u |4: wA -nh {O1{{c&LM0񯝧Y<}</Haxxطo"##V޽{eԩ?,ΝV%;;V]WTѷ_Obg9f/dM9>TCt~ ,NAP8p`Z:ZEJZ* BCPZ/obqa14556j+\,]}a6XV#Ϝ9O?Tbj.!X: EITj50z >|YVI+*ՊfS8AA ! b5Z9sA̒j3fYNUR4 $**qƑ.C @vv6 .*|sPa$>2@Zj2LGb3a&">qi覍?ji&NAAaPhiiF#uuu"nj#H`9lqS&_u`m7M{VPPP490{!>0cBf}DZ3(M´&so"uZZZ#NAAap:;;hllٳ1n80( PR()9EP`'bPt,ɣЇPQ_Oyi)HJS16>bUQPPPhhh0(kZsSPPPbT*^^^xeff. 6- ??_rsxCsV7>>u @EE%n* FN>g~~qq/%t*((( 5Z[SPPT**J헛c=۶}NNNg̘1NiŸ.@^^ifpo@n6Μ=lfͷ.//'?&M*ƍ妛n"'gaSTX$v,]M\̹\F7ƜsX&L̋/0x@FR)s $ (n%gyeqi:UZChX( NiӰ̙;9s0g)~ϬY8pO?JhX(ϞOz7nF],X}A2v 9{z رcP::;d[%$8A;w.=seYAAaPvLy^h4V 2ňV;fX,6|||zn?xf99'>@ &6zffܹm08^}IY|x{"7}*\7VbS޽ y?CDl yug<}}II`uvv ee  qƎ;qٲA?sY "~~KKKܰ\<=0\m-ѓA-wG&] mװD,e0GFyUh4lNqq1ƍn5$Ν+eVC*S\\Lx>>=N./I)@$NZ&[>R"+><p_#U7WujuCݓZVOzNHj|ﻶ|P>&-7d(kk*W?=ћA骧.wǵk/AG6ٓޞF4S:j~~~#rG+fh3staШXގ}1QzVp0bQxyyˈSjL_.)\ 暸.oo8M^FnW=#x]LKBBh4FSs3>>>*), Ǐwtڇnӂ=Kkkk'(( /WXXhj2w״L87k,@IQ(`̭]yS71a8,6DϜ9暥@鯜 l%t 7y--x]^^fsCcX%)7_MM-UUUfFErrҀc 8[N|MMMSWWOtt%Oy𤓧qI+MR^#+")|z*!m;"IvMM AAAPYYE||vɓTTT0j(䵷CHH'NcoKUUU>}Amm-%%g=zps{ 9^eFq8fZ~~~mX _ըo5턅'xa;l,L-lGfBZ5jZ;?Z[.ɬ+$7aEe"+JF%XgoN31s<ܞGֹ}-z|6jqۛPKtCT{:>!4܆.<߲=]F/t͡X,I}-/Ob{W9 puu*u|Qzoq./ p݈qye h<2kv_'J/(D<-ogRr\AF[eB. Klttt`ٜήnZZZ;v줹zC-kv] 3ގNx?kA4 uJEPPǎ ) Q盁blI[yl6#NWxANI V HqyV/?`cN\ؾ};G&??_ krp͋ݶm.fadn*((`޼y}֩Xu 1gN6o~18v۷o'99)\m`vl~<&Ĥ`4l477;i4SMiٽm -6inv l-iTSpi6szFk--y<7~)l+ _GG>b4XX]<6o'M[&A{n:?=_F݇|Gl g;8v׋ױGٚ2B:zWjuAgg'^^^nP3 xT亰|0p5:;{[-)w?J7y7zkiii+1&lPf+r5H.P~U'q`u]G)IFRI& JM}3hć֖VWR^J 5RJJ0}4 nGq9|}}/>(N l>:K/SWWGPPvZ[[VF4 `׶ft*H}}=DFF:śTtG2֧iɜoAxlu&#^:_f8Ҟ;wt:jرcR@5mvg˫Ix1.n;*PYrӿzj0Ou W_ގVԩ"f̘!;gϞvRxkk+W -m1NPn0qHdȋxW6;P;h`9Oyöí4(*1cet:hqJDA&[$JK^hkىfY d:wJ/%&& ' v| Y'Fbc"={ɓ'ar =APIW{3- yW-E3 o;vSxqeINvqqq$''G``[n¬Vl6N:EffSڀXX?f bT7*.U3N甦ByY'ݠ&eR/J<>deanI09\meI+mjsSXz\F/aŘY>v%&Ja;J9V(}U{*&SWǼ9_QƸ NA Il|'SGQ_|\j|i.ޭt')N+-,GG/ɮ;ʂ$'ٞ.HKK0*2w RWᛇe076 tt{ ۬xim4 ЭV^^jg4sdBR"##ihh5kW_`ʔ'3vEHUvxYyA S'Nw|قf͚ř3g6[MW8{QUsd,ߥI MeL՝Hmϸ𖣟:&aQUv/ٗ~DB>>wjo69MݩCX1]ӈiii q&::g8n1֫wZ-VȮ3c#???Z[yB\iJ7Ti<}V Cq 0ܨ>x@Ҫsr±>㣂9~\+8>jB`@p~awwUUprTVV #8ju֟Oy|נng8v](pR f5q.mlh4''ؐ@j\(``2ΟC#e޽ƱiLKK vfر>tǏ3:97+3Ojp1$Wt<Bɓ'p|}|?dz#|e ?ryeÆ ڵS&~zfΝ;ǎ;6m 8[?l1@SsoFFaQ]7x/(`dܹ kHS(\> 'n[HMs7V:u&lvFmF fZ:tui"jCSŁCy:WECC9kp|4,na|| ąq72]#e08ٜYv= /o0uQX,V:::c|'DGPzUߺvNTd$8 _Ϗtx{{;qjkj9r(?~q 8$gӦ]>ijjGΦMޤM@WW̞N[kII@yE9?yA^|'ꗿxٳRTT,YAjž}ؿ?SFm6:;:9s PQ]G|b)\>WRՊ@\6@SV֮FG.+A,v asNk Qj8YNKP^ө.ǑpQPfs"gFCBbyMMgcw㣏?aԨQh49x0`|@ϮĦfΞ-h4Ah`4fd4^X,^~U$]z8Yxd|odT\|%.YѣHOO'{^~?S9/۴鳙zu/aZpSN477sanZyM̈́SVVNyE9~~~*:ū̦M_p\'y\VAᲈ֐@SFY' ? bɵN*QAx?q K_2k?q.'Sr7 dg%$4SMqq Z]ؘZ(/+gʔ)a4FKf~466CxD8UFBBC%""3;ٹkn9htv`׿~>z)F 4ݩuu=ӧ0.Ztg[+ rs$7 IDAT **VMR\ychlTbx+ 7W}X?гkU2iDaaaNNZL2H v;))IIng2yWTJ 8P66(\=6lC?:;;ij񯘑$**zt԰rJC`` ӦM#'' ܹs/Y`| <444p);$%%Eff&6l[oU]SSCaa!=կ!fԨ47;sp_oA1AP HnJF2m-M))n5ѯGSSt/..j֯_d"33^x_c2uTL&tŸ'q)Nhh(^^^:uod~i6m$ɉ&??oooF${֭|[zI4 GY΁Bϋs\~\yr'[Ӊr{KtZZy׸b^TA]v(HHNjy)\{M&lu}|_|m&%%%^'==<^ORRGSJ8@JJ 0uT***(--JVV4M``$gL0;v‘#GdO0aĹ3L"zXsFcV)g݈J4Xii^͖-֬qz0a)7?vG4}4G2D}ȢQu&ƕz)G_rQsf NiiR}*CK\'ww\9`hxtwwh'Q\ͼ=t:-&cW8///T*%TVV2e֭[?穬W_?$99 _B|]wQT\^{ Azi0466;Hrػw/<7ndڴi3F]VVFaa!CRIEE9uuum6V+v9sJj[}- WClUц62gZ~[os?xѣL6ʔ j5Z!X`AqzePPZJٳ={6O>$ҽ;CJ_?&[犘\{DFF^NE."t1_OH@?>Tn4\ [sCRzحrQʫhtO>!X^NV՛qPLq_R$W$a\!`pJ"IOHF窻rGf ~#^~&oR =m"o_ˍFu7=Oy$\QS?se0ęL󄆅p89s&3gܹt:~'0MYl߾ sϭeԩ8p?DGGQQQ)ũs̚5?sQ\\G}ĉ'7o.^^^Cr9lv>l]7R~ߣ0Ll߾YfoVPU|6BBB5jԐ\r8!tuv @Sc#v{$++kH_TUVfu! RѡQ HGGnSR%F";w>G_o={ 7tvvrYT*gHq?0qD""?~oofb߾\~"xh4hd2׿󨫫ܹ̘13y Xx'L?OLFV+ɣt1RSSCll,uuuDFFV)((`bL233ͥvœO>Iqq13gdӦM,XCqii]ff,ך9DFEc2F⢢/j1܈O4\m\}Cޥ#_ũ"`l55ii< /4#N^t@uMlgv][5F\WW$C[[fyHF\KK ?яx1^^zI{ *++yy뭷زe |;|~˅E b q>4 WbD;@p,v]$>X2{+nNSOr@AC 6 [n}3:vbtuuqwv=z.&NHii)ͣ{]wDaQ&;wbyUUUTUUQ\RL||\]m6&O|Yjlj"886FuF<~k$&&Fqq1& ш`ɓc۩C{Es)T*MMM8qrL&=777H܊+?K[$٢'D˩l"((׼jK}NN-Ԑ:\OhnnFRsILLࡇfٲ8q"999DFٽ{#鑘HNNO>$6mBPWW;üyxijjBѐn;wD׳q{GA!!%%ϳ~zol`0LKs#&|;UUUlڴd9B~~>ƍ^`رҦ[onw}sav;;K?Ç'55_| OIHHbɆ HOOj)(sџݩ>zȠvQMaq8H!ޢ̜1ѣYbMʘ1c8q$ c-HMMСÒ\1\b2u)Gʕ+}:;vG#!!+cdggBnn.[ne̙NiNץ&M///}1j5555LFN:SO=֭[4iT~DbbbN#BI`PuMKK#44n^8vɼ<#R~YfQ^^믿>>,XѣS^. +Wan64i;Fl,X3g[.[^,X '{˼ˌ?zƏO]]=111x{{Oj* %)))WnϞiVuuu}RN0T*f … 8z…8N:ҥKQT̩SX|9o&+W`޽rJ"## v^~eM?ΪU(..ӧ/dt:Nbĉ (~..Cn4#$HggnF=VuЦ)Zm^/ŌNMyy9gf 8u'O|Ù3g3fdh#NFУKG{w) V*+:M][$ꫯHOOfnvyƌ#mr0a>cǎf;v,l߾+WcHKKcϞ=,\Ph0 H;Xn[2g 4iaaaSNzjbDب]+(p#‹/kwnLII'Ÿ퍷0FCTt4~~~ҽ7̟7mNpPi';ݯ|–!*oo\:8=-6V;&}`/DYpq\n WrKM͒'Ntbz\o,}\|]&P'ObX4i"eee@h?~<6)S#(ky3{ǩdaOQ;~~'|*MqgPR[[KLL,^^w1Tx{{_t`3F `+r1pPE 8;֯϶mh4ֲeG#hyW1cW'%&&YYYdffE~~>[,Yn >|WY}Ut p8GќI_דҜЂ>4[W!֬xG ='68c:]vcP;TĐpnK<製#qk׮婧^g!66~ RSS  fpVl Ν;o~o[|ArxgZ\pBnfgz*++G}Fòe/ n른Aff&z?Q/̔d˖- /\v> IIIh-[سg&Lt Ƞ222_½KAAl߾5k8M])O>$;/*[VV;#Jj_|-AJxXv-;vחo'?qڽ|~֭[ŋ),,}g4ij<yw~@ff&L6?%K0go~y`ݺu,_4}MFR{>A02΍ CϛE'Fȝ ˏ»F]oS7ݴnZvoUsx ~߹Li瞻 lZcHq:7/Qfͷo{t]z5eeeI &pd!~~ѣٸq#w}<#|@ d/` \ZQ HGGnSRbl6xIorzcH/eee$%%  xLTq ]]SbDb0(.F[al6A~aԣ,mmF18(.FM.wcii#fUgc 9NGMu5G+>ޞimÂ+lF+cnZ[[G. niص=j;7|2|, yyy<3⋌?___$Kw}b~_I*<q102QA76,y:-liwh^j Pa\JEܨQč5Z VJXXAA}'N:5b0ԑOsS#^]k{Qv 2čvmTWWuVn{X<3g) =v[Ϛ87s]1F&klwlhyppeө 8'FI+;Vdر7히Jr W:=.#_#&2ܖfgtZKX-tsEENnExZ,huިjl6IJYX/7$_1^{deeq |}};v, .d޽2~88clQfIO… ػw/+VhR]EvŮ]Xx1]]];w???VKgΙL&tdeem6VZѣG?>3f ݦ6vΝ;Ylʼ9%#nyJe#8(pjkk8{,ooo"""6|}}q8X-;H2;=ǿ)#Ghhh`Y4774Fnn- .|zylٲEr}$%%VXI… VW ((} IDAT@,]cb֒&##.\ȴiӮȅNx77 Fղzj?SjeϞ=,Yں:Lf)N{{;cQHΜ9s$2R؊+Vt08v'ZA1F7ngw;U#;*!!G9[l6$X;wm.pmرcijjb]nAjZ_8=z4X]y~z6l)Sشi6fVX;f?).ȝw ;$66nVfΜ)br3\F-[p1S3g &\rN}v222elyXt)aaaҽԱ[ar. j.~Fíe$A1c>^|EҨp;vsEEM$9e Fu0L3o<"m|Mtuud[7@uu$d21oєrYn)^gg'۶msJ?ٳn Z̝;kRWWǡC/ŋ;  }p}Y@1FhK^>k~{n+ 'g4IG 8FP`@*?͑Ç$"͛Ǯ]Hss3mmmNϟvƍټy3/GEs}6o,?xԣAqiOģ4Eip#e- حkI,o~78FsS#>fbGFb'.FO<-^FFjZ:7##Nww 0g|}}Yb&L ++T)ʹi$YWP\|P\(t\ 5rsiRt-JG{[D<0btQ1cwTz>ր.]TAJۥ{wy[[oU,U4jZq1r-q ÍQ-[>^͟~^33fL{Grǟ0y$VqƚoėYYwoã$`B[¦@@m=fq':#xQ: yft e\2zuĩB؁,BIHwu%Iu~xTwsNӤyyoĩcPܶ ;ށ͛@e{Р#3jI](9͑'n3F$Dܼ-Wťxq,dY,$RpD$)HȽͯ??Nvs=_n݆o {y=6zsf&QBK/cMx0鍊;Ì3n:\}OQx1y*'y睇SN8p lق뮽 ꫱x ?ǸKږe999裏 /W_Ō3P]]kZ֭ѲkGI %Ӂ_B{D\UM-Y/!LD @{{8W6!:]NK'!{L6E]OGGY/bӑy&_1 +,i] lNz+6/-_022ٍ3՛qqU\Ռ ؜6䞙 "`y̠gPSVz7ҏE_բ>+_ 6@y`2ejs_䫧Տ;cڼi©bI'% 04h7r _̻g8ݸv9 E#D"C#bqwq{PC*a{O *w/첰m<ԓk^Kmɒ%ah\\a#GvH&ǭn" Ihooٳ0|pa_cjT,ɪe-g\˕a01f̻!RgzfWƃZ4RcK'1HJGMY ˓WNFSe3Ԣ'X Ȑ%C'EMY\3#}Q猂 nEGKdP=:9{qnAjL,i8QYY6oڎxqw@Km ae10kh6dɠqŪ'⍙"M3~x|w/oV;v NTGܤlFu/i)uҋs`:հqƵglՓ_/BJxqw*wVWKzKZwj_tό;g(˩՘|}h/ǹt+^1\a"< 2k <@ω'08^}\;紮,3'k{4kvkqӰm(x݅ Lǽŀij,M߼y({ 6McwB&AF+煮r-^8٪477k/qyFTi ;v oHZ7cA|]?O8؈&C8Q]ݷ{pPKJK4GF\MݞƙןkEljL*FqZ֠FQW_O!F 1BfvZ;rrrԠ@{[q¬-֮Ml'hgg0x@bL1ԺCtAx֭[Yfj],~8"9!G$'7줧gP>togU_|4fgDFVU4jm°a^95"37Vڛڑ=&200g yLs:1(kC=f|Y C-U1|~\R,▄TTT ##?ϥ" PThdYFss3ʭw/#WhjeK$E F#kD|>X,R7Jt^LgGM;Yy ;=:cu(x͝u,l{u7'tE\lxsG5%o۶ ӦM'|(J $I$RqI26~G6(GZ:0r%>4֓}Yp+N>+H?ߏiȵb~Lq*D| K2|>~_{:vmN}*ޏ3~l?!:Th85r~oh9ԂXIMº>!`D%dGܐ]Xj.>5s@!FD)BvݰÎrw,>_Zno> y8wTԴ@C DNf9ɣ3qtA}Ǵy]yRGtf7w7G=t98u֩^="ԙ]|לsh T;mlUW] PYYLJ\jX~8 eaNz^PJ$`H; jfm8'_10Âu#8?֍z_r?8& 8sm^9on;Q.[Dje ?v"{O͝ˬlH –/ٱ;;`޼yh?AWđ9#(v1n"uaCà;^'H^/l6uƄ(Ba X]̗>Xt)>sr)p}ᮻRS7ވ={ G}VnK,矯Ƥ믱}v :s΅BFFAɓ'sNs 1BC@'vQ#"+G= QHN<:cn8`O@D9ڰ!kyr-x^?Kbٲeuwygȑ#QQ$?v 5k֠K,AEE|>N|r… s׻ `bAgzZG9h\>Ç_ ,@EEEGj%͜|dffP^~vmʂb#G I(s9VoOr=qDrBKD$A$!c(FR͘1#:&x.]~g=zN+ W^Q_quF$|PKsKH$|? "~V5Tđ0'4/a{ș3N  QD^ h-Z Ęo!ZavupxaukP TxqXw Ɲu(?حʞ8ABE1' 1B86(R\.!P $,Վa2hbxqdezs5V?UBզ*pG|/~ >nηvjSU(,{9%bP+/] x^lc;Zf=TcmDuZVC;a3X\ϬUtj=vc[;1h <{6l}e+DlEkc+?>Moš'֠v[- U D|o@֚gR |{lzn* ;ډ8˝"rssc;KBP)\.}G"''q 9iiEؙc6 k+qC9m:q(^*Cz7*ijNT>83έqsA('ϝ.2gxq@*TƠуssQ V8>kw;c,2e9.A.rN=&1 {YY83?GKða8!X>M&̾v8Ƃ`(N\*A)Dąrj_8]H0xtZ206$䞡F洡fk'ue0lҰkxkP^՜q9R5gL*2~cg )]qT>gT_gf)<80gZ11xy<6??(%qZv9HNH&&BŞ86H `ƒ'ڦ 1_.ygagEQZPk׮rՔ2z㨽_#Ä 6=uFŨB3@$ 1,P"HUK.MqXU=ǰmX5\[ źסDjj/lV7wk9܂/oݏٌ+xGp Wehl±(Ƙs gӟ k9kWRRe˖AE\.'(A?c|wx7 ˲*EQO?'N`ڵغu+&Nө+`Ŋرc^xر,'Ts'P$Hrj8#B :5Θ<,8Bs#m:q(WǨFaǛ;;CKd׷@ز| ǰ|eyLs\ۑ6+lK&"|xE/rNw~oPٜ68]N؜6ToWs3.\8_UW]'v~͚5+Wbرøq=H'^uTWWA dff";;ЀoƔ)Spwcʔ)e]w>#u]jz+YNP$!FZ?@@0#/Qˆ3G`cpmaű,=3mm\S Y19h?ڎڭ0[68cF>0zh;S䀌n;/?i#|&.g>, F9s&N?`pevܹ>}:>lL>^7Q+33FFF. o>#Fa%ȡC /`ԩ0hqk#IBy!Kaӈ.8yD"-Şw‡/nƉ80E>kDkc+6V!+/ m@pe?;osķ~ƬuZƺDɖK6*23p-J gs gU-l87nT,-ZoӦM)YYY0@w}'… ?ra(d BkW_ϼK]_еЎC8s!j}caC%d:0g .z" N}ZHTO[!ƢE4{)S`ʼn'? ~򓟄UPP馛Բ/pW~nv>Zfl x;x<8A$7|x!+S>S]PYY 8Tl:gqv$V9˳7h?|}{jv,BC"YQ"(9"y8p ଳBEEEH9l=SB<v /Ov(_/k\߇~#G`Æ xgx `ڵx뭷T (_~ k+%;,Ce 1,DH$% @,B`[(++ dǓ'O#G_gy&oFmCD IDAT˖-æM0w{"9r+Wu]z^GYYK/Ř1ci&dggtlؠeeGsɈ$I|b$Yy!̎b#a/LUTT9,33v7ߌ?7tS.??YYs `=o.v꫸+`Z1aTTT.n8χK.D}>.a0x;:3͋n7\ۋn/F1Ozmؠ].߸KHIQD.Rb˜tyݧdG^ z=:=?^{mH9 ˷˟Kf(w*wzkP)sG #CE/(yO!G$~qB.[B8##'B%, Cse˖ 6mի^/^|^|pDN[oT>]qFܹ(UUUXjUդ*uٖ҉a|8("^{-.޽ ,@]]f͚}z] !,]u8^quc)n Ӊ^z 'OTRЀJuv9ÙaiNBK HcY∰EuVlڴ üyqFl޼uuu!y뭷{@a%&<Xt)>sr)p}ᮻ¤In7$I 8~8Ν#G`Νxx裏b`ҥjᅬ={[nk_XbZ.2:,-@\_|l߾w=܃˗~K.ܹsؑ_|V+n7̙͆cĈSBe8qw}7ߏ<Ǐv܉K.g;#/| x kX`g߾},YIĥ BD#[nᅬw}q,]˖-S1bOʈ;vlй}aXt)x <A._ *4h :8455^bA]] ܹ9s`Μ9xq]w1zhgihhѣw^5 HKKSFҭ?rA8qDxe 7AKDt#A$pa PQQ$СCj|1nJ?(hEQDVVt큛(7|Xz5qWnߖ-[kG?Rc};(X_|Q-(޲̒Ƈ/bZ{uz Fe,Zj<=1/nw9(w{2GP„J_;-8>w zBw9BDq%+EQ_„EߩESS$@e 1,%D1BiSAsgFKKKb;DD$GP8BؠJ!Ka*hbѣX|9Q`S)H@)D$ x_%04G17ߠ(0'$%na"x/,(&.bpI`ȢcNb 1׸nR%TNJ #"`q(H`yP#' #đk9ID{?' K0$I 1BDcȐ!袋o7 ֮]&<#C@ @$ 1,u;(G9JPS̅B8 䆅ⳮP䀼S ]57{@p8 >YӦMKTwX܂LXRD:x#sA?tsеEhP,qA}I":Hy?'.r*P&~J80 Ǜq9 I2>/%.\]bH^uD O(==d˩bĜ$"HOpdȲܩv jaS)Ĉ9#=вj?E)TN CsD,#ca<[\?1ʖ8K˥<(L\~dDb$R9n5~iR&H%$C}?lly<*Hԥ.$ARtB CT)$Ib$Y#Zޱ}r+..VDj!T"}*egFvDw;7$n7#EK9bi= A,qLQʮb}Q`itK(? >T6g%j/3'}b|a؞9QO2-.&rimY=q 'L/V^ '}G*<+AA9 ݞTxXru3zu.kv;rss C fGuĀphK5_D`pXPBU41#{]^HKK [/5~i^gm| m^-mzm1,\MV}7;"eàpya3x=p/WGݜqb_=DQLZŋCQ$듶Hfb.3lݼ-\@hJDdv7bb4\x'˞_)\^p8((֍ߦKNlp8p{ꑿ,(e8U;0;;|y rO9,ZRKeJnnnW=坢(**BIIWPXR4Wi˹]cP (o6/刧!°e=.Fß *?+Z/Mͽދ˗{ Jo|3 QJ,B&XD ~?޵̱!ggh.Bo%]kKOO=$'Lh =[WXH޷@tbJnT$yI("ap gHl6uƄjV',-\"-j ge3ދڿQ hqH#iLt7^0匩:<4A?N1'}b z6weEHDQ쳬 A>+M,dѺiTwjtZC,qE'$ڼH4,'4wjB@ s=x0SƆDJ+\%NxyST),$RyK$rd#b$0>YSAsD N%96/H4~@ީɠ9"R ߏ 1,мfb!>AD_ XXPG* !8 r*-˙ 1B~O\"q"uAtIB$|+&hA  Iy BqDA&DAljK)ew:zi $&\- 1B$,eJF9 ,b$Yy!̎,˪%N~eee㏱d|Wxǔrz @dkˠO+?`o)H@!Fx*8 /b͚5ե_)ɔv+ҲiH6&hNg1EQZ助h}x<˝NqB26)Elje9sB!F͝[oW_}5MMItC Q+x|OEi WK=D(p8Q Ga' 'Ȳ;/((%CWH( oQ!nX4[XDZoې#R 3jA9FuYHZK\6X-F-FP֖:m9; C'8"Őe@DAƠ]N#-qaEbÆJZ`hӾtoWӮa[pr^ÞY {v-F[}ec]H),:$#4wDaX…V! z4 fh8(+A#2dY#!̎$I))H%{G$|PGIy!KhTr`qBDE#AG8 kP[Nqc4X]Zm5>V^}z1☇mOg7߱/ R B".U "(~SGiE\t:TE1+\xx#&.Y98@$I 1J֯>>A HH*ȢcNb 1Bq𩦈bt:K 4P$0;p"Ġ]cCH1BU 1B@ ;UdI-T:mh#JrBD!*N ۊ}@++v#"E!T ANN"DܣB!v.BцWd<#$/X ʼnK%!%:ΟT .X% 8pL+mhzmqϼ+XE , 5sצ^;'.R;$O*"˲'nŊc8^oB<0_B?_9e\\P;;*m-pD@sB!Fd@;\ x<Mc薗p䊌A2Ih^KVN ˰XItI*_x5p5Bc}mPEݢPBfKi!m:{L&}~p'F|}~<`>is}-Bm^W3Ο??dI]'oL.`̹I-2dYqjB͋n'!G$IRJD;5Q~"S+VH$IܩAC#A"PT={]½se%Wk=v̮&Y]n+ޤ#;#}+, elHh^CIL`1US\M/svtp}жkh&džrFb%0"UhB"gy/\Y{͒{]'\vIΞ8aV;5d96țC=/{#եKb'.c$ u\9 N$h˩NSkoYYY={6^x8N\.'#mL0Qa9PVH#"ŰXV 1,мfwlt:j*,Zx i?{Kbrzåz>_vImi{R9qDљ: vգ81b^#v8!8l\{b?>z= .Ǯrik94zlκSo,k?d4,TNlXbEZ?]xk[=SCeW\\ =8)+ 5ZuGv^̮Ӷ4A|ݼ>_$$$v{ȳ^TT\|y4bؽ KKu珍ߧpX/So"Y^GHC,ذ_#sΟ?Na**GIDATAbg_Lh,H|)--Ub_Zz/!6YV4m1BNDvO}}}X+/rvP[0㤝3q6zgEK8 Y痟]N=A7./^"~OA?,V@ vq뭷 l6V\+++t}IlsA?< [oUx<굷znԮW/RRʕ+պ+++=n;Nvʕ+Cγ#Gv+gezгh>kYY> a񠬬 eeep8Ag3؜b#y<dUV3qf3`f 3zm6[М߂ ܳgLg[oUMg=!_rz+W??m ):NC|J2tZ[F/OӦ& 2[ ݇%C? :'ZZ0tP@cC@Ŝt'N|f'"o(bZ09jjM: 1*& ˆ E 1RZZbvn`7GT_h;_/ iH_)ZK}gEii "1@oc>_gfh9닶l>φX_o"9G$"K7 $  Ţ8>nW_=%lÜ u{U\\("n.׊UWo{Ep8PTT'@_\\nogL=n6kLUڹ G8gHgz-N"86#;D\ii)PZZz/Y˚ K.j8T$L=vQXX~zsZk2ze2q͏0h95eO*/{]?|ϢcU+zyj?M.h_Yuv !^pqiEAG#IX8& H1$g>džXjH8 EϻJŰe~9gd7 acCKK,~&cԳzۯ"X32PWWdl0(x<7;Uk9s('Z@%x͝\Fғ$@bе tm. S_Oy6Dz;ׄ;϶pˆ屌s8b}[Ʒ;s0=Yd~D{p cR4Ww ; 7!%V!q`~h#@.K\L!!p8hk#-- ~_u^aPώ}hzIJoFg屴B\k"Xys>xE˚//)OoMLc;A>l}~mdc{:A CDYM8T)JPǃܠ `_zp|Hyؗxz_pڈF8w]e$Za;_EJ+xcGrl sD K Md/־OoۈZffpACд[ɜDxM% "NMv{@s=qAD#ApA},ːei.Dgl 6/7;'̊K$rA}$)iҌL#{QACZJ1#+#XA.$ )Frr=bs1aP1Q 'e 1K@8:w*AS6cCOD\DA_fqf%1#AE$#TJE #",Y0DNMvKGhCX, #8~w)&Lԩ  NM^bɝza|PZZ;v`ǎ(++3^XyOV\ ϧ1M~)</ϧ3  "PVVQ>O? >O#AMZ;@DS{"ykxGPUU#F{=L> b/[okF}{A$&77? wop 7`ѢE={ 1}Ǯ]p]tExTQn (A!)36EGGDQÇ|dee%kX,8p +DMMG30fFmmDSQQ~R(NI&є)SPSS 3M5Y0 f3wyZ$۷ӟ4Q]R?>^~e,Z׿pb͚5طo=܄_|Gf\|xwp&ON3g̙3w^9眃5k$_ovC={{//_{7Dj"296a ---jLtWDp©pD1!dnX32P_@8 1BAQ -=~_;Y #8ȪOa*e,#[$ `+R&I|>-a "5p\hnnFNN.Z ? R@5- ghm='J" cÅGN 3<Yv1qČqoI9.MG;oM`OpԠmm|8S0r`Q!AFp Y)Vy׵8q".vJ8T"50` hOAƠSB-V\IM7ݔ.HO8 EjLDE&=mYR Ӟ8 A6~<@MG&;ѯIOKx #JTqAB jŰ3HĥV$ў8 26Ağ @A,4; =8 A@Gx#@h9 ">hN%PGape!hX~A`,eYyo njBe٭2m%L3Վv|c_f 2[mƐ_1Wo Cghh@aX1h`d>raeeU=˜9vN{de V}mtYh?uFzF71ԖW}9zci\3>_zӕIENDB`stimfit-0.17.1/doc/sphinx/manual/images/test.png000066400000000000000000001750231517235503400215610ustar00rootroot00000000000000PNG  IHDR6sBIT|d pHYsaa?itEXtSoftwarewww.inkscape.org< IDATxwT?wl항]@QAEQHh-1b,DMDEEECQiJY K]2ۦca]#x?3{9}0"?nDQNk,OCCCCCCCCC;'|х"E9aFQP!AYC@EATUEӅ  T"BbASU!/9$I^ @ss3^3툤m*}j%ffq 5Ge;l>5Hx ~21PU. opa ''[l;v .`Æ L4s=ACCCԢ"z|]jW *:Ub42nT>/ MYyc5!I .?S7Y, EUd@`¸tT,FSje/'#Hʲcpa޾m”`2shif3q?:ںz=0̞1 Հ%?Ǝ`fWCCC_Çt:YjL6~ɓ'0yd6l؀餼ѣGǚ5kk ܐOgʔ)'O̜9sBSJ G{U=^qFA6xp+~DYәױpʜ{ow` |Q%L+nAOZ-ZTUəc0t0TbV1 L;aˆ |>z|XB|VqqȲ,ItutQ_RMk˻d21Oxe[') $t@G ul6q/sWc{bb"_^d2w2<8|o'5ie9bNo['cOd212oJIG1 6@1(S &QT@DZ2X LɄǗi GuݸR6,@v|6_{>Mmc'ь3NGmmw%X6j;8Xė;ws]jZCCCCCCCC[r3 F]d)ZA+vO3$d;pس{;S#~%V+ 55m,ĵ8(c1[+Ȟ~\u np*,#IRhnǜj:ц\+((8veX\ E饭Ŕt)tkhhhhhhhh|qǓ;+r`!R2. NbLg5|dh F,ƺk(NiB 4UgQuz$I"&6,ݷV6mKp =(UU#. ж6ZZZh83Qdz]~b,z2㭌K#&&dwYQ:TCMm uDEOb"#zmƖFTOVV.2K;f}9|Drr 9Y¼|ACa6؎zRGVC{CCCCCCCCCۉJauz=RZZh4XM8B$-3'2*$ EQ:zTN)~j\ޓb\B&MtRu|jW%^ӡ3 t:ES`Bzj.O=577t6n,(۶mծ۷zOem${"v/mחϓ_^N h( 6>pcፅCTUm۷v7nÇ1 CWUUEO> gOt$Xz܀Ӧr/ `Rt,_.AeرcCm䣏fΗvqưaDDDHbb"6l`jSkk+w}7^v)---Ʋ0cm-7@dd$;w~ɺu눊⺟TTvL||<>_?]J;P֬]ˁdر$%% &Mܹ{=({xu=5w.yyy9^nz[\{5TgaΝ*/f䈑J3f\nc͚5R\\Lmm-翉lڼymZv-f?k֮ z1cgq_JJJ {_O""Y(ڵk$E g`ohÒ%Krt\ܹs}l3>xΝ4]]3x/Gh}>߶O0bB . IEЧ'=w@ϑ 8멨(?!=X/CQ.YbccyƼ7Ncq8^Ĥ$1w-eyoDFF2Xj/"K\_zժUdffRUUEEe%#GӉu8|9<9M+eʢO?]_ƍY2~3kVvŋcĉyZXX0?1yUWbZIMM. o. Y/FThDCP{znS,5i.bĈ#֫*)),Y!^{ K,gΠ7x\?^ 2? :80zhfͺYV!>>m۶a vEҹk.ƌí%~7Fu:YY;<(ga `B' RR8m?awѮP Ï̺I瞻C>8^3 hnFAGG  oF1|DQ1 DG^22{l8qb;77R6n܀j%;;{`;PXML8aCR_k81AFz'leO_XVp0aB6`Bv.bرDDDy ~~贾Xj?X,0 dffn^ϲ1L <$ЧG̭QU>#<ȟ#v=TvݬYs&MdE{t'rȎ;{#9sYf W]y%qqq9 :EAEcV ))= oڴMBO81/[o{;Lo<~ 7mbٲe\:}_;Qx7-='& o$~?^WE;wu5y 7mBELcc9998|>w廉\innFe-dƋTU6 gqCNNNX`ru!:jjjHIIcYecQQ 1ˆ6 #Qz6GcCs饗=m9-&⥱KAU2qL7"i.4OrssX|-l=XV'?>Ss喛._}59s=-z~?^_g6m ,NM՝;wb :+ue)n=ȊȈplvb3WUEٸ ))B :L̆ 2Kw燣;M2 yeQ~}<n4pp >RE?]?YAcב6(o}Zrhs!Iqm9|"&7-]e(zr&9?ny{Df^Bgϒrʻk-%vxKiٳK& >s׿z6XU!^ceǕyTWW#+{k80x^`Azf#R\s f~+[cqtd.daZYVhnnf!\6>R:蘪tvvyGOEQq{<10ϚcGįEwis9y1gq *bS/y>$cb6U aҥa(,,aÆaXHIIcJql޼g}ΟHXIjj*{%99DUT6_dr.4f ʠ=u\:alPvDU7jjkpDDDۿ뫞CM]ȤQCM۫pvY3d& m&bДurH:Zv/ֳ>|.~wwc_p"ƌy @iiـGQl 2LJKذa#7ofܧ{ۿu|m֯O+Xn(Dd=>{116|>ovvz&Yqy%(|P$kB1ޝ& *QV[Zg4R2.n40}AF>=CP|GʈB[ -Pm瞐-rϹ?ՔA1mEC\7x&qC`AUcD$=kb λCL&o=ߧj-**_dl&N͚&&vd#DLM=tD6 t$L4Zگn̕hrMEE%vhc>}`0jڵCbbT50ʬ  ,"bzOwjEQȋݻinn$L&3Ç;ӆO[`ɠQA7'Rw&5]UT{w~DŽ줽vZ(h EQBt'U$ CT >DYaxv *nt1>ֆ.]8]bh[t'3yXR6oeͥ.;*LϡC 䱧 HvT8ɈOކTUUرc+ܿzj{]FFFRZZ GF rrrhllqUW{{;q455q%PUUEss3\rI.b4hj`3DIF_/po+*ʉ:ny2~IanmW[DZ=( DE+D͌ %(=:[Yߒ̵g){wUV"dh~zV4S`dXQ{]c'\Jvtg}fDi*"$r-Cɱ>!K2^q4dc:z=+(cPDqUUfL [ƒʮr2,Ym[vt{W ~[l6fsHvc20ih A0YpZdذa :~+}>& >GA@+1{<ZZZz8{)n߈a82[$I$&&w{P H*GFBicv>ECЩzoԹ31O>`nP]_P_KСC{RWWGjj*n&\.Wة(Yhkk^IbSAC-ٳgIIIT4={8DQ Mfٴi9g=ojeuNu?Fnb>ꦶc6T6v2lp荼̈́1#)Om͚50c ϋ/*3m4VK:6hdXNN(idNǖЏKFaݾZ&L1A4 N ">Cq@2 3l[/ ne+P6ETS&%$=U`1I=Oۃ%FG|e/ރHx^vOkV{*L NFe ΃(1u_rH3ޭn_VTYQY'vqy}xu\ndehH5TwV1(9 B IDATO. :طmErz}(%;rF?I*X9:3; p۶x}(]nЯ :'vbbC:ILL󾮡uS(Jh8x۷EBBBXaCSS$ Ft~v7.E$0NȨBɁ0\_Jy&Q!X(--g޽ t8b)}w,^2%}:HekQXvCss3F#FuVAd2ى~W$<. A5u:n.+4:^(HĠAXnvTUxc_vF si1Yv,=eateB^R5N/1zVniC*JGGżRIKK墋.d/III&99; X!b&aiѨ@UM N.V2h ? B%:vރg',PΝ;. NŠQ8zd^E~Bv63~.c"u(^?|OKt 9:Df{K<ۀ[D$EGa7:=EAv)}_xti lW g cOP[9,Ȓcfe\=&m\dF}ѮR.Κ>>r=xOm xSwm1qQYOmM]D: 17b%QӅ~k nK ~мn`ܒcĀu XRC% ʼnNDڠ~uY~/4-}TW&"Jbb€ih|U'A}"=t0 FuuuJ|>?#=!KL':::\\ N{W#dEGrb2յha H.$\p@Z1>"I8!)sYc_5h8&^&qgPvP.@SSDQ 3fENş?Etrhfǃ(x<Qinn&--VNUz#ck%m:,:cq$es,e2Y z0.] 悂V^͸q7 B1=?M%(rUIՐmSINSVo$q_ (^acKs?1^U-## ϱ'0j>K Ûo?{QIIIS__χ~Đ!C2$|,raDQ񐝝n?~ۼy [nѶD N@>-fcG 8} VQFvj| S\+{Frv,Gm:U}?fL^ ɖ5M|p9xnk$""JfU +ɰaC'""YtXVb1P;Kdd*݇S0OYGyy9ȰnGQl6[(X222())a$'^"t9T^NDDv>צK 6[ o`ذa۩S]$# *]} kl%/%Qdd@^J|R&**6?gˊMl]΄X wH^2 )-thMg~r)q&?&|e zuڴi#SO?//KQ\\S]|ňݰa6qssoga;>!)e2i/*8"2ViݯDQI'eTUgYyNxB5'('$WW5=1}j# ٱWыPmJǮ/F>EU1̤XzM#yhbI]_D$$Ď%2jjkihh7 H +4c0[0:i*M|ވ>_TCl(: ZSX:[&jSH0!/VT5EjH"##tu{^p.P\A@zj0=X||<$G(6VoDglwkk*flXj%55 IVX"b@Pt311b d Wԩw3"vޅ|744E{{;(b0C%C' gm8p3{Ijx,%ҁ5*}՝E=Ry=]CC#II}@{nTE{sJB„+Qa۶ml۶Yf|r.2/_e?K/ĸqRGdc6/^eillF@dEAS``pRk{޽L2Ư@[[ۀo{urkȊ>^Y ۟'!:1qctw-BdF瓟q- 6}s %" %"p8 O=ъ=ﮛ'|O:f[OMwްY44B||(eǣHQQ|}<hnn .T`c+hmm:IV}u'4}N)0לbL||$e˖O d8*]-|Q߾PZ?:|eWUU1PL.uOWq|EJZ7=h°@txbAGQO٪w!K/5Q@nZ,/p:Ht~_ihhZk "+=S>|˟k|=GC?S!0RLE鈌`PFƩ;ފ&6Ց9|fkJkϨJeU-ٲZJ׌_ţ/>|.yyZIC/LÜu$ZhE(]jA#Aۊjsљݿ *4XCC[|$~JIV9p;'%B]3s(k: z(q<>C(l.? n:uȊ8HQUԸ?RhKWLHaA'C\7ҚFPC+i\tZtwCVG>&:x|2Vc" :m&5zLtԵzI9 :3c|l@.#HF.?-~ TԻG@fnkh| ʪg<;B#&ׅ^P/}_yGy衇]-GCC;@pUU;j(Ȋޅ/Cl= |8AC׻dmg?2 J*5t8.Md&F+_VT㭁bDY [Ct H34[s:=z `0)><;Ob^yQ_|%q9yHII/Ρ(̙7;?>5v֭[Ǻu(Tu]ǠA3t@mm-z gC Ʉ?!&0gc@+$JGYc[Zho}yd9r˛~ABBo@\~1x_d2*;ihl^fϥӧRGt=vő%/_G/W\C.Rr;g*]]]$'pm --λ~Q' x( 7̜g%>.G<(L<ɓ'S[WGrr2W_}5fsϝ u9f #Ȳ̡CXrƝգ|d3Yg̼zBmof#2"s;'08XRŸyTUA^z%z#@`]_uVnF֭_O~c֭_>xX4XCC@a[x+֒6`r4%=U5jrYW@Uxkhd8-¦Y(S&M>dGwtML|Nw1s47vƉ1dWW; A )),ץih4x<(QWSͰaC{466r*Ztwpۯn%!!^~A|[X,++lf\38'Dףt̚kxaǴ."!!>3ԙ޵^~Yƶٺu;Ϙ19n w޹4773e;^znHNN3oձw>_aH~ߟymHmy̺Nf~]].l~u:b)6# .1gΜ>۸zj/^ݻ0aq5N!1;Jɿ>AnN΀zdxT񽡵ŧ 9hZzF:Fchh4R[[;̤=yޯu>y}^!H;11Q-*Q޹s'Fqj9jٚrbcc eHR~G,Y0fƍtڕ"ùwZrXlʦM9r$7n:Tc8z(gΜҒݻw_|s="Ϗ{svJKK߸~VZ=wT>=f 5%/z ot """LI~=\JĢf-ͫd^[[[qt,SQ(4nXVZq v={dܸqqHyEk׮P(hԨQ%9׮]$G-gϞ1J5N-G-[s~m:X IDATP<==KKKV^-<l2lmmxxxTŋٺu+zzz̙3@05xAիGϞ=>|8&&&`(~E;vPqL8BE5]h~a~ݻbwsss,4ތs{+y3|盗[eF.\ AYӢ"NM>???ׯO>:t'''Μ9CݺuU899tRZlɡC9rݻGQQ7n`ff&KHH$G-{Ȑ!1J5N}Z\g?ywdDDDЬY3ߟ3g`llLÆ '//;;;)((򗕕Ui+WdgϞJX"o%`e2JRI p]ݻ"& ZEDDDD@J%*i[XllltgΝX'''?xxx h¸Aœ!!! 4iǵxyysNpww޽[IZk׮1rHԩsoVZ(O:֭[%9}l߾t<<<v\|YO+qʔ)8;;Ǚ7o|gyD*ohR!J% GT"H bq \NVնZ.ҕ+W1lg<\"H$4h@͛·'㉏ȈNyPuשˣN:C7;G,&"Rhd۵}+-[ q㺸Bmt>kK ǎ\}B:gn+Vχg^BBBpttUVX͛ₑU+w\\\8pwܥKZݻwIHH ) 6Ϗv C"ݻcjjDR+B@8v,xΟ? x]͛7h]Nu9N8AZZݻwגF׮]-_=zP^GU ::-[0uT3gse|WD 7n$33???T*dddRIcW JDP9un v ZyUJ3@"""""¢􈍍0`~m}pjpZSRRR/YB͋& >g""""KuO4lؐ `kkKll,saذa 0nŋ144_~hтիW?;lL~*9zhΝ)м"GFF+4 e͚5kyUQ*%T*/XW9^(~:c``ĉqqq!44"3f DEEo>rssi߾=_sceeErrp\dl_ZZ={ ծ]ͅP&"" ״D"))V{5gS6'Ν;4}<7L$XT[haVV&&&,YDabbŋb/\QS.cĀؾ};( MrӦMG&H޽ %;;[+4#$$)SPV-9"wwwgΝ씕 b}Ja%='ksTܯjYgWLlm뉝* E7YYymBԋn4r//ؘc4hАn{ʔx94vpxO=ztlO4gN#O>ycIII{{{ ?(իzzulH$=P3g8pTR*OFnuᏓ\.akxJXJMMֶKÇE@@С?%00?%55++V//^O:'E||<ET*_ζm۱`#J0կO~f9r^^9ԍ!vӨqJ Ht4r9!!dɢ+FƜ?RYF֭qssCTJzZ:~$''s.LLu<ȅ hԨ?ؗ.^.tưߔqMv]vT(8** F?Em@IO>}033u2EcS[/a23317`̘@N i^GU|>kB}mUŇǯviɾJ5EDD b}}}!B6[}7ycll{um۶_{7!!9۶m㯸L •W eРX|9ShQ7hGYwM\|Ykmj/;ve066СCӛL6n؀Aݛn_o'OZr 344a #rXf͚M޽<>6 7k_qIBCC!..DO0zZhABL͛puҶm[6lHNNlOa۶mg^޵kgϞm۶­Ǐhذ[IBѵkW"""0asՏڀ((OII G?EBy6l@JJ ueРAJ888RضmIII7~ZFqHfʢCbiiIJJ IIIxzz u^K/>x{˙?>'NÇt޽{3sL:w\u@``ÇsmjԨAVxm6]KaÆ_ή]JhB0lٵkW\o߾ۣRؼy /_iӦ߿ccc9r$SS3V*it===;4FU+CDD@*Ħ.)vss JEaa!OFf(,($++E鍛7q&ϟz 333cna1-[opqqDEA__H{uƍ8<-Y%O?s;wT˅g|=v#'|ٸq#G8D?ccc۷/6mbǎL<D|IVZEb%,ω'XjӦM'>$ܺuKggg>ܽ[P(ꫯo1c.]Ѽysƍ?{TT ͛7?dƌMZr֮]KJJ ܻw>{j͍qakkBŅ!C0cƌJ{_ :RRR011!??>"qAByqڵiၵ5 , Y_uLL B_$880cL:Q k2cf U ܿ9=>{3}XYY具^='#3 == C/)}єg}'A2Z+&'_Q4i޽h">C {a2}t0vW|nnn@y:}ꫯի'^Ku^PZZJZZVߟ'pY$&&bk[ r)zxm2p@"""h֬)!!!4i‵#幸,-, ! `cx<̟?ٳgqy&LHnHK\=&99Oվ秡Т*;wؾ}M8͛7ezxKKK_nnnX[[ /d884ZkHJJ###*fZ X:lܹf̘yشi%%%>##M61~x222022dee1gᘟh֜?`ݺu]!FT*:t 2d;v`ԩ{,..fڴid29s 筷ʕ+DGG3|pӧd6j֬ M֭:tHѣwo'n:KRRnqMzz_~znnWgҲeKׯW[Nxx8Niؼx{{o;6'<~ic-cĈ>EQQQQGFSM= L-ؼy3ٔrJHrr27nؘ߸ѿ6l@^ %++ 6l'|ڵk9}cdeerJƍ%GSvE9QQQ4oޜ7oҠA^ʖ-[h׮֌?DBz:t(;wgϞd2KS=6iDEDD׿*Ɂ~111Ϗ=zРASN%]VܣZ""jD"AOW*r?-&55KKLGu9P(ɝ;w)LUZw^:thj֬;666 6А+WХKgF%ue˖-\7ߌޞur1=7ߌ[ԨQCk>(hܑ 8{,:o; c>OhbooOTTǎ͝3g`llL>ʺ98;;cooOaa!X[[9m۶֖={A޽R>>>^Tԃ/͚5cϞ=Э[*YQ/ucխ5;wÇԩuhR=fΜ)?K[>~nׯ-ׯ 56Ff͚g3ftkAs~ ٽ{ݺu[OOO:wŋ|2]vٹS4Ra\_r RRnr+&nz;Tˣ%%XjsnʩS̜֭9sw^O8wv֖ÇWhڴ ֭[гgOZh!є}m-9=K.ekN0`---100ۛSNadd -[EDDG-*ʕ+ٳiӦ.]ʢEDDD憟ӦMm۶F"Ά :t.+QK/%䤧baQn^JH][Gvm:Φn][J%)))H U 3gΐz&>'OD6ЈB2+z]JR]pV<(,,xKy .\Uhꥰޫ4}ˁ2ʔJJe(JgӓHȻ{^(̿ o|1: pKu1ZhիWY~=~)ѣ9<]vڵklܸ?RIÆ )--姟~M6(˫%$$r"##` r4e7o\KpB<==ܹsoߞubiiIXX|,] r=.\ܹsyCCC6nHii)˖-c…s)Ν;GvSjѣL:T|JY`믿Ҳ.+QKbUII O:IQu២P(^ztfNqlB@&t-5 S*9sE/"'':z@NN_zэ^ꗷK}UsQ\V(.HZ<ō5-Tص%%%Ġ/Jv*.[mURD__Jӓa\ IDATfWy]g5:011A&/#bJ1!!!(U*$o߁3Ν###vS\\L֭i}{ffB0++צLփ$GWWd@KES iv2#E7z{'E/GDD 6+:;uo|bR)&7Xd)5-yPbҥd&7/owJ #cj+ԯe?! 7>ܽ{QTDAJ:ʋt񡃏eee㏜>}ʌZjP(U69YDDDDDDD:(((yL& G٧r'```@F c1l߾iӾ׊ݽ{rL5zQt_-[zWԭ[^ҥKѦuk~NӶؖ*bbbg̘1XXXpM &+bll"~}ٳHRprrbӦMSn] PB坼6l@AAzƆx/j׮͐!C>Xd2yOL&cԨQO94Ql֬Ywީ= .pQWs\.N:2|ad秥~O<ɱc055Zgݻ8JKKtry ??\] ߯Yƍ yGҒ!CPTT)..SN~uNoW)NN8AZZݻw< k׮ ǖ/_N=WwҦON-QԬY˗/uV\]]޽;D˨Ti&x"R&##Cxdd$.\_0pL:JEPPgӦM|W1fK<==Bӎ`kBϏm۲c"##_ȫD"AO__qEtLHH(K.##|koE}6 6`eo\h멋<6~g#nݧRHNN$99Y8Ipp8JE:u0o|6mڄC͞gϞ%xZfϙCYYYYwߘ?5kդCcccd2YHIE``±m۶nevDFF۷ٶmќ?BsO@_lW^pN>͡C(..&))mTeǮ$!!{>^*9?cDGGB`֭U'fǎ8q'NTZ1;vЩ{ddffS߭[P(HMM%::LvEiiiUo9t$%%yO]Yn522n߾ͱc8}4y'Z߅t}ׯc jUŋʕ+ѣő $99җ¹s_rQfMjժ! aooOZ6llHKKA@F!J !J;X_GlPE  I=)bffƻKƍy>7xСt֍˗/s5V\s71]BC*VxSܧOoYb%m۶ڵkLE a}qfϞE-s 7odS^=233ڶm˄ af ŋXXXp=aljj3dccիW6mG& NL۷Nbb":tdeeQfM><=00 ֊iTJjj""[ 7Zo???|}}g͚53p@r9G!>>*dzaJJJ<D"|9rǏ~j߳RQ/Pӿ~E}naa!{aɒ%›SNNo˜ .d$ FAL2yl?јp׋z,ZFall_MLL K.oѺ~7 ӧOƍ߿BA=gĉ/UKAA߿ kռKshquu<~~~k׎ .7bՌ9c_Nll,0qD\\\ d2ƌ/QQQ۷\ڷoxaqq yB jIvrr8+ 7n̵kpttBXȆ |*RΎ]ϓJ+?bۋ!w^|x\B]А29wp1`Ǝˁym/011Ņ`"""uCƩjƽ@'LJ72k,r9DFFǖ-[XnS9U7ۙ;w.zzzO 'jmm5&???B/^y5t|LMM_G232طww{k:L_;E2+ݻU 2ƤrrrD@ԋnDFS/fWgI0CTILBYjNJbƍ 2 6@ꫯXp![nZ#t)'??fhVWgjtQPus(7oިD"˻;CqqcΙShW)SgGv[t'8x ...,Y /( 00(nӦ 'ϧSN\|'rqV^MZZvvv||X<˗/K.8::45P{^YY#u,Z?Xﯿʕ++v_9ԝ$_vO?СCҥ 999,Z///1b'O_~|g]#F0l0,Y7ptt3F~҉|6-"QWP*5nU@SI.**bժUra:v!ݫwor9wҭ%7x#>QFѠAL2(ݽ)ziӦ ={VXA^rG_^<ӧOGRC@@C;n/ {'LUgN&$t3 l6nHj3+AAZ}1|8 ˍ -ݝ-X~=-ԌZF{*=/iӾ +uNQQSPPP_ZA:\C.3q hԨaaas,۷kɯ(sѼ~J{}?1b8666aaa!eees!sd2`:;;nZ>t׮]^o" bH$R)7nd֬YrdL{۩|8 s:t f(P:KGU:֥KJ4o[k{&Mk/o"o^tk_y$שTu˻*QW>z*|=z4>>>:?EDiٲ%};w<ʼ_~&0(Hh3ZcgϙJB__oE-ؿ?fA"APSVJ[3klj[f?Mڭ+rs13Pg&deeadh(8<ӱzzzOζm8|0:cDfPM(kڴ.#"R!Q(bNښO?tٛ>}:rGԨQR:vHǎ| 9s&?L2 Ҙ;w.&&&зo_222՞z???&N֭[qvvC1m4aVw_-NǟAp]۷ҽ#JIU6:KJJ;%%%=zlרQ{>h֬7m"0(yKTo߾ӇGw^6lVڵklݺ/ &Lvv6V"&&Aѯ_?v҅HIIIۗf͚ѲeKSJ(͛GXXBȆ GOO H2e ~~~ c+TQ T-珈Hu.&H_}BZܽ{o~ 2_2^:rrrD@ԋnDFS/f?% NLqqeee\Ƭ*~:c``ĉqqq!44"3f DEEo>rssi߾cƍ/;w:ŋڵk=z48::vZΝ+o#??++JTOh&rMS,RhUP<XYYQV*!++[WjU#׍%R IDAT݈zэ\rr17y|!9qaaatQ+|",, GGGF 5'C.cnnݻ###=ʩSܳg{###ر#gΜ\h e>|ÇEAAnaaAVVVuFqUVJT<^JkS*"""ύ:uXMo*RR߮.\غuhNu D˜1cڂWDT2g9r$}a8991Z"R޽W=z`֭,YWWWR>>>BR_[%FSOjVպ4Q(RzGč((P=VH`!vnKJ(.ykvm+lmm144|yJޙE]= hh"H .h][rԮSoe-vunZbݖkjen%wĕMDE`|D33y<܀Ʉb׏>h<|zٸޫz5 ;wD"؃ZѣqrR-_ 2q u3It:kV}OaZ@ h,vL&3?N~گÅ <l۶*g}voΛ^GbS̞{d~ʋt Ȍg᭷Zx_رs'.$&$ҿ"?b2Ç'aFwwwm ޛ¬Y59s<m2xgBN矶konj; V\ɝwɪիf&--X:t/quucLfq{M&zxY!h2r+SAKN2a$g3hrK VrC=Lڤn/!(W҇ *V^Ƶγ\tJrGQ{;wl&k~-hIWUJb=r>ΝnٔޜM@vҡϰ0’¨#sE&zR)eThZ)=KjjkK =C.IMΜ<* ߥF[_/g~7dya,L&Ǻu ܱgg2@Teܟ~ZOlloN NS<|{$&$21  bQSS믿fS'M?‰/-CR5ؼy3 -frT*? /rz#&tz(..*¿mכ 9&FqA"Fٳg:m~ "8RlBŇ"wO)*&06Aa&-GUQFw/M /S[Q{{wES_هn!WmD 7#gtU? I6}U(,Cr3tV>pTTΝ'܎L&#Gʉytp?#$dbTij'=)' *'g'BJJ/ۏYAXm}FZS|1dD&֝  &Q骤d+3 K CKAgmonCFIߧRuՒQ֑=0r49TBDf'K %KZ[;7z=KFmy~9SSVCpB0z/'8 6TR?,)8w6ߍf~EAuI5:!pO!!!$l c%lxiC +؋IGlnrR)xl(:o/'&Ol@bb"w?*& BYjA7 fIFd֑,8(λBBBSL 9W_ @z7<4o68p  H+f'''ɏA]{cܱs'mIEٞЖj1"=$d=._$C:ɦ˰.`ǘ6]"~Z<˸d0d6 hV5udWI[mVS-cL_*+>]"~z<^!^YyDI6}ۻӱoG-5N-tk}.|qętօʳڊZrRs(=UMEߧJg| y:0'9Q?LƧrKescm+,JW?N~~>yyy#f! ۥK>gڵ;Kcu|'tnЉQFQPPʋ<Z֯J%d2GL̞={`Ȑ!|W|xxz0zLð6Ys֬Lxli;l\& 55'O:d˪mաW`^RˋǏ>b03Z\o6d8ahe_g^gω#< 55Zٍ޶&ECN6!d2\}q~3` 9.>SwHTNw;Odqu9mV.bzcߎUem(pDd2&Fo̫y[8<_\!cߎ6;Y=P8,rW<ŗ:Yϡocmy-ΨUl6qۼfSSs@v>C"WQFT}QA"lPo[%Nϟ?Fa9RZWh,úN'w}(\u8{:c48tU?5&+-ӢtQ@P\:^~6u1UƫԎ*u ymj;٤1\{s^[n[UT%uZJ%m{\2t#r/Ewe]Q+W }KKgYT*jkpwsX/}Mm?r;0o*Ur$pE:@\N]=<ۖ' [~ٛ}0GN,yxU*]gl407J/:fC!ݔƼ@pb41tCN%VBL>WWjFGۋ"ڣC=8Q6stNM֣Qklvt d4ÿ韛ЖiIxhWcat;^܀+wvX]ve- F d~ɦn6f3sE&QGe;;sd2Pk] L_M[^ۂEQ>lD[%q`͒=!|'["?* *جLNL&7e#˨0c[X~Sr'9D?c.MtEb[(UescIl2zSMM ?]k^'Spsww~ ®S/(+WN3kndN;<;yff[w jZ"f&EC# U31sn:zME>$ٵ({s6 on};bzRSSÎ;G$fl𸢢nߒ4  <ҳ}0MW}mkZGKHCZÎeqi.x!}Q:>}}@2kZ]Ekjrܬ=O( 9 \.EY$FwC(Jt:tm׮=Ν~ؽfک <<4576Wh/ݫ@ ~8* kP[we2)Gg.ADB-S\=}/W5 &jkpYk8]Ax6 x{rד80t}‰O0l L05s^Qi4j (Ż7uux{QUT ee god[!Ię=gF}1RM:%%j_`ȑ|WԎc}B^oR\צ@ ܚLC] Yk(=Q]F^]\``x9s]z?-W?W6 @^{2DP 2WCQ2LF&L${50R1 Uowq'[^Wm`ޏ&9ޱُh6n-} ӐN4'LCPlT^$ImX└I,yK+Ŗq-hcxT>SZCaXE}T2Ysj)z0AJs Hqm-2EǑUGp 0gq>;'֟יJ#Q4f( Bb^} "~_;+h݆R|[ErܜD)  ]t{o2A`+k piټy3sFbf2i-1mCZceuf DZΔZ]E7"ߕ3Z]@7\UN8[EVʫPCu͗A &-C|?L "h׳qOơpVp|%2wk.Ƞb$ߌ~,{ރIZGm}"\tHQUlġmD?LK܅ԥp55Khqv}PQPU\%Uv̷o>z>9Ume-U竤h4$%[ocزeTnǎiAp#;>auh2˂\|HLg/Uӛeێ`2At'.Ti M⿿͗Uh8e @Zir{g0 9ms 0F.tWBd`k84FgGO|:Hf1rHd4qh!TN>ܟ'2qR9?-F5GCȀO2RÇst#aIahI1'5%$u'J`:逮JGRl@P2> _C✜ ~aI_Jbڴi|ݺu6?͋dBT*1 |N7̲ҋ:jt'$b!ըh8{,>rz):j͂`硇">>e:(1 RF@`Vٳg{lvn׭[wߍBq)\ۧ~Jrr2AAAhHKK#((6jyfT*Ǐ' sΑNvv6ۗ{I&ƍ%_oضmFin:ˣhjM<`qÅA,hq%VCvYԨ\-fnį&Vs/DS۵ ާVu^jYl .dʔ),[ &GIRyw뮻q+xg8p`?S.\HQQ6lࡇb픔Ò%K۷/'Od޽ 0@2Gqq1'Ofٌ1Ç`8==޽{3c (R|A}ѫM1H?Ggi1֏ontRzRR˵-j߿?˗/GVGrr2Vb大GBBV^1eVZ]www8w\駟-:v^~QsZSk.Z-J9Z͛gѢE;v8I&쌧g}lZxKr B@p%--7R9s&=z`Ŋlڴ R4h[n_~}2hРF۞1co6%%%|'deesNv?βe˘6mAAATVVɲeX` BKxyyIQYY7L;'C+MӥvO@ >G}d}|`S|NzYb AAAT*V^g}\2B-̛7LF]]ÇRY>cfΜ C=Ĝ9sU!C0x` PՒOŋYz5;wo߾L4{OOOɍbذa|wL2WW+OXGFVpC"k@ >|Z1.%رcwY%XjwdCCCjMFy衇ntW{ kWs{LoT*O;N:E8jjjرc*l3 @NN΍cZFsu/@ hx/ -¢EA,hQ,vh4ylXdĉv@ r`@n1Oq+E@ B.>47s497 72LDhX n,XT[EhR4WJ(H/|f#A IDATtü͛I!wK.& VmCoӐNRY^+Jb=E\]"~z<^!^YyDI6}ۻӱoG-5N-tk}.|qętօʳڊZrRs(=UMEߧJg| y:0'm8?%d|: W Nv8͍dȵZ-:AgKpekin@ b35)iBȀ#q5->ZLPT*\|\r]qs?'g>wPO 8"d@JW%hKp.=ط#*wB9$O3&FRPI9OcܯTT!y' I 0jR4$M"Iзo):T$؛RXb2Nge߾}3sFXsndcX cZ-zlirrrZaVL J2qzg۬`kein=Bȯ5BaF!~~hR4 ?{y?r`/?N]e1c<릮^tA5GŒB7g\57hi(ڣ}ԩS+:vq)Dc!g * bFCxz-QWJYv';I=梍wه4}.?Ln Ѩ5UL|kܗ*z$Vg`0P3Fd(-/h K dSF`bX@ h\5&y:Lxz޵Oku|=1M FjuFtz:шʁ5;VH!\j+j9LUZ#Z,qtZ^6ۛZ&))A z `01bWէ+źuk4uUVK-**b|I> H2 vj[Ѵ 6' NNNrZЏYpܠܬ@ ~gĢmNI׼yFqIII vb3k{ܹs}}Z׿ .~z`RZZ?LyyT'++6Dk2-vL&Ca9u'< .@p.غc,C&I3>ˠt955 %jLj }мd0Q[^˰ZE ųMw3ؓIQgӝ4R?`+CIgo0iw-+F!AP[QKR;ySWYWUEUP]] `/c7F{XĖigak[(R_K%z\4udfR˪^_wXβjm%%%1dΞ=#לYձzjz!8!;yKڋTT\z`Ίv)n͕h93[uq5kmm-...?}]~Sqvv6sXXKBBBo䫯"$$oooʨfϞ=֯$##ݻws8q:6nHEEݺuCRVVF^^555hZ(++nݺqIJJJ2dTVVvvv~47?8֫ĭodF!55[r^^* %p].VB➌lCy4)=;zb2Z~,F.ig289s}9O2C?-F_kȀOmt[&>,_ ^GcG̤Bb)=QW: `/JOJeCYFrrr/lVt322Xr%˗/gڴi6 >–)4i}ѠA8tMcǎ[nDGG3vX&O̘1cXh/^Xם;w.O>$c9Fa0{l5k}?f`֬Y]>Yfڵk -[Fvv6~I&1`RRRnw`VeZ֤8pÌvMEdk4i.j_VrMk/4 "-hgL$XM܄*ٚl:%uj̕ٮw聆#Fh4zgh7_IvյuqKnv:uݣ{IKK'Z=-O!4 K#.Gsp$]pL&l}f5[?79997 i)Xa1[ #E@ ܔt,A1gfUNԗmRCkrMx/ tKt&gm~{/uuu̘1I[{7l`,:tn:kwqO?m?gƌ|62kfeҺtf̘!B,vdBaq.'桹|+@pk?@jj*C d62Gjp?CڷoϏ?H>}c׮]a1KX̫msY"""0 ,]"FMDDg1i78q+WlU_7Êog裏xYjcԨQZW^yo :˗/w8qm۶ӧyk9|p6olY(vŋ: /pl"@p МbZ hYJe[>lߖ4 6l`ԩ\ŋK+W | l2x :t>HN>}:-Yױf|L6  }TxPռdeeuV}xqwwg֭xxxPTTmbL& %_?P%WJ~II+'G~.>Mp>X(@ h&RRR0T 4/"ؓ5==m4d2\q~oBOu-׿JݝAu+ux .Э[7~iDBڔ$&%%d[VɛBk+Sl1EV>"5@ hш dMJ2EDD4𿭏A+mv5{-aUUF.c0g={^@[?ӣǥ}&j{}#vmOϟQrXSiDFV&aJqV,ald3f`ݺu6eFmR? $7… Yf t'}'&L@@@'NsθmSA!%JqpcDeK.{>LfD6mfґtޖW_Mes=#Я_?Ǘ_~I]]ڵ"I4T~zƐd(T*W DR[+M*4+LA!OkdԨQ9#0zhz!/^̦MxGfҥ:uѣGXf LJ #))$+)ү_G~$ C|Uz@7a)woˇ=]Q CѕsY7ZzͫJaa!Æ c<8;;3+JnjW@`R)rNhl`_N֏o,[%-yBY 4DDBBǏ'--ЩS'ƏOII$fDEEIcb+`t>0wwg**j(.]Eqm WSSSotǞaj6/]ˌͦmrmMj7 #퓽t;vd֬Y ʎ5ˋC2tPy}wA}J\wn<@ ha^/D|ad;,W*rM [CłB@.}-~bX \ gIΞhnqTwy'?ȑ#G"99C~z\\\x)++cŊDDDH}***"==,u&?w^z@OTT}q}Qf̘ylZ"@ ={pYuqwP($٧~Jrr2AAAY]]͚5kɡwraN>MAAzbСd2pss&[nd=K.L`O|t:ƏO`` Geմk! IDAT & ˥Luph4TWWI>}4hn#z'Nٙ7rw`2HOO[N8#ٳgqqqڵˮ46nH6m?~4 >\OJJ=)**gժUq|GTTT0o<,X`w :%KHoҽ{w&MիٱcF"^z%.]@ϪUoSOo1cׯݲÇW_^::zMMaC$hZxRW ^\#Ze˖qwb Il2ڷoo#+--%>>+VPVV%Kjygؿ?6l@0w\{1,X@ZZ .ߟdbbbl8bΜ9w}L<]v0o<&NHuu5 F +yyyL8WGX駟`ƍݻ{qFi<>>3w}4x ||| {qwwg̘12fv)Q(v3Q=닻;;wtXw|TVVRWWh4+ lOC h߿?˗/GVGrr2Vb大GBBV^1eVZeMggg;F;> wڵcy>c޽8pΝ;豇/;wϏ{ ڵk7Fu=ѩS+#؎/̑vݻ9s搟oͱcw FCEE\TVV)=^|9yyy멪ÃGٳg"((HJB"ParܦJI?z<<<c8z(2Je===),,>_OT*W, V-M n5rssmwJ̙3ѣ+V`ӦM(JOΠAغu+ ۗAmsɜ9sG2}t bL&;wn6d2yʥC&%ɓ'Eaa'{˖v]]՗鹺:lrXђ:!!-[`2ydKxyỷr;|'޽;w{ni.ϗVrǍ'1b1Ivv6m6i%Z]Ѹu:MAAAL&1b]=ٍ<NkGJ~~~ֈ /hEX G}d}|`S|NzY͛7a ;wk׮>}[SN0lgɉ3x` 3<0`&NHΝIIIalܸ'''IkK.̙3\4h+W_f}_v $G.cxW4h{~9s`/l}C.S[[kC>FVάYP*RENGJJ RV^… /( F}r,_b ¯8''JeWB |` Vڕ[X3eʔ&imZذa 9jsȐ! VP ل Z6g6ZCv[com?ĤT- %kP,@9t W8V+XU$`G/N**NJJ9WJ0ٔ+R+\PcqVoU``ـ@J;?yz{z{fNRLxgz;|snJ_U}Y}駟oir&9^vw]N9MPp7'Nfܷm}g?ن;~˖O SyZ*i>9ku;RK{ ' 5Ak!)m?-}f.kO?yœbOLI6FWZAc;wj?՞~T*ab;0au ,˪S};rN]ao>1I'Nue h @%DJ1y睷l//Ą_E7 >ZʖdԘF۱c&''_5[NzuE uhrGmrbzӉډ't]y uoΔd s>b0>O>OjÆ n0rOD'V0s;t¯΂b8&47{,ǵ>( L8/~Q7neY&1lY\q(9;R;7}Eiy3/qKTFOO&MQ}c{8v._{ %]XXP\V Rl0>}+_Ѯ]wK۷o$۷O[lѯ|z߬}iZf0d*J-k"qI%ِ0>l٢x@7x:?x@^{:{GuСa7ȬhR}"`=ַzH:p {׿\.[oUv7 }k_өSKKڵkװdeYr]%u"|0}Q>|XwnH8|.첆~ ~':$5yd`8>e} _X&cTa Vز,9C [E h wbbBRm]D7i* *]wD'`>0,+8npo [Lj*8NBy3Y }bzB kȪ07x3zL^A za7@lۖQL$[jTwbmJ%UL#ňa (F  O;9ݼoYP,݄>51#1-6ll Zw;ЮJm>4\Ez[Ǐ?׬)`%lۖnOёn|mhffnށm:̚=Nы; 40OI6  gsbkv4 |W;oU"ٴi@f l3%,ˢĨ1Aɰ%YY)2&&j^v@FEORIj}yBu~@Ud֮]jhڵn .0vszKJ%xvmLұ 3&am 'L@)MLaj{zguysϕyaFjb19y$Ax{2Z&cOcZ2R>~/\MpY[88).˲,wkwٳG~֯_[o Hjb)swLOׂ&ҥמi6ز-K =A9ZںڼeJJ*mf@rpVg{aaARi4σm6?oV۶mqgzxiͷ3vpzGOS?ɟU*jY}hWyIZ ZKf'z={*뭺vkayfffnZ- 6?lV͛7K/u%o}N<)Ig5)1np,4=͂f˛C_(Rp-ALC~* nRMW_J=汤0Z"ekoyaP(h׮]nƏ&I*˪O&D??d[nX$8iUC7AePhߍ~>+#=[^e^XXPTRRv@`&i7pgeY;io~+pv,z{ Bx^}]FSl4??RTKXlB`v{i[੓}JbY{ MkfzT{f~;}nqN?视f]Dվ:L}b_~&j*. BԢ[czWbYVbSkq[:]XZ^Fi6H.lYzn`ncت'U{<B@,et&l$Ӏ0޶辚S4 r{:=N7G{{MU}_w*8O:OOiMOOit]sՙnƬ_nn.<%b(u88>Ѭ$ۯ~ė&4mǃ햀j&H33l/ގ8z|ݤ39NSH"vA\}M`.A I0{nڵ=N;ۈ&4WN>~^~l+v-[mSrBODOD9BA}?i\& kpɍF{2f|^H~~jK?YnX#Lz7TVUVk9RmFh ڥD 6RbVZ^^I !i4mԂx@rPX&Y;@&MLL\.˶m& 8HX21m8Y'-1k[zS5\?g5 m:juYI6D╂N%VpknE&WF>aY'R^rgffFGLZG/q?1 'lHLOqJS,饧uPe%m eɎ3<;V%)@״}SWJ%- DCnai N.˲z%OQ/>)ٵֲn'%Bb)wttk;o'p6=*^Im/n:,(nBs aeKbNw$Qt:$_7I&@n\Lt}̌`Ѡ70^D~}}_|~ٹb.ZFݻwf j3ڡxpm\%jٟT xNjs f۞5.yvFb?>(|s'˲亮S 1us;:^SyXMDoǃAه)6KqU*OdM7S/7-w%>dAtVmM2]`xYuU3q$ *˪T*CnKS~EMMMJ@/'r\8%RJUȵ(#(K. >rmJFF),QbY쉉 9nRN,Hu Aq0µ8-JVJu T vZwѺ##P( q0dR\^u]Y%q>!]#b@?8ز, *JTȐ~LdY<(6J'"Ti>)ygMgl(n.SZ$[ZEz{XS8z[ZmҬ=nrR0 dEyHc핉N+}Yvt?fx1Y?+эOvZ==ykW_vv1{47yI3'i5]:tW pyfgg%'ؔ/z2rGJEAȹ; JE/x5mN')O^|1IMN%(N䫓GMyg=MݞT>޽{ꫯnւPN>W~6/۟cyOSEMMMɛm*?%t_^ڻc'oʓꫯjvvV|Q*.IMMcONN6ɽRqlzrraW_}uif a0^G޽jx}inNB/_EW^$IE5YyXk[q~zY::Ƭ>Vt{bQ}U;jc}iǗjW+նaT^{w .y=zTGՎmE=z!Gѣ,JoAAe#"I433샼kk ~q" TTT^\$Mw^ǵymWT&f_huj׾t;6T T U* ؖе[ߜ'OꢋޢJ^xAӧ3g^k]qM*a;em] ;\mTfj7"H0=Ž 1+>@D{rw>Ҙx't-I.Y ~a{G?ԙr؝M6=Ȃ}Qm|&IG?t ʕ,VT*WT*WUV5O_m=3+T*o}KntҎzZnՖ?FwEvoȸh j}n 2ɤ[%qY,4-&MA쒿~G}@;9ҟ>ݐY۝B\KI&KI'0 ϗZ)63y#GTLC Qoz±-MrmuvL8rcۖ'0<<Bcf`L`t|F? =m04[OyL9ksn8={7_KKADF #enr;3E6!֦hO`wIio6prI*'-]>_/'Lts=?}FEsұI.o3|Y;Z=GcN*}fVmdIW^^Myx6V²,&Og4_1$DEh׷Eh.ohxX[^4g6N?f#Xe]>i["LHR?cKzD5i[| =Iy9 膉%]XXP\V -ޣeZm{Yٺ~eZ-lvIO`l^N5Ir5??Oع\.ŨHV_8A4"/ev]8ͨ 0qm((ɖRS-ZOeYriT/;EP@/LlY셅J%OUk'u`QEP yJZOĄL^qD7_~O= dYgrky;R]46C2r'$umۦE[ (q>-aQ}"kF!BJy S'\uU.{>|hNT'> p ڹsJ3@I.Zmv|ߝ &,Kn\)zeFwҹsN=:|֯_cǎi֭=sK=f^T|D4%#Ǣq^IbI-$@iP}]aA ^v"Z}S-XH{Pկ~Ukoou8ꚜWmFK f;k GV|nk\b)|ķҾ>)6= 3[KۆHP\koArV]W0=oV&K/՝w)q$I7tn_^zmִױY< |ob3Q}Zz͝>er9xoQ_~l T|p*~ToffG xtN fOJҰ@7liA2P 'ȴj4T0I`PbP'|?STZL2mv]Wml8lۮW A1@DOTH9bVK*iE"@0vsz1%0.r\mbr0,ˢSk=LޑLdz-j>)@q-@&rc]XXP\^63Rl1??JR+ɖ)>Bm3.SLDJ>dRYbV8R3A@p=@&ɣ$Ɖ9Z ˲8NC `8ز,O`ͳuGNqJQ `:Ŷm/+Ɇ (TH;bh>8N-:ftb L/eYr+JXy"Z;R;zL2؂ e'>qbz>F NzS\E @)EAOqJQ ` L90GO %R>vV019)EN1@88)DN1ƒeYM) z0NǑm @nOV)6ϫX,e[cʃWfyv}{:wu- ̌݌<cn.S\8 'ᅡVNV@oeͱP7s l˝) vE, (h R(`~bT4@*lj=Ŗe->;B]( .0JLlY܅eU*a X52Yn. ?S}s{."=‚N֭ooJ5\;wկ~U?m6/&''|Dk֬Yv.sܰ=4/^-..#9};ixJ%H߯\.|;zt 75{a=Sꪫk׮ ;zc5{4;;W^yEGGڸqyۿ|A}ڸqfggkܠz>}ݧo8O,igBA3339ڵKW]uU|A=# tܘ@8:ɟɟhϞ=ll>6nܨ7[5;bbQW]uU)\@-u [:IؘGyD_t7ɓjϞ=?'xBׯמ={~7w[Nwu&''u54JZ~.CwjÆ e'xB333 믿/z衇$Ӟ={gϞu~z]kv&[amܸQy^t. L6IK'(֙}czguС#8ȶm,ѣGݜLzGt]wi߾}nJ\p:p_uMIǏ뮻ү)0PDT֑#GOZ~w[|F-ܢnI7tlցdu=Aӧ:s挶op׵s99su]}PRY:馛t-4qcrIڼy>O4̶my_#n뺚SR Szs i>akA\?^}7>{T_c4J`c U7O̙3Zxu6]9|{>q~C)'#iӦǶ{}T߾I/ߧ+Ua*aU;ߕ3<-^jUj3zD;FhvZѠ~ 2ibbBrYm5)@Vz8Ne^{MWNqZM@o_>JjjrbIAPURw{6\UZhG dTT*KVk4csC 3r$^҉LlYV-S->9mڴIjUǎ=ݫu֭I@v(yMFZ;sϩ:p~h{]SiGPeiffFǎӺus~~K6mYg]v7=2eYm\.iqqq)׸4 d[rIeX, *(}3o%\u//tK.B=䓺k W \N?l_~%WZnöbs#S)hLMnxQKүʯh߾}:t~~16zjYN7(w?ypF~CO<{9>FZb \.mZnϼA 7L.Ӓl~u .޽{:q^U^u2Ēt9ki{&ł@Fi5IAW_z@P}RpOx ]Z&`$mrs9⋚\Nңz6|Α$=G;lİ} vws5msDPuxd*0*0bƷ~$۱T$ @eYẑ=w֝w޲Ngyf8 б'OqZx uW d{~MСf˲'ާn :n0]XXP\VRiXpKsFYfZIRD.[1\.ݎVFIJ-˒=11!q,`lx۵ralJ%UU&H2=r4ͳ뺲,%S#䉟q-.QR &,K‚JҲ@󅒤˷moiϫT*zT@ֽv&&&t 9gkiD`7)8m@MH.~I+*JӲm=ĆTV8֯\7-nQ\m۪UY(PR @JzLMg;J%9jPmٲ,6m\'P>V m[Rdm6008*Jc@KYAovG1hahǑt8z9FsikX?1hy=&c71vzL:n^\s\s\sGG\#\ٶc\vjmgu[FځY,ՠO m-ZzLjm5<}Zz,jǢۨ?fEcYǬ}Uv1lkX=~ DZ1֏#1Fcc4ǑphqX˟v1vz\v;zK뱣kkkkknqqslYrK -,,rߣj!yܬgYֲ6~m.gYi[>;}jO{~jy.z0_\s\s\s\s\sG9fhIENDB`stimfit-0.17.1/doc/sphinx/manual/images/trace_selection0.png000066400000000000000000000216441517235503400240240ustar00rootroot00000000000000PNG  IHDRxsRGBbKGD pHYsaa?itIME  6\ IDATxy\Uese Ph9MӢ5R&悑Kl*.䒨9nіfJ(sIQ@LAջ@/\eBe>==y{{sߣf3  iTR PJ/$Kx)N wI=  5&QKy)N wIrAz:O嚤ƄJG1Ky)N wzCK ^ 8)='/{g'%R'ɆC?x倕>Eڏx)k#N],3Lq:{[QJ)@Z6Yeoydz-S#jZUnŅ?h#&.]l?[@Ջe#^8)4.)"U֚#]ڸq:/h1^Jjcڴr%rMtYޒw'r.\!P*KSQYnfڵlĕʼnZ}:߲Υ|:vbY-A/IqRz59W`wZ:;V4(xM Mh[E'~+.eSboTVpW).4`ĈJi.Ѐ*"KR'%W88q\.E*FkYc0V|=rr\6v F*s(Eiߔ6*NLvmWYb0Z{LfZIgN&ǯ8)NJ@dж W gfsoK7iFEu:t oq'&,MeeI>oO4*fƒ N -d d 6r/8)m'eWAAH@A  H@AA  Tgkˣ-v#^ H]A$  ]A  @>h`0`25U*Z- Nc'5 MK.o>233묨O?49996)B&Mҥ nnn )^8lP`0~2dHmݻ1cLKKѣ` 2$.J[+It%_?bƝ7Z7//ѱUk_I^$lZyъz&}sϛK&TGG97wꢗ{9od:hL˷KqRi'oK}+ٱ= OY:;ɲDR0[ϵcqGBmwƄ,}Vz?kKE5+f2ILToa$h7K[-\EQv?VK;ыxé,Cq5/{qw%W/둗8YNޖ<=ppcL.|bY4i军W;ì<ӘH85ٜ߿fyDN'}Og_<e\+ݚ:S"zNJ(fEJ- 3{+u4ckL;Y׼5Uu`f:f+G:#?=g/"}Ly&6We's0TM.ݝyYM΄S~LlNz8)N֤w|b yjF%[;cUTPLԜlܞont⭵{_jּW8|YYmku(O\>Wk6z3*K[Y٣x@'rrߞE dQqV'2s9w"5Oy=OZ,rJ,Ґqfށo7X}V/̏_n%t>ԋ^mqq1+W$((͛ϑ 77-[ñc1bhZvŐ!C())mOJTZ/>X<莔wgH>(۽Mrr2xYg'ɻd{8K}l6c4pwwߟ[e]EǬ;XA?`2R:,ik>LP:QA AɆ:ʍ=I' N'\@WT z ш(#/KANmڴȑ#u^wjV2 =zMʉS/q;٠z>}'^gXz!ɊEnEK[/qRZӓEAQ:9F#j9oWl0䚥x)^ d=w]C7Lt:9zuKR'I *VA$  ]A  H@A  H@AA  A~!O8sE%:Y"uEFΎoE#gGqRWNJ@9FΎiޤi-b6+$%p8)+'k,F&WTh4&ߋhDc2+},(T h*D''zRtwqRwNH@7呖FnnnA]RI׮]ju64ԶZ' s_q6B^znIgFeǣGygʵu'ΞOU(OM(]'dt@ZZU69rTzU||}}+{f]ȿ^?M-ڿBEgE=|GJGty2/?Tz8ыB}uFd"''`ܹ36[I$ըd&=3~}Ky{>e=ٌ5<؉ɓвE3&NXimFpjԙ8)N5Oll6u]\Vc2=\廬8Ս۩?X„$8&UO1!yML|&  r8{5ߐQ̉Iq?ذLxkF#̚4}=~ ]~s5ďcYzٷ)w /O]Eْ&Kҫ~:KO&0+U*0^oB3jzB Bf,Gg,;у'Kax\ɪw zgz&쌝ŋ}y0nh] ޟbҭKoOoOz?׏fr˜Czɟ>86~7ضt&^x>ݕj7Tc{ʘaLK,>k6yM4~Yǫ/_>-ݹN:aY3:};B۟x뿖xpŊiYiwO$\;m!i|4_,V-8`%;'2i#Kg'ٝwUe5+f2ILTkQT WsqT1cBg43@11 yo}iڴśIx7jw;a7{zWնvam>$zlT6lw%:7Um\HŲ.hͧ<<2-{Gf/(~_f}M_/Yomox "u<~0k{ٳWfdqFlNa۬%`FlG\8L'>"tOF'$1%+E˜RX07Y<߷?Wm+?.y:u2: mҺn;wqu@ ·+"q[9z/\Z~_lWEf6ZN[U ۷/:31mѱX6sClY$N Zͦ 3Wf.Yè>~ڎO03 Dd^vEsӾ9@VRA1Ss'ϼ4ZL,,md7x8/e1q3Мuy^vtVS`)[N9Xo/f`zѺ8cenjܩ! {&|sf3|vW[]SVٶ-Gg\~ ˿^8`CX2GC>DmbΝHeM*מxRsuxrE dQI¢85iB#'5W/%aV۾#(P.@q5Vl#!Bv}#Ie_NI yh\0ٸ4jD,gѢe+ƿ6ەמ-^gi&|%-:CgU!U{Y )tW~``ۼ3w=9#~J: WF5rсNyaնfȉLtu/Uv?pPr>ˆU5vl]UlLk,⁣1|zX'5CWhNwшJt; &u7zѝF0zVG Bͼotp=Ӏ9$w<* k Q_|O !f}宽e;sHùik^ _Lۜw+4m+ (cb7PEѡpxf/[yWUm={ #1>rϮYN7f:[FL ekxmZYRTrbT*__,{ᓘ[?&kX2+4Yu/ p/GÝ{biUnT ᯎ @MG2ȷ`Ce5mG>}ZpsiLY\΍ [Ό~hQÔ9fl[#%NJdpR1ۈ 0L]Ʒ~Kvܹ͉e222lN,#4l ]^y'L*7o~}E-^Mpjs0L\Nj59\:OrPd58)m'khڵ+V9=zpA]888'}_q*lߦ/<8Rq8)Ij$jZ-zBQJnhC\w˭Vܫ ?(ʃ0Rꟓ5v d2P+w>ٯ#yx 8s quv'z<]lо/ql]{JP3( :;ݪ8);'% :#!BF%U  AA. tAA$ tAA$  ]A  ]A  H@AA  GjikFdRhP x)Ph4GZZRk׮hZBW/)))uk[yZ8)u*߁n0HKK??J[F#GJ^tY|MOpD}b@|i#2ʗS/:䤯-Ԏ$k9?zFrF7f/n2ɩRPZMΝIMMEQ*:3Ʊ$.O'=g3)G6YA/q9ys=YU̯|+7 \MgwB,m>9B >ڗРiCi&e\F--_sU4ۿk6yM4~Yh3]j75 ?䔊rt7ͺpxpŊiYiY;?4&d{ܴ ^{|lu[(RYE㝞`%MJJUV~'z㶐f>/JSV/dU\y-eߏCHfl$[_}| cV,㏅Y4~^$tZN[_GE88k1h&E>K}Wi军W;&r҃ax7~oO{8xc}D V(-yxr-Ȅ4ұ;nM?e6o0[i+Qg}iue3]Hru!8y͋ŸZ-˼fk5.. RZ^dᵘ[@eDs#qG[Qh\h;>̨'釒y-jCK[:kGl|[iH)vIDAT|x8:(͠VEwzz^ }r/Kq9Y[ oYM U#ױ!g燏sHOq%oyVٽhEs.œGoe}Y+.m!uܖާnjZBo4(fHN!&j?esD*k"'UcsTJdꙖuNj>.V~("r3ظ N|x)N6'+DRx{n8 V$;lv٣CWhMшJ*#aSb,kNwj̽=N1v'`1.aΫ#Ý.O8DzY -i \ʰ*sos]д/ӈ7Zd\ȣ0[i;[ȸeD1\SczaY7ŧ"1,7c11 ]QP8|8_]6lgUfr5[ڵkGΝmNasaL``x)/In;Y#=tFC׮]IMM%55 ѣAp[/qRhP~D&jVK^P҉f3fٮx)p:Ni(BBmCI CA  H@AA  AA  AA. tAA. tAAjrONNj N B6. BGAk@d9&8IENDB`stimfit-0.17.1/doc/sphinx/manual/images/traceselection.png000066400000000000000000000200171517235503400235760ustar00rootroot00000000000000PNG  IHDR?sRGBbKGD pHYs  tIME ,4>IDATxw|TEǿnI!tPZ(KҤ(> HQA}  .( )") ]ZI!ɖ[?vlMC$|&3{f̜{1Wt Y@@Q@@Q@Q@@Q@Q@@Qa\"!\!Ix $$IB׈\l 뵌gNMhIĻyxi&N">^#IFBBdz.e_ 5b 2_K|FjW]dIBZ1wm+\T"$9Ev0 fEώh%lGDvD<"6Ţ~︲9ϵt]/˨gư4mَf}qwp) ]3fY4durg_2^GF~xX;.!ljhَMK ;q Sƣ~﯏IHd"ʲ!IH$$i6Ĕ,am۹uw"2217M"Ym+v&jilڶ. 9xzY30{vĶsn#V̮T6!A qnce'o5bZh[zqn^Uq.g _RC%I2bȐOx)\)L?^skcn(zV M)6Pfl??Hʧ11~iFL2KukӴt 2}˝Y~JetYH ((Sg7z"I`g`SeTq N[BBri IŘb$I[B>y(龻R \ /uqˁOhD9C9z};ަ}i8 @/y]=!K Tڂɱ=?eඞk90y0c`Қ?9c6Oo!؁E{?yѦ|(gND)(;K`aLΗqdӇ8hO<(_+tƄլG_gᝮ̚U~y 69„[PV#Z-~]VP\Ƅmr+a@@wmH~D5[J v",1<<҈%:q֪G'"r7j$7zdUn?LZy7KvDg1.b7oiD6o3"OH>UԜװiF'K] @ B#!!!o4,a6Z!%514-IpI)] u5܃!#wQ`:vy߾y=s\O4N(^lR|jmDw\JÖ{%b%Jn n#!gE{Ej07Z֦) !,Y6 :W} ya36|B״\O phNhX \̱=cwy &0T*nLgR?9oç\2+˭> EqiZ&S0Jnˑmzy&%>34,bXGS.+[]cv)έ\ kgJˮ_uy3PotǸC!&uWp4U֛AЫ ~ -s !9^ߧ(4ՃP1nd4)k"8/K_Dd7$ `n׃ F w\2'b^n:%'!3!fa4;UUAU zˉ%iW&E~e([J2 GP/c6k:-y*>rMm1"vU`2be[=uTՑ!d,Fp cRir79!#ۗoEAx[}jv&͆jap8PUՙ4Kշߧ}".]*8v66[".Ш=qQccnΜwN>xw>c*a姟sb+B)17' N)'!66+E,lڲUaY۬ZM[S$ЂnGU4-c"4}3(Z6fa|5A#ZtXڑz~x(b0sγ\|U`͏xsV9xqW+~@6m} 1j,ǏH^B,e7wƍbM숩\"c<+UBƊRF0;<̚ 3"nﺮ'sqkwa5C|qd ^e}B(ﳫu%)] "zicY|\@EUslgΒx䐪n-44B UU͐y2uhZnDy%Y$"^A'h(V2rIrKkDwMΨ jwÁh04$kP44UCUEM)pѽmgDsV?BF̦8k̞cDEE{Ŗ875lmpDt:ҵt)8F7,xnQݳ7~L- ]OκfIiݍ鰰@&Ljo"8hY+#~ᚚf,HCᑇY3oѵr'{Mp(ލ5=D&0o5Kx@嫘V^BBܵͫ/uɑp(+~Wy4o ᦻ\Fvj,G=S\qj3_vk#mP-w;g(Bx)P1cIa]1= qBK5%Rf.SR,<c]n`6KQ흥Fk]wgV V`s$>WIx,<^OujB\qkYyvQЂ/0"Mp=nOy3I8#)]X5]%/T읨N%0?9CNvp~Ly}~iV ! D1r-zws0l=s,? XyT)\%_8|ӎ_|7u!璬pzgaG *>fO <3cKQ퓕 ~b"y"j7wVboכ9 たдv=j?j{QL8ʤmiܤ\ƭ] iAߠu'hk=A2as,k]#e;ey{b|Ew{%}N   DDDDH cՒVsR=EQ]1vvF9?~~~a6g6c20WDS`E'm٢YgꜾPUgPnÁfjȭgSTvi.6;# HLɲhAתUK%d2a21 u%R+:gi\= [g41Fe\r+9׫u@%I+ƕbZCEB`ϕ]UAzA,"*h h[w>"9wi 9rM< DUPTawX*6)ںd0<9Еt 8D@#?#~FM&& ae 1{a|'u=Ś=_DFz5PgkzKv-oѝi:$l LMF]}L]|8 j5Ǩ!+!. mwU{rӏy b.1'ѶES1"VݡS:%)aɪkէ8nkJst'a%%"I5}+ hA2C@0SG\P'4&jx4ulJ"b%_ ܺjY^ԈzƫCZb8$iF$I =T5^N:\ݰkvOC7(D=j oJg~h^6ύE5T+z} 5멻eO呲cth<̀9iC hʿKHDЂFDKQsQS{%)DT9e/}I׈'̔v5]&,&5]u,ebj h4ul-{C]snQ͠kB#cn#|vW`RY]rtT@fjDOz&2#K~蓯AhuՈInsJZh`QIYU`19Xɮ\Tb:]^zA%hD2 >iDM&IyRfAKD]&dWtSndRƈHCMwΏSK ^Q\󆮔,/yggx222t9uPUPp8n!!ouS2^pɨk!M:L@gX l F05ム0(+y0rk|avdI\ш9@HH.͞77=x*!/sQwAy 2d' ?53X#*T\45uu:CIlsBpQ1P-3O4rq?́iկL ++ oP3a" b#n-=C*R ONu^T4Dk=²KET>}u'Q;0VAT3b(wVƌúc1$*>ď3>!rWDLr}3222[e3i˘(]Y=Ҁ>-bbPKTBӍ9 R%S'g]E:?M)z޿z2%nO[ҫ ."(bXC\ B, " " " " $;=VIENDB`stimfit-0.17.1/doc/sphinx/manual/images/viewscalebars.png000066400000000000000000000371011517235503400234260ustar00rootroot00000000000000PNG  IHDRgsRGBbKGD pHYs  tIME6)w IDATxwx?3f HФCB^PD4i׊ދJ󇀠 WEJT UAJ P!&[g~즒d@H9O9e9gfޑn\SO >EM$E([xYP?vl@7<^7_>J%5 E[xEQ8w))[n؛A^D]>>27@F遐R yѫA;[n[D'z\ȑQ]Q2cT T'Yz^o&ǃm'LదGv00&:Tr=G l9n[\Wo5T%-ʅj:t%,f^~Wl~|ڰB?:-\wY<ҟ#@;#ȔFG3{Y>Gqq^VIb={I1EuXQUG"}J翞#8ϤC"zH^TQqX3EN('RD^SsSb'_wӻ;l^}P,ט4r). QU߳\EdGE%N!~7l2╾Cg‚hBvf֗٦uV.ua_Iu$Gn]S.j5ŠOc˜2eغ>]Yʋm[oaTUj'IT\eDޣټϡ9cqLC(H%SbG1ő|խE?pVWҟ;r8Ĉ—XV)3tS,Ag(/գ_8"Sy)b$a#ϳD(1|.{2'x*Lr%9nw|Hoo"2cY4Ȕk7Ƒ5^5y43,M= ޭSFNFH RVΛ3_=( \˧o@z{f;I<5vn\jC OŒY$zoxR;K DWڨe!4`@̳SzSu>,JA*w|hg]l%VFLJ&%!n(8s{>}ޗ?]Z2X{3_ASt ڼߖWe#^}֣l0a7g1'3Gn49ԻX\W?E,KǴѸ݌5g1s*<-R[|v_-NoW;{8SG|xs&O D1yA?&+fɠsifOe==un8~5h5[|a]@q>Fb6^䶗dH5nR j#<Uǀ\$߆R l29vp`UUb\糯NǬ#eQx=]J^Je8{s g60alKt#iJCFe a~Ӿ짲u |gVlԈ4v-K:qv>8Oh>H^{ʢ[Έxdblc3ؗvWX8;ƙߓtjDtՌRMA%fseP/΋PE+&""2^l'?a_8eѿw}t.X>Ĉ5 Ҋ34FQr*Ci<eP帷/k_т|<PSA1eXXND[ TsZwߊ$InI7.*;W~ M} uC=7E} rQ?v2w 8BDٌ{SuoY8T95ÆUUK+ŠYUE6nv;'}J)̼֑mJQ"]^#mbwu."$I.HH?3:n"ɮ@kęepCf;ݗ6i>0rVil ] Nc\l4 ?qndkbg/nZ|%g yp$ehSm@B&DcBΖiB̉YydK>NZ;|8v-m$E:q2?4OmCڶ@PRlƶBywa߾B: }E=p* % Z;wGrV9j6g殨\-Hd2?Xv_]KU#?O%o}TIGotv2Q1-kX9ƭCyzܶ@PD4hDXXc{P,lѓDZnq*?]tvx(Ɖ7'ɹCc_p$$!\yhr۶@PDf,$$}ԓWjaʼ_b<[ 1'72{Dv%I?s6P]oq^D|b,6LY4N&g FJNI}nۆ{'/4ѫoK-*Mۑ͸x=ƷVYӓ|أ.+6r [ 0g@XJP괞I5* ʯL`v:m̮+_|! ]BmA!F8Z6.]ACu+'s@P$c^^x0 < {gw5*X}'<{ H O xzzth/GncٰXX*} GH)/3„>NBC/ƭxz=zt:=<=SQNG?~zxc(JXoϨA3WRҁ  "48?}[NԼ-OҚdtͲEFX:wlO_ap~2+ үQd6ݰW̴Yoо#XRZ[S,~ nFiM81'koPMgX:+*W.G/G]r|-Z3EklZh XN}Dp<6mq%owEs^vlky̅^4jԈ&4m֔-ZвU+<$*ҩ?=9nq~чY~FFeβts{KG;cL=)<*95k>ZY윹c\&G6)h nÉ8$WPeIL;0,?Րi[¹|˞s `Ùy;ǥ}sh}~gM9tCv;Πꒊg]Yu0;`Z̏?[ `'̍;S3?m̡ØۛeGqql"zw~EB/Hh5qR8ʐځPl gSe^6}jOW:LW W('g} S,[/C7fs~(Sijgu!nFvjHeuwc8p#DwQMbbuG\5R&C=TG~zUwN.E֗AkՃ%֧޳_Ib0}ȄslLz>Hn\ ͵y,OA^_K΋l/|bwkelLzs[cqOc U. Mfک֌D[K17y^Znb@(̢_ɩ)c33<\[S8cmNW|5mu}Э)6oYЇ,۾Juﶨhe%_7[y cM_zW|NW#g&g7MZ̡X3,SJ[}u!ch#e_l ycd,wΰ棏gT)vObdY?Ă _ac=Rw6B/Ne4J._%+`Nx=A_;wX21ީ[Z `&} `hRTQ-S0~iG `l> !=vWE  }ӧ~5^T@0ƛ3/ nPXM # .:۶DxAn}JU'HE{֯FP(vOrgSDm,- )RRR{,g>ð|}* @>-5Y`r=|PI3jVt+7Ϣ3Yh[."D^ב.@,7?CiKGQ0 PN%fDDZe4 7a#@ xh{@!D/ ۉ<9Q|+iI)Y6cP|*?/!ɢc 4TEƕ3D9>}pݸD/"I " .KP>vatUIRAu UGތMpsCM%&7vߵY2g@ 9, gjBU:G;ʌ8Ѿ% 3OhM=#tvmlXqApFUƺX&چ>GmNi tO0c쎱Oz)]#j`\Wi׿_G Yt-~IA\_\RvEk5=ZTno)Hٽ&m"ʦFy5 N\NRm"hݩs"z QNOCsba %䧻tE锛8RQU+JM;,Saȿhf@^,/NQ[/v&‘?/ӵсޔeXK]!zIj` Pns{-\,`3AT;^4S^YKRQuF^X8@fʬ8'_hCbW[&pVOVQОu:<:t::Z-ڝtZ+)sTrnPNA*Uɻ"ʑO]?|jTgf7VeVm- !f Hߊg-24 SF 璋s<"妾lóUtHRYDŽ0 Y-cI i„^x(6̞)^f%^6[#KILg}϶%jҖy Rud(wn)rxxCGzl6^` $r1J]fKŎT<0$Ci+hϺ=b}ޗkqzYvrd8!{RT ڌk+ ҵd6 ^Ǭ, C>>銃+o5@3ݲ|-e-٤8e 2r|$=uU|?IDATlD0s6CDx)р5oyK&S}sI'K0+[<啩/tȒ$eJY.lK1QN H${mh)U6=Y\Qu HY4Y-T?ˎJ|68{R45ҬʊeQx=]Jtoe8ꗧ6:1iY6_aFϒ UXnXLI4@¬H xj1fɒO!ή]-I|%;,gyH?efYu,#KIB$w% Z0]EK䐗$Eeݞg)^i4z!zMz\^߭ӷdğOϲxO#5HJ |e*U!h)7(.yN4eDgr G3B4Hhh0 tcƜ$#43I.ءWjV8]:UᶳDzC 7eҢ> wδ{'SP}ց$#I2NKi:~߲A杗'[$%#W]hܴE%$%qx3;’p3ӲFZS[8 }nn꾺 pz]cvހS9ʒݔ+bX0gW"1=5kwqT@KV&Ga)7i]eIBtwm~|gr42gI9>lPx*gԚabg $INM,L# zdH4=B,NMu,93$!Yre * ,*=iW\ږ8{/KH8-˙%Cq#* T7_Ƚ>u>Cwu$ϊ~p޻] q$/wLgLڦ-fƪ瑐%2NmB6wާj;uϱl4 @ ;)}Rݗ@ (">]3]9'ZK (ީkh\NO7>$e)Mә4.gK9~ "NQ4}*}ؔқyk?n RY{ \SR'q(;np;C0* c`Ty{r %vv?q]M7}Kdcm9>kkb*;#mg#u:tz=::e8nj gO^Ͽe36rf^S*$s*?6m‹MCnZ|btRb~q2NԼS?ΦOWf^ޙiޠ}H:$l wbqf4q7u .EI?1iXsdp^+Ofx`g7\-̜5wOӝDY4`,vŃ=wjF?8N_HbXmFFLNX9^9u(^[Wr:!;/yya/oDg(G#H!٫yo1Cƃ8;kcX Ѭ`΁DTTjaZ?yo}TqvGo$A,r6"L߯#2[ӣϣXR^ (Jƀ5 ^u>Ktr)jMՠt5<{ƛʒbqtoORH;_ݗ.kCe}ie93ԫRz81\ uA]=]5K4|~Fc^RvSZ_*?]ȾMV,gyvCOjm_7/9 5}tHIR|哕8qf`2{J-7É󪀯&uoʡ 򓗠P&e/kC;Ug55]M f{-spj?c^ղDP=%/csr#GOdW-KOcgd {/=MZҮ9erB_feXlh'|]hwO1)fxU-ii\<>~иF(/QgMQcW s\:ZgMOaTB%n5Fm[m W%zӪM@#zU1_3zT8uS0M"T:'F}8B4eapj5DzlR>W=F3U*d{b>L/Ү[,X1!ϴfHQͽ2kƢ,Q;o]<ݓLφ4fN ҁb#\vG|_@zl[NGKI>I gAݡ@~%A"AZSۀgh.71zJ|o-D.()}1cԿsi`,Fm$52q-xPXhR)yF4@PDXV4@PDjG?wkѽBSRR\7cN1V{.kIqȤ`ٰXԩV#VA5]'',mǞYj/9%d"Os [XοՕE6+ [C3ʫx@dDzŁ:ܽ\9^ x2DoP^ ~~ tohmbAu EBZUE(حMAQ`Ș{"zEQQC@ ( ]Cw |-Z3^56-]Wor#Z"\f^ޙiޠ}-<=% V5a_ps^ΰttWjU b]:^ibt` Ͽ&mֹMwy:\88{^Ouc$({f^1= {Z#? !皏۶˥}#B*1K~9p[)'7_]CזqR$Qg3go)ӅQ"KXӾ`_s[t)gĬ{% 'zx-eiI/K]Yu0;`Z̏?[ `'̍;S3LY~!Ӷs!=o/ CS1=7ˎ4?i='aڵ,>|3z:>mOT4lLGY+g,7É󪀯c͒9n)q'hm_%+ C#Cm2olŖBɍ=]iҢ*KwVkN̫}ۛX8i1b͘c`WDӗiĂ 9csEjz=@yR"aMZ}_jy!Ϥ݌9oav7ږc9 ^ ^x xa 㟯>ō|VzY_}3:ؘ'#|\B*S{܋v Y5n֛=&Ok5=ɇ=Rra#pg;6ضަ w*vCP7 ~O Ů7M'-fl_ܠA s,σXwzX5wdBc󒧱>ZP*WHGhLj~FBݐn. )*jڰX,^Uݵ:ͼM2O*\B- iIף[kܮs=:JE ԭ[7]< A ~O'V$A-:@^  !z@ D/ |gZ4i gMALZ?6} :~}L@PEABD(*AQ^hڌ-[~眍SkZ[qu{9r`/vظC*BWwqB+%친Ş n!(GtB|} kF-{ط~[6Wn՜5vf?v-E^xn,sƾ{ ka-D_pg5v 3!쯅ǭrn3!쯅ǝ[kl7YC_#쯅/,YcΊB􏈴YY5vg?a-쯋>!8-}*T/nY` \#,"ʉ' .a-p.'vsa$"iG@ D/AAV1& =הxhGy[v 4:Hآ@PE߰v?uA'fL/LI!z5.a忇|*s>_Ň`ZGk8+'XD ?~J3qj}hF؀jpyd415bGjҰ;,=mzg i@LE:ţU؀jpcH{Gkcq)5cUtQލdFګsi?ajdi%cxmz1ZU6__B8t799X4[搎|0eB p}/2d[w9m/1r.dYBm*"6L*քv,\2Mԛ91k lɧ;É<1^K9~sdɢ9ᬺԚv_ :j]|ܔ^=lʍ;`[-lfHO3`A -xi2l+hD_,}k8u?vyehXFl7e&\m=w6a$؀ ѧ-^%P췉>mMU }7n:8IΓ-/%3 +=y|?ᕰۀAv!DOǦũw]ztTzՕ&2gȒ֩|%p^% ږ%* l;vCfW+ vCQQ1? YB2ZMoS/M8xȀFBR%dɵ1YFEQUTU^ x좗$dtjd e]|&xUR]۪zG#I%pȲS𪊪м@PDL!Hk$W\{QJk"%|\I8Wr(qH D/0KF|礝5k@#)h$  )zU:S2hH hk@%IBkdO!<*?B,?IENDB`stimfit-0.17.1/doc/sphinx/manual/images/zoom.png000066400000000000000000000217241517235503400215640ustar00rootroot00000000000000PNG  IHDRkG_fsRGBbKGD pHYs  tIME 1Yߙ IDATxy|Eǿ=WHH7}]VE{Zuu]`k]uUTD.,z /mDDB w&3]3d&$3!@>Lgx_=SU[LlذaFj6lhdw[ 6lذ!L6w1j l۰4-`Oޝ~zBuoF:H~aކfcYK)}H\.7aÆM ž}{ٺy H0Qdfeңwڷ`kІ 6Y7^oJn=ŃP5VmhǓbkц =G0IAA} 4eB_Bȡ`> )087e#mrd~P0M3)/!Wc`•#md $uiݾKZuR ' [6MBbҧcHI+יa۪?j(.64ۗ?}G|ɡaÓ< =xÔH)&h f220tCJz~~ֽ<>IԀԵXKxauY,_qZ s5A'z`@:IЪ =tモm"DpTe*H\J +)yH`ڿ4ICiL*/W24 =phYD)%B(>ꭘ;|EwLJ&5c&!\/DDcwq ΚCvv6u{{7vgo~v7)aD⽢ q}Rҧ4x5ݐhă=GDl}dWs9|a?CAJ^mJiY҇: 8::-7-b?W}41t?lu[ڵAqSx|C/lRK]ePn,輼< H&*>r18 nT:a$^U_.vilF%䄬6NQk\KJ>>4@_.330u$ptk%,3(M܎3^6Deo90 wW ]`H_EMҔ!߅P,WP1\~^"Sԕ_КZ֍!|R|ͷ­yzA&ǟޖ3k gL%h D\3&b]ۦ2>No,o]ѭl碠Dí *Ce^_R\[9rR yx zwRus?L\2)򌗨۹ڣ+:V݇ߧWUwog#-ͅw4.H+ؔ}(raYЦ )A3yIXnnnQ"M||Cr,YQ GUZB3$4q1+VTPL^)fT{.Iq }dpT%%:[M,^7NnzOQFV 'ťq{TS8Pjգ_G7) ;X7H@E:~Spl("3 *F/QukZwt9htF`Nj>zX0a2м{DRDͧEM#Vu:Q~KźJԉ!ו_}\!$:I*|~|~fR$VA @ ?c&ZҔ5&uSG8 M"n[Nvi!) Кe+X׸ "_cǻ7uv"z4EԹ Z 7gٿ'/A=$":J8Up>T‡G`PL>/4R+ӻSR~%}LN{l ׯ*"9uIo`HHHX_5?y@lIZaK ~Z:&'}IŽ;WXih~]q9}~N6_[b5a&gd]_-Elx`3cUCB_"C\0My0@+8627/v/qd@Zԝ /\;Y߾}CDD$o9?iZȲkz$먱U[rO  >U~Ce}`ٚ0MTE_nBSңC<[OT|Ak6*iFk6/1&/92_͚"6o<4ӯ| [J7}~t$'׾wmwB1aQ$~7F1idT 8RSx1| 8ׯyyy#ѾD-5M48q٦g}v55v| &ViYNi-hM;Q{RF5FzͧcjzdK^~yޠ?ؘWʏUM^FMαIoWcR~|O+H8t5DrCHʲ ]sYhRVҫKNɶᷬ8 / ɔy6jk.FPʃ w%'6~ZvR4Y%-H҆i߻7Hf,vsLƞƇQC'_gaIȺawfb2fCJ88#ō7'YY;=M_NBi7ƼawֽCP01(7K`wֽC"h:B&&y:;Ui^mw#m$ Y{<)t݋yy~e{ahP̤g>\.<8iZEE{ǖ=XeaFBmGv/)d жM;ZePI:nF.w\g1& RJH8:av+=`Fc9x-"ăH;)d( OJl^A61㶾A2haIֶm4BIMXe9aD h gRě#쏮[jq,&uod-@ H:WKsʊVu+h!GN´5mÆC ?@!@)e`I_( `4 @ۋlذqdP1t-6 -פdքWvٰa㈆_0u0BqĈKĴVTmQ۰aHi8Te 8PB|2շɁg3HZ,#Im[M?a/ 7zCFpC##"d{Vnde31tluo}o̞9}Ӹ8SA輁W,9ʕM9iA:a`qbȲxUkuF'˺V#AFh !_ًΛ'.:I&Mm6 ;-TAp1Dn=K>`eLFanKV02;F=v.SK W㷀︫O//+DL#e%MeO]L~a.eKߜτScҿ'sSPm$ !:4gjA̛@nf)߽>WC%,yošV@O  Qj^}#N۰e(+AO?{+٧w<0QwIF$nncddϰWX'ʔՕH#} +ur«_Y(nR+XB'ddT-Ͳu9VWpMbmIU/Y.w1eSk42F~-*cN/PYxe[ubD: N:24[YJ,7Z ݍ}aŬSCtR:-û/㪮*LrVǨWs>L ڏ$#c'oU-d(G?4@uZU]b1Yzxi3EA/Vc(qLdd\_YGjkڑǴDsV^O&?};4g3^A4H(J*JߑWa8FOVMe#%Ҍ㾉Q׏gywBϏ+Ձή__g_pKw[fl[E\|y-qX6<>wAJ-G}5NUuV\nT:R]s~(I JnF }e-U]A˥:5D' C4Vڠe6@h=YK6Rci|NOs{ 3aӱ mJ'p|}$n-QO0 aHU'Ӗ6mܑojwSޞ,aO>6[o9''X<7~:x'f oKqW|F1{ VgIX=u/?]xCMsj yZa¾l28Wh.ݺ2-}5Jٔ߻4B0j2hIݙ|e\XDQ4gE_)O-(8I*cd?%!T>b,yf3Gt+ #z_)hц]F55x8b\[Fc#xl'ZʤxZu͡G4*ʪْ-c{'3bF+yx0mcM<-[DߓǬ簪$ $osRƞJ`΃F;7NQ4k)ȿ> WdӺ1~>*lSr D]!ІȠV;/ʃ{剹l-SCS()q\7m+yW8\=ysZ_x(u3<5[/!PUiWB=P?lyb;-(K4E>"Zrʸl|6h4\~OBgX,9kL?%l&fҳO+T/-{FFDrڴyݗ\,z?ۭ3oi ~Bغ24ԇOo,r^'$Ԑ7i=iB /yYXQISۙ:l1{Pm0hԨ]8:(;ө/]2"^F:EO_ uH;+;-#P(K4E[Ba#1Ӓ5{vU=+_`yfC/0, g#rRO1M3u߯Uz9s).C B18M>%!V$*ҷҩ?ZH3 ͏/eBQj+huZD}jAI?SGC=P>5zE=3pX ;}-h51vM3P3X2] (KE["Hu뚇bc~ u]<3ϧ6a1 񐖚JJj ۃt&׺iZJ(d}焑 6l4-L) JJ j1E xHMI!%5ۍ'Hg踯&=)P:v]RlذqP!dBUctbΝ} }5xi>4D磷d4]yy/-y[Ǿ @J(6l|w#nb:b}Ӆ ]IENDB`stimfit-0.17.1/doc/sphinx/manual/images/zoompopup.png000066400000000000000000000344511517235503400226510ustar00rootroot00000000000000PNG  IHDR1LTsRGBbKGD pHYs  tIME :U8 IDATxwx߳-e Z$TTRD/ "^E\ׂJG@)6ٝM&-y$ٝ=9g缦DQAH0k,̚5߄)!aHE !fF!fF͌B3#BhffF!43B!43Bhf!B3#43BBB3#E2;|0o&3BaFrҪU+&3ΚOdBׇ 3BhfB͌!43!!43B!fFhf!!43B!fFhf!!43B!fFhf#H!fFhf43B͌B͌fFhf!B3#43!fF!fF3#43B͌B< kfFAM!fF;!43EBhf͌fF!͌Bhf43BYr%fF3##!43Q|B3#43I >Chf+) H3c[$43B3# ͌hf͌a-mͬ;CB,ߣ4oׯѣ򆒙-43L3f:'̝)=3[fCn9(&YQ3]1Eil3 5Qz{B+Y0Pl ϙqDTmLhf Q}rw̼+S)SGbO; vRfs43B3#hf43͌fF3͌B3 3,]hf43Bhf43]}gfZ̛,f&13]x!]K3S̜"63og; Sv9#uh9BH_fؗImf*Lq˰wO8Gqw'{5YEt<}s<|_Γ9ږ@[[\wݧ+򨂒 I33s6Rq4Jw4zww7#?g\oU *zD-n_W;uV瞮SN<"Ch͌0#eA Ȃ){0=_{JTimhf+x'2Bmq>Ռx-PlCO&?ցѸmvAplfn޸[Qf JIHo{H/O{uWɞ&3~;\Qf8@rBnTkL>tdՌp.7` `:D8ZZ(pۼ)s3#;`! 43Z#,43 >ʙd  !$;:GA0 ͬ":8/>/`%BUp2߷[(=4W!7FnYmQ̔.;"5o{=X˧<C4X7J'PoUҜ#Nߨ**;xsc`%%ߡ9U UKɍڡP}l r)ឡPXA3ܧ@=堙\}c&fn 9sA@uT8cv YL>Zfg+H@̗ef!fY,qV }q6 w ˨:3s6s7fLݮlJC3d]j4R{9kh3bf[E YxΌhf63{+̣rz{!͌f͌BB̜43;E3hf4053V ͌BTofVhfefJ ͌̂evB3Qº S3s6̜.afcof23Gua}JY fUQ[[43Lm=43⾝K)D:" (sgfutHؙ OC|.HjLQ(bb[3ȋfF M3鰃dt!B9 +gfOY~!! ͌>39G*2rVF3#43,͌!fF3#fFhfjf (͌fz33g9!eg(ALV͌f.S#$$ռb*hffƑ> w3#43!ffV2>GfFHw ͌z3SI2͌͌fFB3#43B͌fFhfPs"#4p9ZjdF3#fflDŽf$9Ԑ͌f&F43BhfɀfF3Bhf43Bhf͌Bhf43B3#$̋fF3B̤p13M樖QyA͌B3S}!!43Yf!fRhf͌vF!4C3Bhfj03!B[!43՚!Df&DQ!5zfFK#Le{K 'SBhf!bf45B!453wFc#m͑hfUv (13G>D3hoLB " Ӗ)CGxH_I/aok. UuP򫯾3gZf@Po+4N2^Ogܭ+x4ohA(7(;Pf=e̅8ZJ,.>zHfҩ -fyW&4 |vf눯( %Qs)3a .acj>q{tbe1@,-*,1$Yd_F_:,fOHksvL> ?*⩱ѢO4n@Fͺw{O@) Z¼)ѯM1Xl_&bsw&G]ƪc] }eyW#\8)on:?2b/x]k>w\UDUͭeuZ[陼[N5 "`ns~/^ZXU7/Lc_"fN/ K Z|nE(H xm~qM,yy+ZFb>E\1yn_m9u|-XdCW)>Cu{uivtKچ~/e≷XFMȳ4 jQ#LyK2_9;!o݃!4e_ ]x7cqPNmоXK]&HG:z,xwPT(hʁh6 }k=|0sE2(,X no.,֑}B$ߎ;6ﯢP,ę#yG \5 w❏]99Io@®O!xQ cy&&NooE سb3޸+'Ϗө#8Wv[J~/G#11kf3 zV"-?YaTJ&nru՟pz]_ـ1{c1}~kk[>SveWFEH6D3.bǵ"@,L4k s 6->$#Wx?c=-fE ھlkG_6*6C#P5.\ GmS_헶`qZDGG[&]Aa82nkcҩx,|1D%gp _u]ZVwsAЩUh Ѯ[}aĄ5XZ8y;LWdJõ/ 30]hތkE$Ph= |Ss|ZY /@] W4Om%uM{Yn_~>H4^=q8qŠLEA G%1.M93"Y.’{ sOq 'rQ*[?[pW@HYh " "*1:_+`\|jҶKֿl 69)MoIDAT w;^ltYd5 n[+Ұ: ~ h)cʉΈmD];aTM anSq:w$C}JxДM0:P]E,Yr?3dq9AsG1:Xb |IDA |~PuB3#RY͑fa v jaQ}!Mjwꈏ.1 U\ Hmld{g0mt<&,-*߷E] h!XGo-=*H_Ӣx*{hvjϔhY.~>N~JEQ=0uH~\-ǣ꠲,ܕkl4l[1.ᡎ1k4ױ1֦}0he?s|o81yWe)ԡuG@r/{S)²IuPzC$̸2t@cD1g^,Jة1~ څgWfߔut-"#Dř⭨Z{-n ?ۍ|c7ZqxdhmBsG1{Օaø#zw4" DѻHxά.PKRXXɄ|!77'T?>*[ y}}Y$̰⓹[waE(hEb_p˓[?i:nSFFDGG#** 0 tjeB^lsq q|o+A\%f lQ8i4'k5Zθ2r[tDɔϙwMDi33& , / qCNJfʉL( 4T(BHp"Z,/Tp|jmȄF Dv_D3#Ή= g}{€B AAlƈjŚ-w~lhڴ)9n ǏG V42o>C }f܃!Dmx{OBQ=LfB!&3BܑŖlBnn/!ɂL̈;SKnDn3&CT]aցBhf$L0g۩b4䗼?W!V JꍗgDwNX#9-9s6gcґr~x}jQl܀m bQ MNb<\1{b#q1(V>sZԫ:nAgVKfsND _ G͟vQ'>xK JZPزw\ un: $<l}]e`֜dtK:bK6{[╽~fui(<.@ ӗ[,ΰdF mM}uZ6> &pfd5ꍚZ9DZH ڷѹ{?'?CVcϩ8=܁}K=֤ێL~~6i&Şɘ5_Fp, 4h>4>QH{'.1ݸ9ˋ˺@KΜ܇ 'aq>r 'I]"; E 3› a% "\ܵHmyܖIFsax4dflDJաEŦcХrgL9m}C  P-_Ïo.EވiW])JFGBt+A0DBg11_ٜje  "G3.nU|ѬVDu6Hʪ^e_әM0;cZ߃3qIl\@YNsJ}c?З&/Lrtס9Inۨ# 1/\?rmj =bٍ2 EDw1ycLw<"LEʟana_,=fxWs'al vMC d[FSjG6[bdd8vrt]je,Wb b5 ͛8T?n#t7ۤxyA?ԡ (sB6Aa~=f̛Sca0r̙s'lΞf`OV>bBi]1Qgc/nard{ޘٸ2LZln=o`eu1wa9ͣe,W]-tӌ5qhhl{F`̵Z^O.>I@8Rn{8#j.Xf^i>F4Es퐚j<=bvLfBqvE|+HB~Kǔ" 7;6ABG._Xr{Tc{4'MFhEh ̈//ǔ֦ :NF3g7O2*j:LZ_bT&Hh/jOQ|4r%0P)'=7`(+[0x>wqMJG8Tmk}Ȉ{'n=:}j 0s`=D0j;XяފAbQ#6x_ՆQoÁ!㫧bvYdF!ފA`gL{'rtT޴^_8Za;7J,Ŋ $>$v# 'Y:sb3wESyfn[:wDi:y$/z nu#DZp=0^sS /7]g`ytGToO0Cxl! f,~unK:I}sRä>5'ݒl v<-1?vQa' _,2ڗ# Ocvx nEa}k2e~dFBmM}uZ6> &pfd5ꍚZ9DZH ڷѹ{?'?CVcϩ8=܁}K>#֤ێL~~6i&Şɘ5_Fp#cbSfef\f~|4qG@~(^^={n܀e]u%f~ugNÆG{0˃8srWɮlIk~ޝ"_@.ډpS|m<ڸ-?3$+ G÷arJcID1l< ; ]*wFʱ ttt KGn;!r =l_b.H]l~|s)FLC̈z)7!9ObǣUQ ?g :E!*mp$@L/l[ZJ 7iR7㸭#^{ 0DšӨhvw.uۢ0ֺ踎7 $DUJ\2W7ƂAC}6|gعuFvkY-Vxa8ޠ 5q1%&Lzm /}H//SZY![4W o9C۳p-m1_r(ün f>,hC#X__Q9 0u~ %1lɯ G:TFƣ{#"c[`K(}C@ծ>3?Wǚ Q1%#cO(YW$``Lu$W5Ѵ_CsWI0o;4&ɺm&c,dFJU9!:T+fG>˜0vttjm̭f"ʬFeu1]ERV}$U.lA'$َNb GpW"k]y" ǻ۲`YO=PtDZGAQ/b cѠ狮"#ZE8m_0$bĔ8p1¶a/edFB9 0X2)J0 /J:]<+xT݇W06;!l2-D[(0gU3^[q\46[bdVA|eXZ p9.b2+ކSu|mxzMXvyڙm<:N8HMgo❨EVxSeFg7=|h!&EePP~K=Hz̘7v sgg2#/3i3n{8+O#/L|g)5 -+ 22b4)/_z`Y`"= 1qe޵jC{˰b>/’ˑsGXZzkfka<]|mWPS V Q1UHjK߄O^CAa.ތy?pQp2糨xd )/~Q|6o~}E4Es퐚j<=bLfD8;gv"yZYcqwcoe`l #X/x=*=^Ǧ@RD4"~i4͍r fDcJz k 'ϛ J;^X f`Z/1m$Ma̎(w˕wvC<|W<УހHȮn=6yYxt\M|6x>+IzyZ0^4jVJh΢[cCF|; u91 m_\9Mw`bצh&D(_ۗ:C(X%("àٌ"d2!??yyy?[1R=jDmaÈ/jPmhd+S)F#F#H zt:hZB]spB },8z*fk0"Lf&{+51ʉ%!a2#A eoŦ}pbb A'/ X2#?jh>9qv5,Ljh6KZ!$XL:0&7g7P'3Yfi[VuȂ%-X?| !Ӈ9JhR[ƫCYٿBlI՜,LF7IKєI`̙3f~}49Jrf9Q ! Ν%;g>߸Q F!L*.B$)IENDB`stimfit-0.17.1/doc/sphinx/manual/index.rst000066400000000000000000000007151517235503400204630ustar00rootroot00000000000000.. test documentation master file, created by sphinx-quickstart on Tue May 12 19:47:15 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Stimfit manual ============== :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| Contents: .. toctree:: :maxdepth: 2 preface getting_started python latency_measurements event_extraction bibliography stimfit-0.17.1/doc/sphinx/manual/latency_measurements.rst000066400000000000000000000174011517235503400236030ustar00rootroot00000000000000******************** Latency measurements ******************** :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| Measurement of synaptic delay ============================= `Stimfit `_ measures latencies between two events. It is frequently used to measure the delay between a synaptic signal and a post-synaptic response. Classically, the synaptic delay or latency is defined as "the time interval between the peak of the inward current through the synaptic membrane and commencement of inward current through the postsynaptic membrane" (Katz and Miledi, 1965 [#KatzMiledi1965]_). Neglecting cable properties of neurons for a while, the maximal inward current during an action potential is expected to flow at the time of maximal slope during the rising phase (Jack et al., 1983 [#Jack1983]_), since .. math:: I_{\text{m}}=I_{\text{cap}}+I_{\text{ionic}} = C_\text{m}\frac{\text{d}V_\text{m}}{\text{d}t} + I_{\text{ionic}} = 0, \mbox{and hence} I_{\text{ionic}}=-I_{\text{cap}}=-C_{\text{m}}\frac{\text{d}V_{\text{m}}}{\text{d}t} The commencement (sometimes called "foot") of the postsynaptic current can robustly be estimated from the extrapolated intersection of the baseline with a line through the two points of time when the current is 20 and 80% of the peak current (Jonas et al., 1993 [#Jonas1993]_, Bartos et al., 2001 [#Bartos2001]_). .. figure:: images/foot.png :align: center **Fig. 18:** Foot of an EPSC (red circle), estimated from the extrapolated intersection of the baseline with a line through the two points of time when the current is 20 and 80% of the peak current (black open circles). The method described above yields reliable results when both the pre- and the postsynaptic whole-cell recording with little noise and few artifacts. However, it may sometimes be favorable to use other estimates for the pre- and postsynaptic signals. For example, when extracellular stimulation is used or when there are a lot o failures in the postsynaptic response, latencies can be adjusted manually or fixed to predetermined measures (e.g the peak or the half-width of the reference channel). The following sections will explain how this is done in practice. Setting the latency cursors =========================== Two latency cursors exist in `Stimfit `_ that are plotted as dotted vertical blue lines. Latency is computed as the time interval between the first and the second latency cursor. You can set the cursors manually by pressing the key **L** or the latency button on the toolbar (Fig. 19A). .. figure:: images/latency.png :align: center **Fig. 19A:** Activate latency mode. In addition, latency cursors can be adjusted to some predefined measurements using the Cursors settings menu with "Edit->Cursors Settings" (Fig. 19B). In the reference channel (red), Peak, Maximal slope and Half-width can be choosen as the first latency cursor. In the active channel (black), Peak, Maximal Slope, Half-width and Beginning of event can be used as second latency cursor. The resulting latency will now be computed from the measurement in the reference channel to the measurement in the active channel. .. figure:: images/latency_menu.png :align: center **Fig. 19B:** Cursors settings for latency. .. note:: If manual is not set, cursor latencies will be located within the peak cursors. Be sure that you set the peak cursors in the right location on both active and reference channel. This is necessary to detect the peak, maximal slope, half-width or beginning of the event. Then, if options other than manual are selected, the latencies will be computed based on the updated measurements from the reference and active channels (Fig. 20). The latency will be indicated as a double-headed arrow connecting the two latency cursors. .. figure:: images/latencytraces.png :align: center **Fig. 20:** The first latency cursor is set to meet the slope of rise of an action potential (in the reference channel, red) and the second latency cursor was selected to match the beginning of event (in the active channel, in black). The latency is indicated by a horizontal double-headed arrow. Trace alignment =============== It may sometimes be useful to align traces before measuring the latency, either for visualization purposes or to create an average without temporal jitter. Although an aligned average can be created using a tool-bar button, the recommended way to align traces is to use the Python shell. * **align_selected(alignment, active=False)** :func:`stf.align_selected()` aligns the selected traces to a point that is determined by the user-supplied function ``alignment`` and then shows the aligned traces in a new window. The alignment function is applied to the active channel if *active=True* or to the inactive channel if *active=False*. The alignment function has to return an index within a traces, and it should adhere to the general form ``index(active)``, where ``active`` is a boolean indicating whether the active or the inactive channel should be used. The most common alignment functions are built into the program: * **maxrise_index(active)** :func:`stf.maxrise_index()` returns the zero-based index of the maximal slope of the rise in units of sampling points (see Fig. 13), interpolated between adjacent sampling points, or a negative value upon failure. * **peak_index(active)** :func:`stf.peak_index()` returns the zero-based index of the peak value in units of sampling points (see Fig. 13) or a negative value upon failure. The return value may be interpolated if a moving average is used for the peak calculation. * **foot_index(active)** :func:`stf.foot_index()` returns the zero-based index of the foot of an event, as described in Fig. 18, or a negative value upon failure. * **t50left_index(active)** :func:`stf.t50left_index()` returns the zero-based index of the left half-maximal amplitude in units of sampling points (see Fig. 13), or a negative value upon failure. The return value will be interpolated between sampling points. * **t50right_index(active)** :func:`stf.t50right_index()` returns the zero-based index of he right half-maximal amplitude in units of sampling points (see Fig. 13), or a negative value upon failure. The return value will be interpolated between sampling points. The following code can be used to align all traces within a file to the maximal slope of rise in the inactive channel. :: # import the Stimfit core module: import stf def align_maxrise(): """Aligns all traces to the maximal slope of rise \ of the inactive channel. Baseline and peak cursors \ have to be set appropriately before using this function. Return value: True upon success. False otherwise.""" stf.select_all() # check whether there is an inactive channel at all: if ( stf.maxrise_index( False ) < 0 ): print "File not open, or no second channel; aborting now" return False stf.align_selected( stf.maxrise_index, False ) return True .. [#KatzMiledi1965] Katz B, Miledi R. (1965) The measurement of synaptic delay, and the time course of acetylcholine release at the neuromuscular junction. Proc R Soc Lond B Biol Sci. 161:483-495. .. [#Jack1983] Jack JB, Noble D, Tsien RW (1983) Electric current flow in excitable cells. Oxford University Press, Oxford, UK. .. [#Bartos2001] Bartos M, Vida I, Frotscher M, Geiger JRP, Jonas P (2001) Rapid signaling at inhibitory synapses in a dentate gyrus interneuron network. J Neurosci 21:2687–2698. .. [#Jonas1993] Jonas P, Major G, Sakman B. (1993) Quantal components of unitary EPSCs at the mossy fibre synapse on CA3 pyramidal cells of rat hippocampus. J Physiol. 472, 615-663. stimfit-0.17.1/doc/sphinx/manual/preface.rst000066400000000000000000000055431517235503400207650ustar00rootroot00000000000000******* Preface ******* :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| `Stimfit `_ was originally written by Peter Jonas, University of Freiburg, in the early 1990s. It was primarily designed to analyze the kinetics of evoked excitatory postsynaptic potentials (EPSCs; Jonas et al., 1993 [#Jonas1993]_). The name `Stimfit `_ was chosen because the program allowed to *fit* exponential functions to the decay of EPSCs evoked by extracellular *stim*-ulation. The program was written in Borland Pascal, running under DOS and entirely controlled using keyboards shortcuts. The user interface was similar to a digital oscilloscope, with vertical cursors defining measurement windows for baseline calculation, peak detection and curve fitting. This allowed to analyze data with surprising efficiency once the keyboard shortcuts were mastered. However, the Borland Pascal compiler imposed some significant restrictions which became apparent with increasing data size and computing power: for instance, arrays were not allowed to be longer than :math:`10^{4}` elements, and faster processors had to be artificially slowed down to avoid runtime errors. .. figure:: images/test.png :align: center :alt: The actual platform-independent Stimfit Stimfit running on GNU/Linux .. figure:: images/stimfit_dos.png :align: center :alt: The original Stimfit for DOS The original Stimfit for MS-DOS. When I converted the original Pascal program to C/C++, I rewrote the code almost entirely from scratch. Only the algorithms to calculate latencies, rise times, half durations and slopes are direct translations of the original Pascal code. By contrast, I tried to preserve the user interface as far as possible. Therefore, the program only poorly adheres to common conventions for graphical user interfaces: for instance, clicking the right mouse button will usually set a cursor position rather than popping up a context menu. A number of people have contributed to the program: First, I would like to thank Peter Jonas for the original `Stimfit `_ code. Josef Bischofberger has added some functions to the DOS version which I have adopted. Bill Anderson has made helpful suggestions concerning the user interface and provided some very large files that have been recorded with his free program `WinLTP `_. A large amount of helpful comments and bug reports were filed by Emmanuel Eggermann and Daniel Boischer. The `Levenberg-Marquardt algorithm `_ used for curve fitting was implemented by Manolis Lourakis. .. [#Jonas1993] Jonas P, Major G, Sakman B. (1993) Quantal components of unitary EPSCs at the mossy fibre synapse on CA3 pyramidal cells of rat hippocampus. J Physiol. 472, 615-63. stimfit-0.17.1/doc/sphinx/manual/python.rst000066400000000000000000000450331517235503400206770ustar00rootroot00000000000000**************** The Python shell **************** :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Date: |today| Why use Python? =============== Why would you want to use Python (or more specifically [SciPy]_ ) to analyse neuroscientific data? Here are a couple of reasons: * `Widely used `_, `general-purpose `_ programming language * `Predicted to become the major programming language in neurosciences `_ * `About to replace hoc as the standard NEURON interpreter `_, allowing to analyse the output from NEURON simulations in a single, integrated development environment * `Favoured by the German Neuroinformatics Node as the standard neural data analysis language `_ * has a reputation of having a `cleaner syntax `_ than most other scientific programming languages * `Free software `_ Before you start ================ If you are new to ``Python``, I suggest that you first have a look at the [Python-tutorial]_. If that is not enough, abundant documentation is freely available on the [Python-website]_. If you are new to `Stimfit `_, I recommend going through the tutorial in chapter 1 of this manual first. The Python shell ================ When you start up `Stimfit `_, you will find an embedded Python shell in the lower part of the program window. From this shell, you have full access to the Python interpreter. For instance, you could type: :: >>> stf. which will pop up a window showing all the available functions from the Stimfit module (abbreviated stf). For example, you could now check whether a file is open by selecting the :func:`stf.check_doc()` function from that list: :: >>> stf.check_doc() False The function documentation will pop up when you type in the opening bracket. The function returns the boolean False because you have not opened any file yet. Since the stf module is imported in the namespace, you can omit the initial ```stf.``` when calling functions. Thus, you could get just the same result by typing :: >>> check_doc() False If you press ```Ctrl+UP-arrow``` at the same time, you can go through all the commands that you have previously typed in. This can be very useful when you want to call a function several times in a row. Accessing data from the Python shell ==================================== * **get_trace(trace=-1, channel=-1)** The :func:`stf.get_trace()` function returns the currently displayed trace as one-dimension [NumPy]_ array when called without arguments: :: >>> a = get_trace() You can now access individual sampling points using squared brackets to specify the index. For example: :: >>> print a[123] -26.3671875 prints out the y-value of the sampling point with index 123. Note that indices in ``Python`` are *zero-based*, i.e. the first sampling point has the index 0. :: >>> print a[0] -21.2249755859 Python will check for indices that are out of range. For example, :: >>> print a[1e9] Traceback (most recent call last): File "", line 1, in IndexError: index out of bounds You can use the :func:`stf.get_trace()` function to return any trace within a file. The default values of trace = -1 and channel = -1 will return the currently displayed trace of the active channel. By passing a value of 1 as the first argument, you could access the second trace within your file (assuming it contains more than one trace of course). Remember that indices are zero-based! :: >>> b = get_trace(1) >>> print b[234] >>> -23.7731933594 Using NumPy with Stimfit ======================== [NumPy]_ allows you to efficiently perform array computations from the ``Python`` shell. For example, you can multiply an array with a scalar: :: >>> a = get_trace() >>> print a[234] -27.0385742188 >>> b = a*2 >>> print b[234] -54.0771484375 Or multiply two arrays: :: >>> a = get_trace() >>> b = get_trace(1) >>> c = a*b >>> print a[234], "*",b[234], "=", c[234] -27.0385742188 * -23.7731933594 = 642.793253064 * **new_window()** You can now display the results of the operation in a new window by passing a 1D-NumPy array to the :func:`stf.new_window()` function: :: >>> new_window(c) The sampling rate and units will be copied from the window of origin. A short way of doing all of the above within a single line would have been: :: >>> new_window(get_trace() * get_trace(1)) * **new_window_matrix()** You can pass a 2D-NumPy array to :func:`stf.new_window_matrix()`. The first dimension will be translated into individual traces, the second dimension into sampling points. This example will put the current trace and its square root into subsequent traces of a new window: :: >>> numpy_matrix = np.empty( (2, get_size_trace()) ) >>> numpy_matrix[0] = get_trace() >>> numpy_matrix[1] = np.sqrt( np.abs(get_trace()) ) >>> new_window_matrix(numpy_matrix) In this example, np is the [NumPy]_ namespace. Typing np. at the command prompt will show you all available [NumPy]_ functions. :func:`stf.get_size_trace()` will be explained later on. * **new_window_list()** Although using a 2D_NumPy array is very efficient, there are a few drawbacks: the size of the array has to be known at construction time, and all traces have to be of equal lengths. Both problems can be avoided using :func:`stf.new_window_list()`, albeit at the price of a significant performance loss. :func:`stf.new_window_list()` takes a Python list of 1D-NumPy arrays as an argument: :: >>> python_list = [get_trace,] >>> python_list.append( np.concatenate( (get_trace(), get_trace()) ) ) >>> new_window_list(python_list) Note that items in Python list are written between *squared* brakes, and that a comma is required at the end of single-item lists. The [SciPy]_ library, which is build on top of [NumPy]_, provides a huge amount of numerical tools, such as special functions, integration, ordinary differential equation solvers, gradient optimization, genetic algorithms or parallel programming tools. Due to its size, it is not packaged with `Stimfit `_ by default, but I highly recommend installing it for more advanced numerical analysis. Control Stimfit from the Python shell ===================================== Cursors ------- Cursors can be positioned from the Python shell using one of the ``set_[xy]_start`` or ``set_[xy]_end`` functions, where ``[xy]`` stands for one of peak, base or fit, depending on which cursor you want to set. Correspondingly, the ``get_[xy]_start`` or ``get_[xy]_end`` functions can be used to retrieve the current cursor positions. * **set_[xy]_start(pos, is_time = False)** and **set_[xy]_end(pos, is_time = False)** take one or two arguments. ``pos`` specifies the new cursor position. ``is_time`` indicates whether ``pos`` is an index, i.e. in units of sampling points (False, default), or in units of time (True), with the trace starting at t=0 ms. If there was an error, such as an out-of-bounds-index, these functions will return False. * **get_[xy]_start(pos, is_time = False)** and **get_[xy]_end(pos, is_time = False)** optionally take a single argument that indicates whether the return value should be in units of sampling points (``is_time = False``,default) or in units of time (``is_time = True``). Again, traces start at t=0 ms. These functions will return -1 if no file is opened at the time of the function call. Indices can be converted into time values by multiplying with :func:`stf.get_sampling_interval()`. For example: :: >>> print "Peak start cursor index:", get_peak_start() Peak start cursor index: 254 >>> print "corresponds to t =", get_peak_start(True), "ms" corresponds to t = 2.54 ms >>> print "=", get_peak_start()*get_sampling_interval(), "ms" = 2.54 ms >>> set_peak_start(10, True) True >>> print "new cursor position:", get_peak_start() new cursor position: 1000.0 >>> print "at t =", get_peak_start(True), "ms" at t = 10 ms The peak, baseline and latency values will not be updated until you either select a new trace, press **Enter** in the main window or call :func:`stf.measure()` from the Python shell. Trace selection and navigation ------------------------------ * **select_trace(trace = -1)** You can select any trace within a file by passing its zero-based index to :func:`stf.select_trace()`. The function will return ``False`` if there was an error. The default value of -1 will select the currently displayed trace as if you had pressed **S**. If you wanted to select every fifth trace, starting with an index of 0 and ending with an index of 9 (corresponding to numbers 1 to 10 in the drop-down box), you could do: :: >>> for n in range(0, 10, 5): select_trace(n) ... True True Note that the Python range function omits the end point. * **unselect_all() select_all() get_selected_traces() new_window_selected_this()** The list of selected traces can be cleared using :func:`stf.unselect_all()`, and conversely, all traces can be selected using :func:`stf.select_all()`. :func:`stf.get_selected_indices()` returns the indices of all selected traces as a Python tuple. Finally, the selected traces within a file can be shown in a new window using :func:`stf.new_window_selected_this()`. * **get_size_trace(trace=-1, channel=-1)** and **get_size_channel(channel=-1)** Return the number of sampling points in a trace the number of traces in a channel, respectively. ``trace`` and ``channel`` have the same meaning as in :func:`stf.get_trace()`. These functions can be used to iterate over an entire file or to check ranges; :: >>> unselect_all(0 >>> for n in range(0, get_size_channel(), 5): select_trace(n) True True >>> print get_selected_indices() (0, 5) >>> for n in get_selected_indices(): ... print "Length of trace", n, ":", get_size_trace(n) ... Length of trace 0 : 13050 Length of trace 1 : 13050 * **set_trace(trace)** sets the currently displayed trace to the specified zero-based index and returns ``False`` if there was an error. This will update the peak, base and latency values, so there is need to call :func:`stf.measure()` directly after this function. * **get_trace_index()** Correspondingly, :func:`stf.get_trace_index()` allows you to retrieve the zero-based index of the currently displayed trace. There is a slight inconsistency in function naming here: do not confound this function with :func:`stf.get_trace()`. File I/O -------- * **file_open(filename)** and **file_save(filename)** will open or save a file specified by ``filename``. On windows, use double backslashes (\\\\) between directories to avoid conversion to special characters, such as \\t or \\n; for example: :: >>> file_save("C:\\data\\datafile.dat") in Windows or :: >>> file_save("/home/cs/data/datafile.dat") in GNU/Linux. * **close_this()** :func:`stf.close_this()` will close the currently displayed file, whereas * **close_all()** :func:`stf.close_all()` closes all open files. Define your own functions ------------------------- By defining your own functions, you can apply identical complex analysis to different traces and files. The following steps are required to make use of your own Python files: 1. Create a Python file in a directory that the active Python 3 interpreter can import from. In a current source build, the simplest approach is usually to keep your helper module in a normal project or user directory that is already on ``sys.path``, or to add its parent directory explicitly before importing it. Avoid editing the installed core module files directly. 2. Import the Stimfit module in your file: :: >>> import stf 3. Start `Stimfit `_ and import your file in the embedded Python shell. Assuming that your file is called ``myFile.py``, you would do: :: >>> import myFile 4. If you have applied changes to your file, there is no need to restart Stimfit. With current Python 3 builds, reload it with: :: >>> import importlib >>> importlib.reload(myFile) To give you an example, this program shows a function that returns the sum of the squared amplitude values across all selected traces of a file. :: # import the Stimfit core module: import stf def get_amp(): """ Returns the amplitude (peak-base)""" return stf.get_peak()-stf.get_base() def sqr_amp(): """ Returns the sum of squared amplitudes of all selected traces, or -1 if there was an error. Uses the current settings for the peak direction and cursor positions.""" # store the current trace index: old_index = stf.get_trace_index() sum_sqr = 0 for n in stf.get_selected_indices(): # setting a trace will update all measurements # so there is no need to call measure() if not stf.set_trace(n): return -1 sum_sqr += get_amp()**2 # restore the displayed trace: stf.set_trace(old_index) return sum_sqr To import and use this file, you would do: :: >>> import myFile >>> myFile.sqr_amp() 497.70163353882447 .. note:: You can import a file from any directory by selecting **File->Import Python module** or simpy by pressing ``Ctrl+I``. The file will be automatically loaded in the embedded Python shell and ready to be used (it is not necessary to type import(myFile). To reload the file, you have to select **File->Import Python module** or ``Ctrl+I`` again. Add a Python function to the Stimfit menu ----------------------------------------- It is possible to create a submenu with your own Python functions in the ``Extensions`` menu of `Stimfit `__. To include your own function as a submenu you have to edit the file ``extensions.py``. This file is located in the Stimfit program folder. ``extensions.py`` contains a list called **extensionsList** that contains a list of submenus. For example, in the following example, only one submenu can be found, called *myAPCounter*: :: extensionList = [myAPCounter,] To create a submenu we have first to define it as Extension. In ``extensions.py`` we should add: :: myAPCounter = Extension("Count APs", spells.count_aps, "Counts APs in selected traces", True) this command creates the extension called myAPCounter, which has the name "Counts APs" and executes the function spells.count_aps. If we add the extension *myAPCounter* to the extensionList, we will see now that a submenu appear within the Extension menu. In general, an extension requires four arguments: 1. **Function name**: this is the name that will appear in the submenu (in our example this is "Counts APs"). 2. **Python function**: the custom Python function to be executed when clicking on the submenu. We used here spells.counts_aps 3. **Description**: a more elaborate description of what the function is doing. We wrote "Counts APs in selected traces". 4. **Does your function require a file?**: If your function needs a file to be open type 'True', otherwise 'False'. Because our Python function operate on files, we typed 'True'. .. note:: Use a boolean return type when using your own Python functions in the extensions Menu. If you write a function that returns False upon failure, Stimfit will show a warning indicating that your custom function did not work propertly. Some recipes for commonly requested features ============================================= Some often-requested features could not be integrated into the program easily without cluttering up the user interface. The following sections will show how the Python shell can be used to solve these problems. Cutting traces to arbitrary lengths ----------------------------------- Cutting traces is best done using the squared braked operators ([]) to slice a [NumPy]_ array. For example, if you wanted to cut a trace at the 100th sampling point, you could do: :: >>> a = get_trace() >>> new_window(a[:100]) >>> new_window(a[100:]) In this example, a[:100] refers to a sliced [NumPy]_ array that comprises all sampling points from index 0 to index 99, and a[100:] refers to an array from index 100 to the last sampling point. * **cut_traces(pt)** and **cut_traces_multi(pt_list)** These functions cut all selected traces at a single sampling point (pt) or at multiple sampling points (pt_list). The cut traces will be shown in a new window. Both functions are included in the **stf namespace** from version 0.8.11 on. The code for :func:`stf.cut_traces()` is listed here. :: import stf import numpy as np def cut_traces( pt ): """Cuts the selected traces at the sampling point pt, and shows the cut traces in a new window. Returns True upon success, False upon failure.""" # Check whether anything has been selected: if not stf.get_selected_indices(): print("Trace is not selected!") return False new_list = list() for n in stf.get_selected_indices(): if not stf.set_trace(n): return False # Check for out of range: if pt < stf.get_size_trace(): new_list.append( stf.get_trace()[:pt] ) new_list.append( stf.get_trace()[pt:] ) else: print "Cutting point", pt, "is out of range" # Don't create a new window if everything was out of range if len(new_list) > 0: return stf.new_window_list( new_list ) else: return False For example: :: >>> dt = stf.get_sampling_interval() >>> cutPoints = [int(100/dt), int(900/dt)] >>> cut_traces_multi(cutPoints) will cut all selected traces at time 100 and 900 (in units of the x axis) and show the cut traces in a new window. Note that you can pass a list or a tuple as argument. :: >>> cut_traces_multi(range(100,2000,100)) # cut at 100 sampling points not ms! will cut the selected traces at every 100th sampling point, starting with the 100th and ending with the 1900th. .. [Python-tutorial] http://docs.python.org/tut/ .. [Python-website] http://www.python.org/doc/ .. [SciPy] http://www.scipy.org/ stimfit-0.17.1/doc/sphinx/osx_install_guide/000077500000000000000000000000001517235503400210565ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/osx_install_guide/building.rst000066400000000000000000000040201517235503400234010ustar00rootroot00000000000000**************** Building Stimfit **************** :Author: Christoph Schmidt-Hieber :Date: |today| Current macOS source builds use the repository helper script [`build_macos_cmake.sh`](build_macos_cmake.sh), which drives the CMake app bundle workflow used by current development. ============================= Building with MacPorts tools ============================= Install MacPorts from `macports.org `_, then install the build tools and libraries used by the current CMake path: :: sudo port -N selfupdate sudo port -N install cmake ninja pkgconfig fftw-3 hdf5 wxWidgets-3.2 git sudo port select --set wxWidgets wxWidgets-3.2 If you want the embedded Python build, also install a supported Python variant and its matching wxPython package. The active MacPorts port definitions in [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) currently support Python 3.10 through 3.14, with Python 3.13 as the default variant. Clone the repository and build from the repository root: :: git clone https://github.com/neurodroid/stimfit.git cd stimfit ./build_macos_cmake.sh For a Python-enabled bundle build: :: ./build_macos_cmake.sh --with-python The script configures a dedicated CMake build tree, installs the app bundle into `build/macos-app*/install`, and verifies that `stimfit.app` was produced. ================= MacPorts packages ================= Maintainers updating MacPorts packages should use the active port sources under [`dist/macosx/macports/`](dist/macosx/macports/) rather than the historical instructions that modified `sources.conf` manually. The CMake-based Stimfit port is defined in [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in). ==================== Homebrew status note ==================== The old Homebrew tap instructions are no longer maintained here. For current source work on macOS, prefer MacPorts plus [`build_macos_cmake.sh`](build_macos_cmake.sh). stimfit-0.17.1/doc/sphinx/osx_install_guide/index.rst000066400000000000000000000007261517235503400227240ustar00rootroot00000000000000OS X Build Guide ================ :Author: Christoph Schmidt-Hieber :Release: |version| :Date: |today| Current macOS source builds use the CMake-based app-bundle workflow from [`build_macos_cmake.sh`](build_macos_cmake.sh). This section focuses on macOS-specific prerequisites, current MacPorts-based dependencies, and the standalone [`stfio`](doc/sphinx/stfio/index.rst) module guidance. Contents -------- .. toctree:: :maxdepth: 2 building moduleonly stimfit-0.17.1/doc/sphinx/osx_install_guide/moduleonly.rst000066400000000000000000000051021517235503400237750ustar00rootroot00000000000000************************************* Building the stfio Python Module Only ************************************* :Author: Yueqi Wang :Date: |today| This documentation describes how to install the standalone Python file i/o module for Mac OS. For details on how to use the *stfio* module, see :doc:`/stfio/index`. Installing stfio with current MacPorts packages =============================================== The legacy standalone [`py-stfio`](dist/macosx/macports/python/py-stfio/Portfile.in) port still exists for reference, but it predates the current CMake provider model and old Python-only instructions in this document are no longer current. For maintained macOS packaging, prefer the Stimfit MacPorts port defined in [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in), which supports current Python 3 variants and can enable the embedded Python shell in the app bundle. Building the stfio module from source ===================================== For current source builds, use the same repository checkout as the full application and configure a dedicated CMake build tree for the module target. Install MacPorts build dependencies first: :: $ sudo port -N selfupdate $ sudo port -N install cmake ninja swig-python hdf5 fftw-3 git python313 py313-numpy Then clone the repository and configure the module build: :: $ git clone https://github.com/neurodroid/stimfit.git $ cd stimfit $ cmake -S . -B build/macos-module -G Ninja \ -DSTF_BUILD_MODULE=ON \ -DSTF_ENABLE_PYTHON=ON \ -DSTF_BUILD_TESTS=OFF \ -DSTF_BUILD_NUMERIC_TESTS=OFF \ -DPython3_EXECUTABLE=/opt/local/bin/python3.13 Build and stage the install: :: $ cmake --build build/macos-module $ cmake --install build/macos-module --prefix $HOME/.local If you need BioSig-backed import support, install the appropriate library and reconfigure with `-DSTF_WITH_BIOSIG=ON`. If you specifically need the in-tree provider on a maintainer machine, add `-DSTF_BIOSIG_PROVIDER=SUBMODULE`. Using another Python 3 environment ---------------------------------- To build against a non-MacPorts interpreter such as a virtual environment, replace `-DPython3_EXECUTABLE=/opt/local/bin/python3.13` with the path to the desired interpreter. For example: :: $ cmake -S . -B build/macos-module-venv -G Ninja \ -DSTF_BUILD_MODULE=ON \ -DSTF_ENABLE_PYTHON=ON \ -DPython3_EXECUTABLE=$HOME/venvs/stimfit/bin/python Finally, run python to test the module, as described in :doc:`/stfio/index`. stimfit-0.17.1/doc/sphinx/references/000077500000000000000000000000001517235503400174635ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/references/find_stimfit_publications.py000066400000000000000000000216241517235503400252750ustar00rootroot00000000000000#!/usr/bin/env python3 """ Find new Stimfit publications using the same strategy used for reference curation: 1) OpenAlex: papers citing the original Stimfit paper (10.3389/fninf.2014.00016) 2) Europe PMC: full-text search for "stimfit" + "patch-clamp" (methods-like signal) 3) Merge, de-duplicate, screen confounders, compare against index.rst 4) Emit JSON report and optional RST snippet for copy/paste """ from __future__ import annotations import argparse import datetime as dt import html import json import re import sys import urllib.parse import urllib.request from collections import defaultdict from dataclasses import dataclass, asdict from typing import Dict, List, Set ORIGINAL_STIMFIT_DOI = "10.3389/fninf.2014.00016" @dataclass class Record: doi: str title: str year: int authors: List[str] venue: str url: str is_preprint: bool source_tags: Set[str] def http_json(url: str, timeout: int = 60): with urllib.request.urlopen(url, timeout=timeout) as r: return json.load(r) def norm_ws(s: str) -> str: return re.sub(r"\s+", " ", s or "").strip() def norm_title(s: str) -> str: s = html.unescape(s or "") s = re.sub(r"<[^>]+>", "", s) s = s.lower() s = re.sub(r"[^a-z0-9\s\-\+αβγδ]+", " ", s) return norm_ws(s) def initials_from_name(name: str) -> str: out = [] for tok in re.split(r"[\s\-]+", name.strip()): tok = re.sub(r"[^A-Za-zÀ-ÖØ-öø-ÿ]", "", tok) if tok: out.append(tok[0].upper()) return "".join(out) def format_author_last_initials(full_name: str) -> str: parts = [p for p in full_name.strip().split() if p] if len(parts) < 2: return full_name.strip() particles = {"de", "da", "del", "della", "di", "du", "van", "von", "der", "den", "la", "le"} if len(parts) >= 2 and parts[-2].lower() in particles: last = " ".join(parts[-2:]) first = " ".join(parts[:-2]) else: last = parts[-1] first = " ".join(parts[:-1]) return f"{last} {initials_from_name(first)}".strip() def parse_existing_rst(rst_path: str): text = open(rst_path, "r", encoding="utf-8").read() dois = {d.lower() for d in re.findall(r"https?://doi.org/([^>\s]+)", text, re.I)} titles = set() for m in re.finditer(r"`_\s*(.*?)\s*\.\s*\*", text): titles.add(norm_title(m.group(1))) return dois, titles def openalex_work_from_doi(doi: str): url = "https://api.openalex.org/works/https://doi.org/" + urllib.parse.quote(doi, safe="/:") return http_json(url) def openalex_citing_records(since_year: int) -> Dict[str, Record]: base = "https://api.openalex.org/works" # OpenAlex filter syntax for citation targets uses work IDs (W...), not DOI in cites:. root = openalex_work_from_doi(ORIGINAL_STIMFIT_DOI) root_id = (root.get("id") or "").rsplit("/", 1)[-1] if not root_id: raise RuntimeError("Could not resolve OpenAlex ID for original Stimfit DOI") filt = f"cites:{root_id},from_publication_date:{since_year}-01-01" params = { "filter": filt, "per-page": "200", "select": "display_name,publication_year,doi,primary_location,authorships,type", } url = base + "?" + urllib.parse.urlencode(params) data = http_json(url) out: Dict[str, Record] = {} for w in data.get("results", []): doi = (w.get("doi") or "").replace("https://doi.org/", "").strip().lower() if not doi: continue venue = ((w.get("primary_location") or {}).get("source") or {}).get("display_name", "") authors = [ format_author_last_initials(a.get("author", {}).get("display_name", "")) for a in (w.get("authorships") or []) if a.get("author", {}).get("display_name") ] rec = Record( doi=doi, title=norm_ws(html.unescape(w.get("display_name", ""))), year=int(w.get("publication_year") or 0), authors=authors, venue=venue, url=f"https://doi.org/{doi}", is_preprint=(w.get("type") == "preprint" or "biorxiv" in venue.lower() or "research square" in venue.lower()), source_tags={"openalex_cites"}, ) out[doi] = rec return out def europepmc_method_dois(since_year: int) -> Set[str]: query = f'("stimfit" AND "patch-clamp") AND FIRST_PDATE:[{since_year}-01-01 TO 2100-12-31]' params = {"query": query, "format": "json", "pageSize": "1000"} url = "https://www.ebi.ac.uk/europepmc/webservices/rest/search?" + urllib.parse.urlencode(params) data = http_json(url) out = set() for r in data.get("resultList", {}).get("result", []): doi = (r.get("doi") or "").strip().lower() if doi: out.add(doi) return out def likely_confounder(title: str, venue: str) -> bool: s = f"{title} {venue}".lower() bad = [ "mri", "fmr", "deep brain stimulation programming", "stimfit-a data-driven algorithm for automated deep brain stimulation", "renal t2 mapping", ] return any(b in s for b in bad) def to_rst_line(r: Record) -> str: authors = r.authors[:4] author_txt = ", ".join(authors) + (", et al." if len(r.authors) > 4 else "") venue = r.venue or "Unknown venue" if r.is_preprint and "preprint" not in venue.lower(): venue = f"{venue} [preprint]" return f" * `{author_txt} ({r.year}) `_ {r.title}. *{venue}*." def main(): ap = argparse.ArgumentParser() ap.add_argument("--rst-path", default="doc/sphinx/references/index.rst") ap.add_argument("--since-year", type=int, default=2022) ap.add_argument("--out-json", default="doc/sphinx/references/stimfit_candidates.json") ap.add_argument("--out-rst-snippet", default="doc/sphinx/references/stimfit_new_entries.rst") args = ap.parse_args() existing_dois, existing_titles = parse_existing_rst(args.rst_path) cited = openalex_citing_records(args.since_year) method_dois = europepmc_method_dois(args.since_year) merged: Dict[str, Record] = dict(cited) # Add method-only DOIs via OpenAlex metadata lookup for doi in sorted(method_dois): if doi in merged: merged[doi].source_tags.add("europepmc_methods") continue try: w = openalex_work_from_doi(doi) except Exception: continue year = int(w.get("publication_year") or 0) if year < args.since_year: continue venue = ((w.get("primary_location") or {}).get("source") or {}).get("display_name", "") authors = [ format_author_last_initials(a.get("author", {}).get("display_name", "")) for a in (w.get("authorships") or []) if a.get("author", {}).get("display_name") ] merged[doi] = Record( doi=doi, title=norm_ws(html.unescape(w.get("display_name", ""))), year=year, authors=authors, venue=venue, url=f"https://doi.org/{doi}", is_preprint=(w.get("type") == "preprint" or "biorxiv" in venue.lower() or "research square" in venue.lower()), source_tags={"europepmc_methods"}, ) # Screen + novelty check candidates: List[Record] = [] for rec in merged.values(): if likely_confounder(rec.title, rec.venue): continue if rec.doi.lower() in existing_dois: continue if norm_title(rec.title) in existing_titles: continue candidates.append(rec) candidates.sort(key=lambda r: (r.year, r.title.lower()), reverse=True) # JSON report with open(args.out_json, "w", encoding="utf-8") as f: json.dump( [ { **asdict(c), "source_tags": sorted(list(c.source_tags)), } for c in candidates ], f, ensure_ascii=False, indent=2, ) # RST snippet grouped by year by_year: Dict[int, List[Record]] = defaultdict(list) for c in candidates: by_year[c.year].append(c) snippet_lines: List[str] = [] for y in sorted(by_year.keys(), reverse=True): snippet_lines += ["====", str(y), "====", ""] for r in sorted(by_year[y], key=lambda x: x.title.lower()): snippet_lines.append(to_rst_line(r)) snippet_lines.append("") with open(args.out_rst_snippet, "w", encoding="utf-8") as f: f.write("\n".join(snippet_lines).rstrip() + "\n") print(f"Existing DOI entries: {len(existing_dois)}") print(f"Cited candidates (OpenAlex): {len(cited)}") print(f"Methods-query DOIs (Europe PMC): {len(method_dois)}") print(f"New non-duplicate candidates: {len(candidates)}") print(f"Wrote JSON: {args.out_json}") print(f"Wrote RST snippet: {args.out_rst_snippet}") if __name__ == "__main__": try: main() except KeyboardInterrupt: sys.exit(130) stimfit-0.17.1/doc/sphinx/references/index.rst000066400000000000000000001522521517235503400213330ustar00rootroot00000000000000.. test documentation master file, created by sphinx-quick start on Tue May 12 19:47:15 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. References ========== :Last update: |today| `Stimfit `_ has been used for data analysis in the following publications. The list was put together by a script that automatically finds new publications. It may contain errors. If you miss a reference to your publication, please let us know `here `_. ==== 2026 ==== * `Engel D, Nguyen L (2026) `_ Protocol for whole-cell patch-clamp recording and post hoc identification of hippocampal CA2 pyramidal neurons in adult mouse brain slices. *STAR Protocols* 7(2):104470. * `Meftah S, Wilson MA, Elliott J, et al. (2026) `_ GABAB receptor signaling in CA1 pyramidal cells is not regulated by aging in the APP/PS1 mouse model of amyloid pathology. *eNeuro* 13(2):ENEURO.0099-23.2025. * `Aaltonen A, Tamaki A, Peris Ramon A, et al. (2026) `_ Postnatal reduction of eIF4E overexpression in D1-SPNs ameliorates KCNQ channel dysfunction, hyperexcitability and ASD-like behaviours. *Cell Mol Life Sci* 83:121. * `Gutmann N, Häussler U, Mersi A, et al. (2026) `_ Increased dendritic inhibition of dentate gyrus granule cells in a mouse model of Down syndrome. *Front Cell Neurosci* 20:1714586. * `Aaltonen A, Razquin Lizarraga J, Oyrer J, et al. (2026) `_ Altered striatal long-term potentiation in the eIF4E-TG ASD mouse model. *bioRxiv* [preprint]. * `García-Baena I, Sanz-Rubio D, Belmonte C, et al. (2026) `_ A novel methodology to characterize beat-to-beat alternations in whole-cell calcium currents. *PLoS One* 21(1):e0339890. * `Guinet A, Behr J, Vida I, Grosser S (2026) `_ Spatial Organization of Morpho‐Electric Subtypes of Pyramidal Neuron in the Subiculum. *Hippocampus*. * `Wilson MA, Sumera A, Berk E, Booker SA (2026) `_ Elevated somatostatin interneuron long-term potentiation minimally regulates temporoammonic plasticity in a mouse model of Fragile X Syndrome. *Frontiers in Pharmacology*. ==== 2025 ==== * `Wilson MA, Sumera A, Taylor LW, et al. (2025) `_ Phylogenetic divergence of GABAB receptor signaling in neocortical networks over adult life. *Nat Comm* 16:59262. * `Le Bail R, Lakaye B, Espuny-Camacho I, et al. (2025) `_ Ccp1 depletion disrupts network integration of hippocampal parvalbumin interneurons. *iScience* 28(8):113215. * `Wang FC, Bouquiaux O, Lievens I, et al. (2025) `_ Clinical, electromyographic, and biophysical characterization of the rare Nav1.4 channel mutation SCN4A L1436P. *Front Physiol* 16:1617672. * `Loureiro R, Booker SA, Kulik A, et al. (2025) `_ GABAB receptors negatively modulate excitatory plasticity at the mossy fiber synapse onto parvalbumin-expressing basket and axo-axonic cells in the dentate gyrus. *Front Synaptic Neurosci* 17:1656759. * `Potts Y, Daykin H, Van Den Bossche M, et al. (2025) `_ Characterization of locus coeruleus neuronal properties with aging in two mouse models of tauopathy. *J Alzheimers Dis* 105(1):325-342. * `Quadir SG, Zaidi S, Cone MG, et al. (2025) `_ Alcohol withdrawal alters the inhibitory landscape of the prelimbic cortex in an interneuron- and sex-specific manner. *Addict Neurosci* 8:100237. * `Aaltonen A, Tamaki A, Peris Ramon A, et al. (2025) `_ Postnatal reduction of eIF4E overexpression in D1-SPNs ameliorates KCNQ dysfunction, hyperexcitability and ASD-like behaviours. *bioRxiv* [preprint]. * `Wang FC, Bouquiaux O, Lievens I, et al. (2025) `_ Analysis of a rare pathogenic variant of the SCN4A gene (c.4307T>C, L1436P): from clinic to patch-clamp. *Research Square* [preprint]. * `Katsanevaki D, Dupuy N, Booker SA, et al. (2025) `_ Noradrenergic-dependent restoration of visual discrimination in a mouse model of SYNGAP1-related disorder. *bioRxiv* [preprint]. * `Knops MJ, Meftah S, Wilson MA, Taylor LW, et al. (2025) `_ FMRP regulates adult human cortical neuron excitability via cyclic-AMP signalling. *bioRxiv* [preprint]. * `Lee B, Xing X, Hammes EA, Zeng Z, et al. (2025) `_ Signaling by intracellular β2-adrenergic receptors regulates AMPA receptor trafficking and synaptic plasticity. *Cell Rep*. * `Li X, Winters ND, Pandey S, Lankford CK, et al. (2025) `_ Homeostatic scaling of dynorphin signaling by a non-canonical opioid receptor. *Nat Comm*. * `Yasmin F, Marwick K, Hunter D, Nawaz S, et al. (2025) `_ Absence of GluN2A in hippocampal CA1 neurons leads to altered dendritic structure and reduced frequency of miniature excitatory synaptic events. *Brain Communications*. * `O’Keeffe M, Booker SA, Walsh D, Li M, et al. (2025) `_ Typical development of synaptic and neuronal properties can proceed without microglia in the cortex and thalamus. *Nature Neuroscience*. ==== 2024 ==== * `Watson JF, Vargas-Barroso V, Morse-Mora RJ, et al. (2024) `_ Human hippocampal CA3 uses specific functional connectivity rules for efficient associative memory. *Cell* 187(24):6848-6864.e24. * `Chen J, Kaufmann WA, Chen C, et al. (2024) `_ Developmental transformation of Ca2+ channel-vesicle nanotopography at a central GABAergic synapse. *Neuron* 112(3):571-586.e8. * `Watson TC, Booker SA (2024) `_ Somatostatin interneurons recruit pre- and postsynaptic GABAB receptors in the adult mouse dentate gyrus. *eNeuro* 11(6):ENEURO.0115-24.2024. * `Degro CE, Vida I, Booker SA (2024) `_ Postsynaptic GABAB receptor-mediated currents in diverse dentate gyrus interneuron types. *Hippocampus* 34(10):1037-1053. * `Carbonell-Roig J, Aaltonen A, Wilson K, et al. (2024) `_ Dysregulated acetylcholine-mediated dopamine neurotransmission in the eIF4E Tg mouse model of autism spectrum disorders. *Cell Rep* 43(12):114997. * `Katsanevaki D, Till SM, Buller-Peralta I, et al. (2024) `_ Key roles of C2/GAP domains in SYNGAP1-related pathophysiology. *Cell Rep* 43(9):114733. * `Simões de Oliveira L, O'Leary H, Nawaz S, et al. (2024) `_ Enhanced hippocampal LTP but normal NMDA receptor and AMPA receptor function in a rat model of CDKL5 deficiency disorder. *Mol Autism* 15:45. * `Mehrotra D, Levenstein D, Duszkiewicz AJ, et al. (2024) `_ Hyperpolarization-activated currents drive neuronal activation sequences in sleep. *Curr Biol* 34(13):2930-2945.e6. * `Zimmermann D, Kress M, Zeidler M (2024) `_ Biophysical essentials - A full stack open-source software framework for conserved and advanced analysis of patch-clamp recordings. *Comput Methods Programs Biomed* 250:108328. * `Guarina L, Le J, Griffith TN, et al. (2024) `_ SanPy: Software for the analysis and visualization of whole-cell current-clamp recordings. *Biophys J* 123(8):1259-1272. * `Trovò L, Kouvaros S, Schwenk J, et al. (2024) `_ Synaptotagmin-11 facilitates assembly of a presynaptic signaling complex in post-Golgi cargo vesicles. *EMBO Rep* 25(6):e57893. * `Klein A, Klug K, Breyer M, et al. (2024) `_ Genetic variants of unknown significance in alpha-galactosidase A: cellular delineation from Fabry disease. *J Inherit Metab Dis* 47(5):945-960. * `Lawal OO, Ulloa Severino FP, Wang S, et al. (2024) `_ Astrocytic thrombospondins 1 and 2 are required for cortical synapse development controlling instrumental performance. *bioRxiv* [preprint]. * `Watson JF, Vargas-Barroso V, Jónás P (2024) `_ Cell-specific wiring routes information flow through hippocampal CA3. *bioRxiv* [preprint]. * `Wilson MA, Taylor LW, Meftah S, et al. (2024) `_ Phylogenetic divergence of GABA B receptor signalling in neocortical networks over adult life. *bioRxiv* [preprint]. * `Jehasse K, Jouhanneau JS, Wetz S, Schwedt A, et al. (2024) `_ Immediate reuse of patch-clamp pipettes after ultrasonic cleaning. *Scientific Reports*. * `Irala D, Wang S, Sakers K, Nagendren L, et al. (2024) `_ Astrocyte-secreted neurocan controls inhibitory synapse formation and function. *Neuron*. * `Winchester G, Steele OG, Liu S, Chagas AM, et al. (2024) `_ Reproducible supervised learning-assisted classification of spontaneous synaptic waveforms with Eventer. *Front Neuroinform*. * `Ye S, Song S, Liu X, Luo Y, et al. (2024) `_ A small‐molecule screen identifies novel aging modulators by targeting 5‐HT/DA signaling pathway. *Aging Cell*. * `Chen C, Niehaus JK, Dinç F, Huang KL, et al. (2024) `_ Neural circuit basis of placebo pain relief. *Nature*. * `Kim O, Okamoto Y, Kaufmann WA, Brose N, et al. (2024) `_ Presynaptic cAMP-PKA-mediated potentiation induces reconfiguration of synaptic vesicle pools and channel-vesicle coupling at hippocampal mossy fiber boutons. *PLoS Biology*. ==== 2023 ==== * `Grigoryan GA, Harada H, Knobloch‐Bollmann HS, Kilias A, et al. (2023) `_ Synaptic plasticity at the dentate gyrus granule cell to somatostatin-expressing interneuron synapses supports object location memory. *Proceedings of the National Academy of Sciences*. * `Breyer M, Grüner J, Кlеіn A, Finke L, et al. (2023) `_ In vitro characterization of cells derived from a patient with the GLA variant c.376A>G (p.S126G) highlights a non-pathogenic role in Fabry disease. *Molecular Genetics and Metabolism Reports*. * `Courtney CD, Sobieski C, Ramakrishnan C, Ingram RJ, et al. (2023) `_ Optoα1AR activation in astrocytes modulates basal hippocampal synaptic excitation and inhibition in a stimulation‐specific manner. *Hippocampus*. * `Michalska JM, Lyudchik J, Velicky P, Štefaničková H, et al. (2023) `_ Imaging brain tissue architecture across millimeter to nanometer scales. *Nature Biotechnology*. * `Boudkkazi S, Schwenk J, Nakaya N, Bréchet A, et al. (2023) `_ A Noelin-organized extracellular network of proteins required for constitutive and context-dependent anchoring of AMPA-receptors. *Neuron*. * `Velicky P, Miguel E, Michalska JM, Lyudchik J, et al. (2023) `_ Dense 4D nanoscale reconstruction of living brain tissue. *Nature Methods*. * `Guarina L, Le J, Griffith TN, Santana LF, et al. (2023) `_ SanPy: A whole-cell electrophysiology analysis pipeline. *bioRxiv* [preprint]. * `Buchholz MO, Guilabert AG, Ehret B, Schuhknecht GFP (2023) `_ How synaptic strength, short-term plasticity, and input synchrony contribute to neuronal spike output. *PLoS Computational Biology*. * `Vyleta NP, Snyder JS (2023) `_ Enhanced excitability but mature action potential waveforms at mossy fiber terminals of young, adult-born hippocampal neurons in mice. *Communications Biology*. * `Traunmüller L, Schulz JM, Ortiz R, Feng H, et al. (2023) `_ A cell-type-specific alternative splicing regulator shapes synapse properties in a trans-synaptic manner. *Cell Rep*. * `Wang X, Zhang X, Zheng M, Xu L, et al. (2023) `_ Noise-induced coexisting firing patterns in hybrid-synaptic interacting networks. *Physica A Statistical Mechanics and its Applications*. * `Yang Y, Booker SA, Clegg JM, Quintana‐Urzainqui I, et al. (2023) `_ Identifying foetal forebrain interneurons as a target for monogenic autism risk factors and the polygenic 16p11.2 microdeletion. *BMC Neuroscience*. * `Bonnycastle K, Dobson KL, Blumrich E, Gajbhiye A, et al. (2023) `_ Reversal of cell, circuit and seizure phenotypes in a mouse model of DNM1 epileptic encephalopathy. *Nat Comm*. * `Bershteyn M, Bröer S, Parekh M, Maury Y, et al. (2023) `_ Human pallial MGE-type GABAergic interneuron cell therapy for chronic focal epilepsy. *Cell stem cell*. ==== 2022 ==== * `Asiminas A, Booker SA, Dando O, Kozić Z, et al. (2022) `_ Experience-dependent changes in hippocampal spatial activity and hippocampal circuit function are disrupted in a rat model of Fragile X Syndrome. *Molecular Autism*. * `Traunmüller L, Schulz JM, Ortiz R, Feng H, et al. (2022) `_ Trans-cellular control of synapse properties by a cell type-specific splicing regulator. *bioRxiv* [preprint]. * `Hüwel JD, Gresch A, Berns F, Koch R, et al. (2022) `_ Tracing Patterns in Electrophysiological Time Series Data. *2022 IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA)*. * `Hu M, Jiang X (2022) `_ PatchView: A Python Package for Patch-clamp DataAnalysis and Visualization. *The Journal of Open Source Software*. * `Wang Y, Chiola S, Yang G, Russell C, et al. (2022) `_ Modeling human telencephalic development and autism-associated SHANK3 deficiency using organoids generated from single neural rosettes. *Nat Comm*. * `Chowdhury A, Luchetti A, Fernandes G, Filho DA, et al. (2022) `_ A locus coeruleus-dorsal CA1 dopaminergic circuit modulates memory linking. *Neuron*. * `de Oliveira LS, O’Leary H, Nawaz M, Loureiro R, et al. (2022) `_ Enhanced hippocampal LTP but typical NMDA receptor and AMPA receptor function in a novel rat model of CDKL5 deficiency disorder. *Research Square* [preprint]. * `Ben‐Simon Y, Kaefer K, Velicky P, Csicsvari J, et al. (2022) `_ A direct excitatory projection from entorhinal layer 6b neurons to the hippocampus contributes to spatial coding and memory. *Nat Comm*. * `Ingram RJ, Leverton LK, Daniels V, Li J, et al. (2022) `_ Increased GABA transmission to GnRH neurons after intrahippocampal kainic acid injection in mice is sex-specific and associated with estrous cycle disruption. *Neurobiology of Disease*. * `Anstey N, Kapgal V, Tiwari S, Watson TC, et al. (2022) `_ Imbalance of flight–freeze responses and their cellular correlates in the Nlgn3−/y rat model of autism. *Molecular Autism*. * `Ladd A, Kim KG, Balewski J, Bouchard KE, et al. (2022) `_ Scaling and Benchmarking an Evolutionary Algorithm for Constructing Biophysical Neuronal Models. *Front Neuroinform*. * `Hauser D, Behr K, Konno K, Schreiner D, et al. (2022) `_ Targeted proteoform mapping uncovers specific Neurexin-3 variants required for dendritic inhibition. *Neuron*. * `Fleming W, Lee J, Briones BA, Bolkan SS, et al. (2022) `_ Cholinergic interneurons mediate cocaine extinction in male mice through plasticity across medium spiny neuron subtypes. *Cell Rep*. * `Voss L, Bartos M, Elgueta C, Sauer J (2022) `_ Interneuron function and cognitive behavior are preserved upon postnatal removal of Lhx6. *Scientific Reports*. * `Velicky P, Miguel E, Michalska JM, Wei D, et al. (2022) `_ Saturated reconstruction of living brain tissue. *bioRxiv* [preprint]. * `Balmer TS, Trussell LO (2022) `_ Descending Axonal Projections from the Inferior Colliculus Target Nearly All Excitatory and Inhibitory Cell Types of the Dorsal Cochlear Nucleus. *J Neurosci*. * `Elmasri M, Hunter D, Winchester G, Bates EE, et al. (2022) `_ Common synaptic phenotypes arising from diverse mutations in the human NMDA receptor subunit GluN2A. *Communications Biology*. * `Degro CE, Bolduan F, Vida I, Booker SA (2022) `_ Interneuron diversity in the rat dentate gyrus: An unbiased in vitro classification. *Hippocampus*. * `Ben‐Simon Y, Kaefer K, Velicky P, Csicsvari J, et al. (2022) `_ Entorhinal layer 6b subplate neurons govern spatial learning and memory. *bioRxiv* [preprint]. * `Li S, Damonte VM, Chen C, Wang G, et al. (2022) `_ Hyperexcitable arousal circuits drive sleep instability during aging. *Science*. * `Sabaté‐Soler S, Nickels S, Saraiva C, Berger E, et al. (2022) `_ Microglia integration into human midbrain organoids leads to increased neuronal maturation and functionality. *Glia*. ==== 2021 ==== * `Briones BA, Pitcher MN, Fleming W, Libby A, et al. (2021) `_ Perineuronal Nets in the Dorsomedial Striatum Contribute to Behavioral Dysfunction in Mouse Models of Excessive Repetitive Behavior. *Biological Psychiatry Global Open Science*. * `Sanjel B, Kim B, Song M, Carstens E, et al. (2021) `_ Glucosylsphingosine evokes pruritus via activation of 5‐HT2A receptor and TRPV4 in sensory neurons. *British Journal of Pharmacology*. * `Chang C, Evans MD, Yu X, Yu G, et al. (2021) `_ Tau reduction affects excitatory and inhibitory neurons differently, reduces excitation/inhibition ratios, and counteracts network hypersynchrony. *Cell Rep*. * `Blockus H, Rolotti SV, Szoboszlay M, Pezé-Heidsieck E, et al. (2021) `_ Synaptogenic activity of the axon guidance molecule Robo2 underlies hippocampal circuit function. *Cell Rep*. * `Lodge M, Hernandez M, Schulz JM, Bischofberger J (2021) `_ Sparsification of AP firing in adult-born hippocampal granule cells via voltage-dependent α5-GABAA receptors. *Cell Rep*. * `Scheuer T, Brinke EAD, Grosser S, Wolf SA, et al. (2021) `_ Reduction of cortical parvalbumin-expressing GABAergic interneurons in a rodent hyperoxia model of preterm birth brain injury with deficits in social behavior and cognition. *Development*. * `Kim YG, Shin JJ, Kim SJ (2021) `_ Minhee Analysis Package: an integrated software package for detection and management of spontaneous synaptic events. *Molecular Brain*. * `Fleming W, Lee J, Briones BA, Bolkan SS, et al. (2021) `_ Cholinergic interneurons mediate cocaine extinction through similar plasticity across medium spiny neuron subtypes. *bioRxiv* [preprint]. * `Kim S, Guzman SJ, Jo DH, Cho CS, et al. (2021) `_ Giant Y79 retinoblastoma cells contain functionally active T-type calcium channels. *Pflügers Archiv - European Journal of Physiology*. * `Rupprecht P, Carta S, Hoffmann A, Echizen M, et al. (2021) `_ A database and deep learning toolbox for noise-optimized, generalized spike inference from calcium imaging. *Nature Neuroscience*. * `Booker SA, Sumera A, Kind PC, Wyllie DJA (2021) `_ Contribution of NMDA Receptors to Synaptic Function in Rat Hippocampal Interneurons. *eNeuro*. * `Vandael D, Okamoto Y, Jónás P (2021) `_ Transsynaptic modulation of presynaptic short-term plasticity in hippocampal mossy fiber synapses. *Nat Comm*. * `Vandael D, Okamoto Y, Borges-Merjane C, Vargas‐Barroso V, et al. (2021) `_ Subcellular patch-clamp techniques for single-bouton stimulation and simultaneous pre- and postsynaptic recording at cortical synapses. *Nature Protocols*. * `Zhang X, Schlögl A, Vandael D, Jónás P (2021) `_ MOD: A novel machine-learning optimal-filtering method for accurate and efficient detection of subthreshold synaptic events in vivo. *J Neurosci Methods*. * `de Oliveira LS, Sumera A, Booker SA (2021) `_ Repeated whole-cell patch-clamp recording from CA1 pyramidal cells in rodent hippocampal slices followed by axon initial segment labeling. *STAR Protocols*. * `Wang Y, Chiola S, Yang G, Russell C, et al. (2021) `_ Modeling autism-associated SHANK3 deficiency using human cortico-striatal organoids generated from single neural rosettes. *bioRxiv* [preprint]. * `Zoupi L, Booker SA, Eigel D, Werner C, et al. (2021) `_ Selective vulnerability of inhibitory networks in multiple sclerosis. *Acta Neuropathologica*. * `Holler S, Köstinger G, Martin KA, Schuhknecht GFP, et al. (2021) `_ Structure and function of a neocortical synapse. *Nature*. * `Courtney CD, Sobieski C, Ramakrishnan C, Ingram RJ, et al. (2021) `_ Evaluating the efficacy of Optoα1AR activation in astrocytes in modulating basal hippocampal synaptic excitation and inhibition. *bioRxiv* [preprint]. * `Sammons RP, Tzilivaki A, Schmitz D (2021) `_ OUP accepted manuscript. *Cerebral Cortex*. * `Chowdhury A, Luchetti A, Fernandes G, Filho DA, et al. (2021) `_ A Locus Coeruleus- Dorsal CA1 Dopaminergic Circuit Modulates Memory Linking. *SSRN Electronic Journal*. ==== 2020 ==== * `McCabe MP, Shore AN, Frankel WN, Weston MC (2020) `_ Altered Fast Synaptic Transmission in a Mouse Model of DNM1-Associated Developmental Epileptic Encephalopathy. *eNeuro*. * `Sammons RP, Tzilivaki A, Schmitz D (2020) `_ Local microcircuitry of parasubiculum shows distinct and common features of excitatory and inhibitory connectivity. *bioRxiv* [preprint]. * `Yasuda H, Yamamoto H, Hanamura K, Mehruba M, et al. (2020) `_ PKN1 promotes synapse maturation by inhibiting mGluR-dependent silencing through neuronal glutamate transporter activation. *Communications Biology*. * `Vandael D, Okamoto Y, Jónás P (2020) `_ Transsynaptic modulation of presynaptic short-term plasticity induction in hippocampal mossy fiber synapses. *bioRxiv* [preprint]. * `Zoupi L, Booker SA, Eigel D, Werner C, et al. (2020) `_ Demyelination induces selective vulnerability of inhibitory networks in multiple sclerosis. *bioRxiv* [preprint]. * `Rupprecht P, Carta S, Hoffmann A, Echizen M, et al. (2020) `_ Database and deep learning toolbox for noise-optimized, generalized spike inference from calcium imaging. *bioRxiv* [preprint]. * `Anstey N, Kapgal V, Tiwari S, Watson TC, et al. (2020) `_ Imbalance of flight-freeze responses and their cellular correlates in the Nlgn3 -/y rat model of autism. *bioRxiv* [preprint]. * `Zhang X, Schlögl A, Jónás P (2020) `_ Selective Routing of Spatial Information Flow from Input to Output in Hippocampal Granule Cells. *Neuron*. * `Booker SA, de Oliveira LS, Anstey N, Kozić Z, et al. (2020) `_ Input-Output Relationship of CA1 Pyramidal Neurons Reveals Intact Homeostatic Mechanisms in a Mouse Model of Fragile X Syndrome. *Cell Rep*. * `Lodge M, Hernandez M, Schulz JM, Bischofberger J (2020) `_ Sparsification of AP firing in adult-born hippocampal granule cells via voltage-dependent α5-GABA A receptors. *bioRxiv* [preprint]. * `Rajaram E, Pagella S, Grothe B, Kopp‐Scheinpflug C (2020) `_ Physiological and anatomical development of glycinergic inhibition in the mouse superior paraolivary nucleus following hearing onset. *Journal of Neurophysiology*. * `Vandael D, Borges-Merjane C, Zhang X, Jónás P (2020) `_ Short-Term Plasticity at Hippocampal Mossy Fiber Synapses Is Induced by Natural Activity Patterns and Associated with Vesicle Pool Engram Formation. *Neuron*. * `Roth FC, Hu H (2020) `_ An axon-specific expression of HCN channels catalyzes fast action potential signaling in GABAergic interneurons. *Nat Comm*. * `Brebner LS, Ziminski JJ, Margetts‐Smith G, Sieburg MC, et al. (2020) `_ Extinction of cue‐evoked food‐seeking recruits a GABAergic interneuron ensemble in the dorsal medial prefrontal cortex of mice. *Eur J Neurosci*. * `Eguchi K, Velicky P, Hollergschwandtner E, Itakura M, et al. (2020) `_ Advantages of Acute Brain Slices Prepared at Physiological Temperature in the Characterization of Synaptic Functions. *Front Cell Neurosci*. * `Booker SA, Harada H, Elgueta C, Bank J, et al. (2020) `_ Presynaptic GABAB receptors functionally uncouple somatostatin interneurons from the active hippocampal network. *eLife*. * `Borges-Merjane C, Kim O, Jónás P (2020) `_ Functional Electron Microscopy, “Flash and Freeze,” of Identified Cortical Synapses in Acute Brain Slices. *Neuron*. ==== 2019 ==== * `Luck R, Urban S, Karakatsani A, Harde E, et al. (2019) `_ VEGF/VEGFR2 signaling regulates hippocampal axon branching during development. *eLife*. * `Peng Y, Mittermaier FX, Planert H, Schneider UC, et al. (2019) `_ High-throughput microcircuit analysis of individual human brains through next-generation multineuron patch-clamp. *eLife*. * `Eguchi K, Velicky P, Hollergschwandtner E, Itakura M, et al. (2019) `_ Advantages of acute brain slices prepared at physiological temperature in characterization of synaptic functions. *bioRxiv* [preprint]. * `Brebner LS, Ziminski JJ, Margetts‐Smith G, Sieburg MC, et al. (2019) `_ The Emergence of a Stable Neuronal Ensemble from a Wider Pool of Activated Neurons in the Dorsal Medial Prefrontal Cortex during Appetitive Learning in Mice. *J Neurosci*. * `Blockus H, Rolotti SV, Szoboszlay M, Ming T, et al. (2019) `_ Synaptogenic activity of the axon guidance molecule Robo2 is critical for hippocampal circuit function. *bioRxiv* [preprint]. * `Sieburg MC, Ziminski JJ, Margetts‐Smith G, Reeve HM, et al. (2019) `_ Reward Devaluation Attenuates Cue-Evoked Sucrose Seeking and Is Associated with the Elimination of Excitability Differences between Ensemble and Non-ensemble Neurons in the Nucleus Accumbens. *eNeuro*. * `Booker SA, Domanski AP, Dando O, Jackson AD, et al. (2019) `_ Altered dendritic spine function and integration in a mouse model of fragile X syndrome. *Nat Comm*. * `Haq N, Schmidt‐Hieber C, Sialana FJ, Ciani L, et al. (2019) `_ Loss of Bardet-Biedl syndrome proteins causes synaptic aberrations in principal neurons. *PLoS Biology*. * `Rajaram E, Kaltenbach C, Fischl MJ, Mrowka L, et al. (2019) `_ Slow NMDA-Mediated Excitation Accelerates Offset-Response Latencies Generated via a Post-Inhibitory Rebound Mechanism. *eNeuro*. * `Schulz JM, Knoflach F, Hernandez M, Bischofberger J (2019) `_ Enhanced Dendritic Inhibition and Impaired NMDAR Activation in a Mouse Model of Down Syndrome. *J Neurosci*. * `Rojas PA, Plath JA, Gestrich J, Ananthasubramaniam B, et al. (2019) `_ Beyond spikes: Multiscale computational analysis ofin vivolong-term recordings in the cockroach circadian clock. *Network Neuroscience*. ==== 2018 ==== * `Espinoza C, Guzman SJ, Zhang X, Jónás P (2018) `_ Parvalbumin+ interneurons obey unique connectivity rules and establish a powerful lateral-inhibition microcircuit in dentate gyrus. *Nat Comm*. * `Rifkin R, Huyghe D, Li X, Parakala ML, et al. (2018) `_ GIRK currents in VTA dopamine neurons control the sensitivity of mice to cocaine-induced locomotor sensitization. *Proceedings of the National Academy of Sciences*. * `Schulz JM, Knoflach F, Hernandez M, Bischofberger J (2018) `_ Dendrite-targeting interneurons control synaptic NMDA-receptor activation via nonlinear α5-GABAA receptors. *Nat Comm*. * `Parras A, Anta H, Santos‐Galindo M, Swarup V, et al. (2018) `_ Autism-like phenotype and risk gene mRNA deadenylation by CPEB4 mis-splicing. *Nature*. * `Luis COS, Sánchez-García MA, Nieto-González JL, García‐Junco‐Clemente P, et al. (2018) `_ Substantia nigra dopaminergic neurons and striatal interneurons are engaged in three parallel but interdependent postnatal neurotrophic circuits. *Aging Cell*. * `Grimm C, Silapētere A, Vogt A, Sierra YAB, et al. (2018) `_ Electrical properties, substrate specificity and optogenetic potential of the engineered light-driven sodium pump eKR2. *Scientific Reports*. * `Scheib U, Broser M, Constantin OM, Yang SF, et al. (2018) `_ Rhodopsin-cyclases for photocontrol of cGMP/cAMP and 2.3 Å structure of the adenylyl cyclase domain. *Nat Comm*. * `Rothman JS, Silver RA (2018) `_ NeuroMatic: An Integrated Open-Source Software Toolkit for Acquisition, Analysis and Simulation of Electrophysiological Data. *Front Neuroinform*. * `Hu H, Roth FC, Vandael D, Jónás P (2018) `_ Complementary Tuning of Na+ and K+ Channel Gating Underlies Fast and Energy-Efficient Action Potentials in GABAergic Interneuron Axons. *Neuron*. * `Kim S, Kim Y, Lee S, Ho W (2018) `_ Dendritic spikes in hippocampal granule cells are necessary for long-term potentiation at the perforant path synapse. *eLife*. * `Marshall J, Xu J, Contractor A (2018) `_ Kainate Receptors Inhibit Glutamate Release Via Mobilization of Endocannabinoids in Striatal Direct Pathway Spiny Projection Neurons. *J Neurosci*. * `Turko P, Groberman K, Browa F, Cobb S, et al. (2018) `_ Differential Dependence of GABAergic and Glutamatergic Neurons on Glia for the Establishment of Synaptic Transmission. *Cerebral Cortex*. ==== 2017 ==== * `Chen C, Satterfield R, Young SM Jr, Jonas P (2017). `_ Triple Function of Synaptotagmin 7 Ensures Efficiency of High-Frequency Transmission at Central GABAergic Synapses. *Cell Rep* 21:2082-2089. * `Christiansen GB Andersen KH, Riis S, Nykjaer A, Bolcho U, Jensen MS, Holm MM (2017). `_ The sorting receptor SorCS3 is a stronger regulator of glutamate receptor functions compared to GABAergic mechanisms in the hippocampus. *Hippocampus* 27:235-248. * `Li L, Sultan S, Heigele S, Schmidt-Salzmann C, Toni N, Bischofberger J (2017) `_ Silent synapses generate sparse and orthogonal action potential firing in adult-born hippocampal granule cells. *eLife* 2017;6:e23612 * `Schmidt-Hieber C, Toleikyte G, Aitchison L, Roth A, Clark BA, Branco T, Häusser M (2017). `_ Active dendritic integration as a mechanism for robust and precise grid cell firing. *Nat Neurosci* 8:1114-1121 * `Rueckl M, Lenzi SC, Moreno-Velasquez L, Parthier D, Schmitz D, Ruediger S, Johenning FW (2017). `_ SamuROI, a Python-Based Software Tool for Visualization and Analysis of Dynamic Time Series Imaging at Multiple Spatial Scales. *Front Neuroinform* doi: 10.3389/fninf.2017.00044 * `Saras A, Wu VV, Brawer HJ, Tanouye MA (2017). `_ Investigation of Seizure-Susceptibility in a Drosophila melanogaster Model of Human Epilepsy with Optogenetic Stimulation. *Genetics* 206:1739-1746 * `Batsikadze G, Paulus W, Hasan A, Grundey J, Kuo MF, Nitsche MA (2017). `_ Compromised neuroplasticity in cigarette smokers under nicotine withdrawal is restituted by the nicotinic α4β2-receptor partial agonist varenicline. *Sci Rep* 7:1387 * `Booker SA, Campbell GR, Mysiak KS, Brophy PJ, Kind PC, Mahad DJ, Wyllie DJ (2017). `_ Loss of protohaem IX farnesyltransferase in mature dentate granule cells impairs short-term facilitation at mossy fibre to CA3 pyramidal cell synapses. *J Physiol* 195:2147-2160. * `Akbalik G, Langebeck-Jensen K, Tushev G, Sambandan S, Rinne J, Epstein I, Cajigas 1, Vlatkovic I, Schuman EM (2017). `_ Visualization of newly synthesized neuronal RNA in vitro and in vivo using click-chemistry. *RNA Biol.* 14:20-28. * `Cross KP, Britton S, Mangulins R, Money TG, Robertson RM (2017). `_ Food deprivation and prior anoxic coma have opposite effects on the activity of a visual interneuron in the locust. *J Inset Physiol* 98:336-346. * `Gan J, Weng SM, Pernía-Andrade AJ, Csicsvari J, Jonas P (2017). `_ Phase-Locked Inhibition, but Not Excitation, Underlies Hippocampal Ripple Oscillations in Awake Mice In Vivo. *Neuron* 10.1016/j.neuron.2016.12.018 * `Sinclair JL, Fischl MJ, Alexandrova O, Heβ M, Grothe B, Leibold C, Kopp-Scheinpflug C (2017). `_ Sound-Evoked Activity Influences Myelination of Brainstem Axons in the Trapezoid Body. *J Neurosci* 37 (34) 8239-8255. * `Sambandan S, Akbalik G, Kochen L, Rinne J, Kahlstatt J, Glock C, Tushev G, Alvarez-Castelao B, Heckel A, Schuman EM (2017). `_ Activity-dependent spatially localized miRNA maturation in neuronal dendrites. *Science*, Feb 10; 355:634-637. * `Sinclair JL, Barnes-Davies M, Kopp-Scheinpflug C, Forsythe ID (2017). `_ Strain-specific differences in the development of neuronal excitability in the mouse ventral nucleus of the trapezoid body. *Hear Res* 18:28-37. ==== 2016 ==== * `Vyleta NP, Borges-Merjane C, Jonas P (2016) `_ Plasticity-dependent, full detonation at hippocampal mossy fiber–CA3 pyramidal neuron synapses. *eLife* 2016;5:e17977. * `Brunner J, Szabadics J (2016) `_ Analogue modulation of back-propagating action potentials enables dendritic hybrid signalling. *Nat Comm* Oct 5;7:13033. * `Hanus C, Geptin H, Tushev G, Garg S, Alvarez-Castelao B, Sambandan S, Kochen L, Hafner AS, Langer JD, Schuman EM (2016) `_ Unconventional secretory processing diversifies neuronal ion channel properties. *eLife* 2016;5:e20609. * `Engel D (2016) `_ Subcellular Patch-clamp Recordings from the Somatodendritic Domain of Nigral Dopamine Neurons. *J Vis Exp* doi: 10.3791/54601 * `Guzman SJ, Schlögl A, Frotscher M, Jonas P (2016) `_ Synaptic mechanisms of pattern completion in the hippocampal CA3 network. *Science*, Sep 9; 353:1117-23. * `Iijima Y, Behr K, Iijima T, Biemans B, Bischofberger J, Scheiffele P (2016) `_ Distinct Defects in Synaptic Differentiation of Neocortical Neurons in Response to Prenatal Valproate Exposure. *Sci Rep* 6:27400. * `Janz P, Savanthrapadian S, Haussler U, Kilias A, Nestel S, Kretz O, Kirsch M, Bartos M, Egert U, Haas CA (2016) `_ Synaptic Remodeling of Entorhinal Input Contributes to an Aberrant Hippocampal Network in Temporal Lobe Epilepsy. *Cerebral Cortex* bhw093. * `Money TG, Sproule MK, Cross KP, Robertson RM (2016) `_ Octopamine stabilizes conduction reliability of an unmyelinated axon during hypoxic stress. *J Neurophysiol* jn-00354. * `Cross KP, Robertson RM (2016) `_ Ionic mechanisms maintaining action potential conduction velocity at high firing frequencies in an unmyelinated axon. *Physiol Reports* 4(10):e12814. * `Mishra RK, Kim S, Guzman SJ, Jonas P (2016) `_ Symmetric spike timing-dependent plasticity at CA3-CA3 synapses optimizes storage and recall in autoassociative networks. *Nat Comm* May 13;7:11552. * `Merel J, Shababo B, Naka A, Adesnik H, Paninski L (2016) `_ Bayesian methods for event analysis of intracellular currents. *J Neurosci Methods* 269:21-32. * `Booker SA, Althof D, Gross A, Loreth D, Müller J, Unger A, Fakler B, Varrao A, Watanabe M, Gassmann M, Bettler B, Shigemoto R, Vida I, Kulik A (2016) `_ KCTD12 Auxiliary Proteins Modulate Kinetics of GABAB Receptor-Mediated Inhibition in Cholecystokinin-Containing Interneurons. *Cereb Cortex* pii:bhw090 * `Heigele S, Sultan S, Toni N, Bischofberger J (2016) `_ Bidirectional GABAergic control of action potential firing in newborn hippocampal granule cells. *Nat Neurosci* 19, 263-270. ==== 2015 ==== * `Kroll JR, Wong KG, Siddiqui FM, Tanouye MA (2015). `_ Disruption of Endocytosis with the Dynamin Mutant shibirets1 Suppresses Seizures in Drosophila. *Genetics* 201:1087-1102. * `Sultan S, Li L, Moss J, Petrelli F, Casse F, Gebara E, Lopatar J, Pfrieger FW, Bezzi P, Bischofberger J, Toni N (2015) `_ Synaptic Integration of Adult-Born Hippocampal Neurons Is Locally Controlled by Astrocytes. *Neuron* 88(5):957-72. * `Kowalski J, Gan J, Jonas P, Pernía-Andrade AJ (2015) `_ Intrinsic membrane properties determine hippocampal differential firing pattern in vivo in anesthetized rats. *Hippocampus* doi: 10.1002/hipo.22550. * `Scheib U, Stehest K, Gee CE, Körschen HG, Fudim R, Oertner TG, Hegemann P (2015) `_ The rhodopsin-guanylyl cyclase of the aquatic fungus Blastocladiella emersonii enables fast optical control of cGMP signaling. *Sci Signal* 2015 Aug 11;8(389):rs8. doi: 10.1126/scisignal.aab0611. * `Booker SA, Pires N, Cobb S, Soares-da-Silva P, Vida I (2015) `_ Carbamazepine and oxcarbazepine, but not eslicarbazepine, enhance excitatory synaptic transmission onto hippocampal CA1 pyramidal cells through an antagonist action at adenosine A1 receptors. *Neuropharmacology* 93:103-15 * `Chan V, Neal DM, Uzel SGM, Kim H, Bashir R, Asada HH (2015) `_ Fabrication and characterization of optogenetic, multi-strip cardiac muscles. *Lab Chip* 15: 2258-2268 * `Oettinghaus B, Schulz JM, Restelli LM, et al. (2015) `_ Synaptic dysfunction, memory deficits and hippocampal atrophy due to ablation of mitochondrial fission in adult forebrain neurons. *Cell Death Diff* doi: 10.1038/cdd.2015.39 * `Franzoni E, Booker SA, Parthasarathy S, et al. (2015) `_ miR-128 regulates neuronal migration, outgrowth and intrinsic excitability via the intellectual disability gene Phf6. Polleux F, ed. *eLife* 2015:4;e04263. * `Degro CE, Kulik A, Booker SA, Vida I (2015) `_ Compartmental distribution of GABAB receptor-mediated currents along the somatodendritic axis of hippocampal principal cells. *Front Synaptic Neurosci* 7:6. * `Hönigsperger C, Marosi M, Murphy R, Storm JF (2015) `_ Dorsoventral differences in Kv7/M-current and its impact on resonance, temporal summation and excitability in rat hippocampal pyramidal cells. *J Physiol* 593(7): 1551-1580. * `You X, Vlatkovic I, Babic A, et al. (2015) `_ Neural circular RNAs are derived from synaptic genes and regulated by development and plasticity. *Nat Neurosci* doi:10.1038/nn.3975. * `Strüber M, Jonas P, Bartos M (2015) `_ Strength and duration of perisomatic GABAergic inhibition depend on distance between synaptically connected cells. *PNAS* 112:1220-5 ============== 2014 and older ============== * `Booker SA, Song J, Vida I (2014) `_ Whole-cell Patch-clamp Recordings from Morphologically- and Neurochemically-identified Hippocampal Interneurons. *J Vis Exp* (91), e51706, doi:10.3791/51706 * `Kim S (2014) `_ Action Potential Modulation in CA1 Pyramidal Neuron Axons Facilitates OLM Interneuron Activation in Recurrent Inhibitory Microcircuits of Rat Hippocampus. *PLoS One* 9:e113124. * `Guzman SJ, Schlögl A, Schmidt-Hieber C (2014) `_ Stimfit: quantifying electrophysiological data with Python. *Front Neuroinform* doi: 10.3389/fninf.2014.00016 * `Savanthrapadian S, Meyer T, Elgueta C, Booker SA, Vida I, Bartos M (2014) `_ Synaptic properties of SOM- and CCK-expressing cells in dentate gyrus interneuron networks. *J Neurosci* 24:8197-8209. * `Boudkkazi S, Brechet A, Schwenk J and Fakler B (2014). `_ Cornichon2 dictates the time course of excitatory transmission at individual hippocampal synapes. *Neuron*, doi: http://dx.doi.org/10.1016/j.neuron.2014.03.031 * `Hu H and Jonas P (2014). `_ A supercritical density of Na+ channels ensures fast signaling in GABAergic interneuron axons. *Nat Neurosci*, doi:10.1038/nn.3678 * `Vyleta NP and Jonas P (2014). `_ Loose coupling between Ca2+ channels and release sensors at a plastic hippocampal synapse. *Science*, Feb 7; 343:665-70. * `Schmidt-Salzmann C, Li L, Bischofberger J (2013). `_ Functional properties of extrasynaptic AMPA and NMDA receptors during postnatal hippocampal neurogenesis. *J Physiol*, doi: 10.1113/jphysiol.2013.267203 * `Hosp JA, Strüber M, Yanagawa Y, Obata K, Vida I, Jonas P, Bartos M (2013). `_ Morpho-physiological criteria divide dentate gyrus interneurons into classes. *Hippocampus*, doi: 10.1002/hipo.22214 * `Schlögl A, Jonas P, Schmidt-Hieber C, Guzman SJ (2013). `_ Stimfit: a fast visualization and analysis environment for cellular neurophysiology. Biomedical Engineering/Biomedizinische Technik. * `Rodriguez-Sierra OE, Turesson HK, Pare D (2013). `_ Contrasting distribution of physiological cell types in different regions of the bed nucleus of the stria terminalis. *J Neurophysiol* August 7, 2013, doi: 10.1152/jn.00408.2013 * `Booker SA, Gross A, Althof D, Shigemoto R, Bettler B, Frotscher M, Hearing M, Wickman K, Watanabe M, Kulik A, Vida I (2013). `_ Differential GABAB-receptor-mediated effects in perisomatic- and dendrite-targeting parvalbumin interneurons. *J Neurosci* 33:7961-7974. * `Turesson HK, Rodriguez-Sierra OE, Pare D (2013). `_ Intrinsic connections in the anterior part of the bed nucleus of the stria terminalis. *J Neurophysiol* February 27, 2013, doi: 10.1152/jn.00004.2013 * `Schmidt-Hieber C, Häusser M (2013). `_ Cellular mechanisms of spatial navigation in the medial entorhinal cortex. *Nat Neurosci* 16(3):325-331. * `Fuzik J, Gellért L, Oláh G, Herédi J, Kocsis K, Knapp L, Nagy D, Kincses ZT, Kis Z, Farkas T, Toldi J (2013). `_ Fundamental interstrain differences in cortical activity between Wistar and Sprague-Dawley rats during global ischemia. *Neuroscience* 228:371-381. * `McLeod F, Ganley R, Williams L, Selfridge J, Bird A, Cobb SR (2013). `_ Reduced seizure threshold and altered network oscillatory properties in a mouse model of Rett syndrome. *Neuroscience* 231:195-205. * `Ho EC, Strüber M, Bartos M, Zhang L, Skinner FK (2012). `_ Inhibitory Networks of Fast-Spiking Interneurons Generate Slow Population Activities due to Excitatory Fluctuations and Network Multistability. *J Neurosci* 29:9931-9946. * `Kim S, Guzman SJ, Hu H, Jonas P (2012). `_ Active dendrites support efficient initiation of dendritic spikes in hippocampal CA3 pyramidal neurons. *Nat Neurosci* 15(4):600-606. * `Eggermann E and Jonas P (2012). `_ How the 'slow' Ca\ :sup:`2+` buffer parvalbumin affects transmitter release in nanodomains-coupling regimes. *Nat Neurosci* 15(1):2022. * `Sauer JF, Strüber M, Bartos M (2012) `_ Interneurons provide circuit-specific depolarization and hyperpolarization. *J Neurosci* 32(12):4224-4229. * `Poh YC, Beyder A, Strege PR, Farrugia G, Buist ML (2011). `_ Quantification of gastrointestinal sodium channelopathy. *J Theor Biol* 293:41-48. * `Sambandan S, Sauer JF, Vida I, Bartos M (2010). `_ Associative plasticity at excitatory synapses facilitates recruitment of fast-spiking interneurons in the dentate gyrus. *J Neurosci* 30:11826-11837. * `Pelkonen A, Hiltunen M, Kiianmaa K, Yavich L (2010). `_ Stimulated dopamine overflow and alpha-synuclein expression in the nucleus accumbens core distinguish rats bred for differential ethanol preference. *J Neurochem* 114:1168-1176. * `Schmidt-Hieber C, Bischofberger J (2010). `_ Fast sodium channel gating supports localized and efficient axonal action potential initiation. *J Neurosci* 30(30):10233-10242. * `Guzman SJ, Schmidt H, Franke H, Krügel U, Eilers J, Illes P, Gerevich Z (2010). `_ P2Y\ :sub:`1` receptors inhibit long-term depression in the prefrontal cortex. *Neuropharmacology* 59(6):406-415. * `Seutin V, Engel D (2010) `_ Differences in Na\ :sup:`+` Conductance Density and Na\ :sup:`+` Channel Functional Properties Between Dopamine and GABA Neurons of the Rat Substantia Nigra. *J Neurophysiol* 103:3099-3114. * `Kowalski J, Geuting M, Paul S, Dieni S, Laurens J, Zhao S, Drakew A, Haas CA, Frotscher M, Vida I (2010). `_ Proper Layering Is Important for Precisely Timed Activation of Hippocampal Mossy Cells. *Cereb Cortex.* 20(9):2043-2054. * `Sauer JF, Bartos M (2010). `_ Recruitment of early postnatal parvalbumin-positive hippocampal interneurons by GABAergic excitation. *J Neurosci.* 30(1):110-5. * `Babu H, Ramirez-Rodriguez, Fabel K, Bischofberger J, Kempermann G (2009). `_ Synaptic network activity induces neuronal differentiation of adult hippocampal precursor cells through BDNF signaling. *Front. Neurogenesis* 30:3-49. * `Doischer D, Hosp JA, Yanagawa Y, Obata K, Jonas P, Vida I, Bartos M (2008). `_ Postnatal differentiation of basket cells from slow to fast signaling devices. *J Neurosci.* 28(48):12956-68. * `Stocca G, Schmidt-Hieber C, Bischofberger J (2008). `_ Differential dendritic Ca\ :sup:`2+` signalling in young and mature hippocampal granule cells. *J Physiol.* 586(16):3795-811. * `Schmidt-Hieber C, Jonas P, Bischofberger J (2008). `_ Action potential initiation and propagation in hippocampal mossy fibre axons. *J Physiol.* 586(7):1849-57. * `Li L, Bischofberger J, Jonas P (2007). `_ Differential gating and recruitment of P/Q-, N-, and R-type Ca\ :sup:`2+` channels in hippocampal mossy fiber boutons. *J Neurosci.* 27(49):13420-9. * `Schmidt-Hieber C, Jonas P, Bischofberger J (2007). `_ Subthreshold dendritic signal processing and coincidence detection in dentate gyrus granule cells. *J Neurosci.* 27(31):8430-41. * `Hefft S, Jonas P (2005). `_ Asynchronous GABA release generates long-lasting inhibition at a hippocampal interneuron-principal neuron synapse. *Nat Neurosci.* 8(10):1319-28. * `Schmidt-Hieber C, Jonas P, Bischofberger J (2004). `_ Enhanced synaptic plasticity in newly generated granule cells of the adult hippocampus. *Nature.* 2004 May 13;429(6988):184-7. .. toctree:: :maxdepth: 2 stimfit-0.17.1/doc/sphinx/requirements.txt000066400000000000000000000000151517235503400206220ustar00rootroot00000000000000sphinx>=7,<9 stimfit-0.17.1/doc/sphinx/stf_reference/000077500000000000000000000000001517235503400201545ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/stf_reference/stf.rst000066400000000000000000001025301517235503400215030ustar00rootroot00000000000000:mod:`stf` ========== :Author: Christoph Schmidt-Hieber (christsc at gmx.de) :Release: |version| :Date: |today| .. module:: stf :synopsis: The stf module allows to access a running stimfit application from the embedded python shell. The :mod:`stf` module defines the following functions: .. function:: align_selected(alignment, active=False) Aligns the selected traces to the index that is returned by the alignment function, and then creates a new window showing the aligned traces. This function requires to select the traces of interest and the presence of a second (i.e reference) channel. **Arguments:** *alignment* -- The alignment function to be used. Accepts any function returning a valid index within a trace. These are some predefined possibilities: maxrise_index (default; maximal slope during rising phase), peak_index (Peak of an event), foot_index (Beginning of an event), t50left_index, t50right_index (Left/right half-maximal amplitude) *active* -- If True, the alignment function will be applied to the active channel. If False (default), it will be applied to the inactive channel. *zeropad* -- Not yet implemented:If True, missing parts at the beginning or end of a trace will be padded with zeros after the alignment. If False (default), traces will be cropped so that all traces have equal sizes. .. function:: check_doc(\*args) Checks whether a file is open. **Returns:** True if a file is open, False otherwise .. function:: close_all(\*args) Closes all open files. **Returns:** True if all files could be closed. .. function:: close_this(\*args) Closes the currently active file. **Returns:** True if the file could be closed. .. function:: cut_traces(pt) Cuts the selected traces at the sampling points in pt_list and shows the cut traces in a new window. **Returns:** True upon success, False upon failure. .. function:: cut_traces_multi(pt_list) Cuts the selected traces at the sampling points in pt_list and show the cut traces in a new window. **Returns:** True upons sucess, False upon failure. .. function:: erase_markers() Delete the markes created with :func:`set_marker()` .. function:: file_open(\*args) Opens a file. **Arguments:** *filename* -- The file to be opened. On Windows, use double back-slashes ("\\") between directories to avoid conversion to special characters such as "\t" or "\n". Example usage in Windows: :: >>> file_open("C:\\data\\datafile.dat"). Example usage in Linux: :: >>> file_open("/home/cs/data/datafile.dat"). This is surprisingly slow when called from python. Haven't figured out the reason yet. **Returns:** True is the file could be opened, False otherwise. .. function:: file_save(\*args) Saves a file. **Arguments:** *filename* -- The file to be saved. On Windows, use double back-slashes ("\\") between directories to avoid con-version to special characters such as "\t" or "\n". Example usage in Windows: :: >>> file_save("C:\\data\\datafile.dat") Example usage in Linux: :: >>> file_save("/home/cs/data/datafile.dat") This is surprisingly slow when called from python. Haven't figured out the reason yet. **Returns:** True if the file could be saved, False otherwise. .. function:: foot_index(active=True) Returns the zero-based index of the foot of an event in the active channel. The foot is the intersection of an interpolated line through the points of 20 and 80% rise with the baseline. Uses the currently measured values, i.e. does not update measurements if the peak or base window cursors have changed. **Arguments:** *active* -- If True, returns the current index of the foot within the active channel. Only implemented for the active channelat this time. Will return a negative value and show an error message if *active* == False. **Returns:** The zero-based index of the foot of an event in units of sampling points. Interpolates between sampling points. Returns a negative value upon failure. .. function:: get_base(\*args) Returns the current baseline value. Uses the currently measured values, i.e. does not update measurements if the peak or base window cursors have changed. **Returns:** The current baseline. .. function:: get_base_SD() Returns the standard deviation of the baseline in the current (active) channel. Uses the currently measured values, i.e. does not update measurements if the baseline cursors have changed. **Returns:** 0.0 upon failure (i.e. no file opened), otherwise, the standard deviation of the baseline. .. function:: get_baseline_method() Gets the method used to compute the baseline. **Returns:** A string specifying the method to compute the baseline. Can be one of "mean" or "median" .. function:: get_base_end(is_time=False) Returns the zero-based index or the time point of the base end cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True,returns the time from the beginning of the trace to the cursor position. .. function:: get_base_start(is_time=False) Returns the zero-based index or the time point of the base start cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True,returns the time from the beginning of the trace to the cursor position. .. function:: get_channel_index(active=True) Returns the ZERO-BASED index of the specified channel. **Arguments:** *active* -- If True, returns the index of the active (black) channel. If False, returns the index of the inactive (red) channel. .. function:: get_channel_name(index=-1) Returns the name of the channel with the specified index. **Arguments:** *index* -- The zero-based index of the channel of interest. If < 0, the name of the active channel will be returned. **Returns:** the name of the channel with the specified index. .. function:: get_filename(\*args) Returns the name of the current file. .. function:: get_fit(trace=-1, channel=-1) Get the waveform resulted from the fitting, if available. **Arguments:** *trace* -- The zero-based index of the trace of interest. If negative, the name of the active trace will be returned. *channel* -- The zero-based index of the trace of interest. If negative, the active channel will be used. **Returns:** A two dimensional NumPy array with the x-values of the fit in the first dimension and the y-values in the second dimension. None if no fit is available. .. function:: get_fit_end(is_time=False) Returns the zero-based index or the time point of the fit end cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True,returns the time from the beginning of the trace to the cursor position. .. function:: get_fit_start(is_time=False) Returns the zero-based index or the time point of the fit start cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True, returns the time from the beginning of the trace to the cursor position. .. function:: get_halfwidth(active=True) Returns the half-maximal amplitude of an event in the specified channel.Uses the currently measured values, i.e. does not update measurements if thepeak or base window cursors have changed. Only implemented for the active channel. **Arguments:** *active* -- If True, returns the current half-maximal amplitude within the active channel. **Returns:** The half-maximal amplitude in units of x-units. Returns a negative value upon failure. .. function:: get_latency(\*args) Returns the latency value (in x-units) determined by the latency cursors set in the cursors settings menu. Call :func:`measure()` or hit enter to update the cursors. .. function:: get_latency_end_mode(\*args) Returns a string specifying the latency end mode. Can be one of "manual", "peak", "rise", "foot" or "half". .. function:: get_latency_start_mode(\*args) Returns a string specifying the latency start mode. Can be one of "manual", "peak", "rise", or "half". .. function:: get_maxdecay(\*args) Returns the the maximal slope of the decay between the peak cursors. Returns -1.0 upon error. Call :func:`measure()` or hit enter to update the value. .. function:: get_maxrise(\*args) Returns the the maximal slope of the rise between the peak cursors. Returns -1.0 upon error. Call :func:`measure()` or hit enter to update the value. .. function:: get_risetime(\*args) Returns the 20-80% rise time (in x-units) by calculation of the interpolated adjacent sampling points at 20% and 80% of the peak amplitude. Returns -1.0 upon failure. Call :func:`measure()` or hit enter to update the value. .. function:: get_risetime_factor(\*args) Returns the lower proportion factor used to calculate the rise time (e.g 0.2 if we calculate the 20--80% rise time). .. function:: get_slope(\*args) Returns the slope value using the cursors described in the cursors setting dialog. **Returns:** The slope value .. function:: get_peak(\*args) Returns the current peak value, measured from zero (!). Uses the currently measured values, i.e. does not update measurements if the peak or base window cursors have changed. **Returns:** The current peak value, measured from zero (again: !). .. function:: get_peak_end(is_time=False) Returns the zero-based index or the time point jof the peak end cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True, returns the time from the beginning of the trace to the cursor position. .. function:: get_peak_start(is_time=False) Returns the zero-based index or the time point of the peak start cursor. **Arguments:** *is_time* -- If False (default), returns the zero-based index. If True, returns the time from the beginning of the trace to the cursor position. .. function:: get_recording_comment(\*args) Returns a comment about the recording. .. function:: get_recording_date(\*args) Returns the date at which the recording was started as a string. .. function:: get_recording_time(\*args) Returns the time at which the recording was started as a string. .. function:: get_sampling_interval(\*args) Returns the sampling interval. .. function:: get_selected_indices(...) Returns a tuple with the indices (ZERO-BASED) of the selected traces. .. function:: get_size_channel(channel=-1) Retrieves the number of traces in a channel.Note that at present, stimfit only supports equal-sized channels, i.e. all channels within a file need to have the same number of traces. The channel argument is only for future extensions. **Arguments:** *channel* -- ZERO-BASED index of the channel. Default value of -1 will use the current channel. **Returns:** The number traces in a channel. .. function:: get_size_recording(\*args) Retrieves the number of channels in a recording. **Returns:** The number of channels in a recording. .. function:: get_size_trace(trace=-1, channel=-1) Retrieves the number of sample points of a trace. **Arguments:** *trace* -- ZERO-BASED index of the trace. Default value of -1 will use the currently displayed trace. Note that this is one less than what is displayed in the drop- down list. *channel* -- ZERO-BASED index of the channel. Default value of -1 will use the current channel. **Returns:** The number of sample points. .. function:: get_trace(trace=-1, channel=-1) Returns a trace as a 1-dimensional NumPy array. **Arguments:** *trace* -- ZERO-BASED index of the trace within the channel. Note that this is one less than what is shown in the drop-down box. The default value of -1 returns the currently displayed trace. *channel* -- ZERO-BASED index of the channel. This is independent of whether a channel is active or not. The default value of -1 returns the currently active channel. **Returns:** The trace as a 1D NumPy array. .. function:: get_trace_index(...) Returns the ZERO-BASED index of the currently displayed trace (this is one less than what is shown in the combo box). .. function:: get_trace_name(trace=-1, channel=-1) Returns the name of the trace with the specified index. **Arguments:** *trace* -- The zero-based index of the trace of interest. If < 0, the name of the active trace will be returned. *channel* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** the name of the trace with the specified index. .. function:: get_threshold_time(is_time=False) Returns the crossing value of the threshold slope. Note that this value is not update after changing the AP threshold. Call :func:`measure()` or hit enter in the main window to update the cursors. **Arguments:** *is_time* -- If false (default), returns the zero-based index at which the threshold slope is crossed. If True, returns the time at which the threshold slope is crossed (e.g. in units of the y-axis). A negative number is returned upon failure. **Returns:** False upon failure (such as out-of-range). .. function:: get_threshold_value() Returns value found at the threshold slope. Note that this value is not update after changing the AP threshold. Calle :func:`measure()` or hit enter in the main window to update the cursors. **Returns:** False upon failure (such as out-of-range). .. function:: get_xunits(trace=-1, channel=-1) Returns the x units of the specified section. X units are not allowed to change between sections at present, and they are hard-coded to "ms". This function is for future extension. **Arguments:** *trace* -- The zero-based index of the trace of interest. If < 0, the name of the active trace will be returned. *channel* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** The x units as a string. .. function:: get_yunits(trace=-1, channel=-1) Returns the y units of the specified trace. Y units are not allowed to change between traces at present. **Arguments:** *trace* -- The zero-based index of the trace of interest. If < 0, the name of the active trace will be returned. *channel* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** The x units as a string. .. function:: leastsq(fselect, refresh=True) Fits a function to the data between the current fit cursors. **Arguments:** *fselect* -- Zero-based index of the function as it appears in the fit selection dialog. *refresh* -- To avoid flicker during batch analysis, this may be set to False so that the fitted function will not immediately be drawn. **Returns:** A dictionary with the best-fit parameters and the least-squared error, or a null pointer upon failure. .. function:: leastsq_param_size(fselect) Retrieves the number of parameters for a function. **Arguments:** *fselect* -- Zero-based index of the function as it appears in the fit selection dialog. **Returns:** The number of parameters for the function with index fselect, or a negative value upon failure. .. function:: maxrise_index(active=True) Returns the zero-based index of the maximal slope of rise in the specified channel. Uses the currently measured values, i.e. does not update measurements if the peak window cursors have changed. **Arguments:** *active*-- If True, returns the current index of the maximal slope of rise within the active channel. Otherwise, returns the current index of the maximal slope of rise within the inactive channel. **Returns:** The zero-based index of the maximal slope of rise in units of sampling points interpolated between adjacent sampling points. Returns a negative value upon failure. .. function:: maxdecay_index() Returns the zero-based index of the maximal slope of decay in the current channel. Uses the currently measured values, i.e. does not update measurements if the peak window cursors have changed. Note that in contrast to :func:`maxrise_index()`, this function only works on the active channel. **Returns:** The zero-based index of the maximal slope of decay in units of sampling points interpolated between adjacent sampling points. Returns a negative value upon failure. .. function:: measure() Updates all measurements (e.g. peak, baseline, latency) according to the current cursor settings. As if you had pressed **Enter** in the main window. **Returns:** False upon failure, True otherwise. .. function:: new_window(\*args) Creates a new window showing a 1D NumPy array. **Arguments:** *arg* -- The NumPy array to be shown. .. function:: new_window_list(array_list) Creates a new window showing a sequence of 1D NumPy arrays, or a sequence of a sequence of 1D NumPy arrays. As opposed to :func:`new_window_matrix()`, this has the advantage that the arrays need not have equal sizes. **Arguments:** *array_list* -- A sequence (e.g. list or tuple) of numpy arrays, or a sequence of a sequence of numpy arrays. .. function:: new_window_matrix(\*args) Creates a new window showing a 2D NumPy array. **Arguments:** *arg* -- The NumPy array to be shown. First dimension are the traces, second dimension the sampling points within the traces. .. function:: new_window_selected_all(\*args) Creates a new window showing the selected traces of all open files. **Returns:** True if successful. .. function:: new_window_selected_this(\*args) Creates a new window showing the selected traces of the current file. **Returns:** True if successful. .. function:: peak_index(active=True) Returns the zero-based index of the current peak position in the specified channel. Uses the currently measured values, i.e. does not update measurements if the peak window cursors have changed. **Arguments:** *active* -- If True, returns the current peak index of the active channel. Otherwise, returns the current peak index of the inactive channel. **Returns:** The zero-based index in units of sampling points. May be interpolated if more than one point is used for the peak calculation. Returns a negative value upon failure. .. function:: select_all(\*args) Selects all traces in the current file. Stores the baseline along with the trace index. .. function:: select_trace(trace=-1) Selects a trace. Checks for out-of-range indices and stores the baseline along with the trace index. **Arguments:** *trace* -- ZERO-BASED index of the trace. Default value of -1 will select the currently displayed trace. Note that this is one less than what is displayed in the drop-down list. **Returns:** True if the trace could be selected, False otherwise. .. function:: set_baseline_method(method) Sets the method to compute the baseline. **Arguments:** *method* -- A string specifying the method to calculate the baseline. Can be one of "mean" or "median" **Returns:** False upon failure. .. function:: set_base_end(pos, is_time=False) Sets the base end cursor to a new position.This will NOT update the baseline calculation. You have to either call :func:`measure()` or hit enter in the main window to achieve that. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_base_start(pos, is_time=False) Sets the base start cursor to a new position.This will NOT update the baseline calculation. You have to either call :func:`measure()` or hit enter in the main window to achieve that. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_channel(channel) Sets the currently displayed channel to a new index. Subsequently updatges all measurements (e.g. peak, base, latency, i.e. you do not have to call :func:`measure()` yourself.) **Arguments:** *channel*-- The zero-based index of the new trace to be displayed. **Returns:** True upon sucess, false otherwise (such as out-of-range). .. function:: set_channel_name(name, index=-1) Sets the name of the channel with the specified index. **Arguments:** *name* -- The new name of the channel. *index* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** True upon success. .. function:: set_latency_end(pos, is_time=False) Sets the second latency cursor to a new position and the mode of the cursor to Manual. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_latency_end_mode(mode) Sets the mode of the latency end cursor **Arguments:** *mode* -- A string specifying the mode for the latency start cursor. Can be one of "manual", "peak", "rise", "foot" or "half". **Returns:** False upon failure .. function:: set_latency_start(pos, is_time=False) Sets the first latency cursor to a new position and the mode of the cursor to Manual. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_latency_start_mode(mode) Sets the mode of the latency start cursor **Arguments:** *mode* -- A string specifying the mode for the latency start cursor. Can be one of "manual", "peak", "rise" or "half". **Returns:** False upon failure .. function:: set_fit_end(pos, is_time=False) Sets the fit end cursor to a new position. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_fit_start(pos, is_time=False) Sets the fit start cursor to a new position. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_marker(x, y) Sets a marker to the specified position in the current trace. **Arguments:** *x* -- The horizontal marker position in units of sampling points. *y* -- The vertical marker position in measurement units (e.g. mV). **Returns:** False upon failure (such as out-of-range). .. function:: set_peak_direction(direction) Sets the direction of the peak detection. **Arguments:** *direction* -- A string specifying the peak direction. Can be one of: "up", "down" or "both" **Returns:** False upon failure. .. function:: set_peak_end(pos, is_time=False) Sets the peak end cursor to a new position. This will NOT update the peak calculation. You have to either call :func:`measure()` or hit enter in the main window to achieve that. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_peak_mean(pts) Sets the number of points used for the peak calculation. **Arguments:** *pts* -- A moving average (aka sliding, boxcar or running average) is used to determine the peak value. Pts specifies the number of sampling points used for the moving window.Passing a value of -1 will calculate the average of all sampling points within the peak window. **Returns:** False upon failure (such as out-of-range). .. function:: get_peak_direction() Gets the direction of the peak detection. **Returns:** A string specifying the peak direction. Can be one of: "up", "donw",or "both". .. function:: get_peak_mean() Returns the number of sampling points used for peak calculation. **Returns:** 0 upon failure (i.e no file opened). -1 means average of all sampling points. .. function:: set_peak_start(pos, is_time=False) Sets the peak start cursor to a new position. This will NOT update the peak calculation. You have to either call :func:`measure()` or hit enter in the main window to achieve that. **Arguments:** *pos* -- The new cursor position, either in units of sampling points if *is_time* == False (default) or in units of time if *is_time* == True. *is_time* -- see above. **Returns:** False upon failure (such as out-of-range). .. function:: set_recording_comment(comment) Sets a comment about the recording. **Argument:** *comment* -- A comment string. **Returns:** True upon successful completion. .. function:: set_recording_date(date) Sets a date about the recording. **Argument:** *date* -- A date string. **Returns:** True upon successful completion. .. function:: set_recording_time(time) Sets a time about the recording. **Argument:** *time* -- A time string. **Returns:** True upon successful completion. .. function:: set_risetime_factor(factor) Sets the lower proportion factor to calculate the rise time (e.g 0.2 if we want to calculate the 20--80% rise time). It will update the risetime measurement. **Arguments:** *factor* -- the low proportion factor to calculate the rise time **Returns:** False upon failure (such a factor lower than 0.05 or larger than 0.45). .. function:: set_sampling_interval(si) Sets a new sampling interval. **Argument:** *si* -- The new sampling interval. **Returns:** False upon failure. .. function:: set_slope(slope) Sets the AP threshold to the value given by the slope and takes it as reference for AP kinetic measurements. Note that you have to either call :func:`measure()` or hit enter to update calculations. **Argument:** *slope* -- Slope value in mV/ms **Returns:** False upon failure (such as out-of-range) .. function:: set_trace(trace) Sets the currently displayed trace to a new index. Subsequently updates all measurements (e.g. peak, base, latency, i.e. you don't need to call :func:`measure()` yourself.) **Arguments:** *trace* -- The zero-based index of the new trace to be displayed. **Returns:** True upon success, false otherwise (such as out-of-range). .. function:: set_xunits(units, trace=-1, channel=-1) Sets the x unit string of the specified section. X units are not allowed to change between sections at present, and they are hard-coded to "ms". This function is for future extension. **Arguments:** *units* -- The new x unit string. *trace* -- The zero-based index of the trace of interest. If < 0, the name of the active trace will be returned. *channel* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** True if successful. .. function:: set_yunits(units, trace=-1, channel=-1) Sets the y unit string of the specified trace. Y units are not allowed to change between traces at present. **Arguments:** *units* -- The new y unit string. *trace* -- The zero-based index of the trace of interest. If < 0, the name of the active trace will be returned. *channel* -- The zero-based index of the channel of interest. If < 0, the active channel will be used. **Returns:** True if successful. .. function:: show_table(dict, caption="Python table") Shows a python dictionary in a results table. The dictionary has to have the form "string". **Arguments:** *dict* -- A dictionary with strings as key values and floating point numbers as values. *caption* -- An optional caption for the table. **Returns:** True if successful. .. function:: show_table_dictlist(dict, caption="Python table", reverse=True) Shows a python dictionary in a results table. The dictionary has to have the form "string" : list. **Arguments:** *dict* -- A dictionary with strings as key values and lists of floating point numbers as values. *caption* -- An optional caption for the table. *reverse* -- If True, The table will be filled in column-major order, i.e. dictionary keys will become column titles. Setting it to False has not been implemented yet. **Returns:** True if successful. .. function:: subtract_base(\*args) Subtracts the baseline from the selected traces of the current file, then displays the subtracted traces in a new window. **Returns:** True if the subtraction was successful, False otherwise. .. function:: t50left_index(active=True) Returns the zero-based index of the left half-maximal amplitude of an event in the specified channel. Uses the currently measured values, i.e. does not update measurements if the peak or base window cursors have changed. **Arguments:** *active* -- If True, returns the current index of the left half-maximal amplitude within the active channel. If False,returns the current index of the left half-maximal amplitude within the inactive channel. **Returns:** The zero-based index of the left half-maximal amplitude in units of sampling points. Interpolates between sampling points. Returns a negative value upon failure. .. function:: t50right_index(active=True) Returns the zero-based index of the right half-maximal amplitude of an event in the active channel. Uses the currently measured values, i.e. does not update measurements if the peak or base window cursors have changed. **Arguments:** *active*-- If True, returns the current index of the right half maximal amplitude within the active channel. Only implemented for the active channel at this time. Will return a negative value and show an error message if *active* == False. **Returns:** The zero-based index of the right half-maximal amplitude in units of sampling points. Interpolates between sampling points. Returns a negative value upon failure. .. function:: unselect_all(\*args) Unselects all previously selected traces in the current file. stimfit-0.17.1/doc/sphinx/stfio/000077500000000000000000000000001517235503400164665ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/stfio/index.rst000066400000000000000000000076701517235503400203410ustar00rootroot00000000000000**************** The stfio module **************** :Author: Christoph Schmidt-Hieber :Date: |today| The stfio Python module allows to read and write data in common electrophysiology formats without running Stimfit. Build instructions for GNU/Linux can be found in :doc:`/linux_install_guide/moduleonly`. The central object in the stfio module is called a *Recording*. There are two ways to construct a *Recording*: You can either read it in from a file, or you can build it up from scratch using NumPy arrays. ============= Reading files ============= Files can be opened using the *read* function that returns a *Recording* object: :: >>> import stfio >>> rec = stfio.read("/home/cs/data/test.abf") *read* takes a filename and optionally a file type (as a string) as an argument. At present, the following types are supported: +--------+------------------------+ | ftype | Description | +========+========================+ | "cfs" | CED filing system | +--------+------------------------+ | "hdf5" | HDF5 | +--------+------------------------+ | "abf" | Axon binary file | +--------+------------------------+ | "atf" | Axon text file | +--------+------------------------+ | "axg" | Axograph X binary file | +--------+------------------------+ | "heka" | HEKA binary file | +--------+------------------------+ If the file type is *None* (default), it will be guessed from the file name extension. A *Recording* has a number of attributes that describe the recording: :: >>> print(rec.comment) Created with Clampex >>> print(rec.date) 2008/1/18 >>> print(rec.dt) # sampling interval 0.1 >>> print(rec.file_description) # no file description in this case >>> print(rec.time) 15:08:20 >>> print(rec.xunits) ms A *Recording* consists of one or more *Channel*\s, which in turn are composed of one or more *Section*\s. They can be accessed using indexing operators ([]). :: >>> len(rec) # Recording consists of 2 Channels 2 >>> len(rec[0]) # First Channel consists of 13 Sections 13 >>> len(rec[0][0]) # First Section in first channel contains 146450 data points 146450 >>> print(rec[0].name) # channel name Current >>> print(rec[1].name) IN 3 >>> print(rec[0].yunits) # channel units pA >>> print(rec[1].yunits) C The time series in a *Section* can be accessed as a NumPy array: :: >>> arr = rec[0][0].asarray() >>> type(arr) >>> arr.shape (146450,) Note that the *Section* itself is *not* a NumPy array and therefore needs to be converted as described above before you can do fancy arithmetics: :: >>> type(rec[0][0]) >>> res = rec[0][0] + 2.0 Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'Section' and 'float' >>> res = rec[0][0].asarray() + 2.0 ==================================== Constructing Recordings from scratch ==================================== *Recording*\s can be assembled from NumPy arrays. Here's a particularly stupid example: :: import stfio import numpy as np arr = np.arange(0,500,0.1) # construct Sections from arrays: seclist = [stfio.Section(arr), stfio.Section(arr)] # construct Channels from lists of Sections chlist = [stfio.Channel(seclist), stfio.Channel(seclist)] # Set channel units chlist[0].yunits = "pA" chlist[1].yunits = "mV" # construct a Recording from a list of channels rec = stfio.Recording(chlist) rec.dt = 0.05 # set sampling interval rec.xunits = "ms" # set time units ============= Writing files ============= *Recording*\s can be stored to files using the *write* method: :: >>> import stfio >>> rec = stfio.read("/home/cs/data/test.abf") >>> rec.write("/home/cs/data/out.h5") At present, *write* only supports hdf5 files. stimfit-0.17.1/doc/sphinx/win_install_guide/000077500000000000000000000000001517235503400210425ustar00rootroot00000000000000stimfit-0.17.1/doc/sphinx/win_install_guide/VCExpress64bitsetup.rst000066400000000000000000000152511517235503400254140ustar00rootroot00000000000000***************************************************************************** Instructions for setting up Visual C++ Express 2008 to compile 64-bit targets ***************************************************************************** .. important:: This page is retained only as historical reference material for the legacy Visual C++ Express 2008 workflow. It is not part of the supported build path for current [`master`](README.md:1). For current Windows development and release packaging, use [`build_windows_msvc.ps1`](build_windows_msvc.ps1) together with the CMake presets, `vcpkg`, and CPack flow documented in [`BUILDING.md`](BUILDING.md) and [`doc/sphinx/win_install_guide/building.rst`](doc/sphinx/win_install_guide/building.rst). Visual C++ Express 2008 will not build 64-bit targets out of the box. However, this capability can be added by installing the Windows SDK and making some registry edits. Follow the instructions below to do this. Note that if you have the full rather than express version of Visual C++, this should not be necessary. These instructions have been adapted from the following sources: http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/ http://www.cppblog.com/xcpp/archive/2009/09/09/vc2008express_64bit_win7sdk.html https://github.com/enGits/engrid/wiki/Configure-Microsoft-Visual-Studio-2008-Express-to-also-build-for-Windows-x64 http://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Windows/Visual_C%2B%2B_2008_Express =============================== Get and install the Windows SDK =============================== Download the appropriate SDK for your version of Windows. You need version 3.5, later versions will not work with VS2008. The current Windows 7 release can be found here: `Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 `_. When installing the SDK, you need to select "Windows Headers and Libraries", "Visual C++ Compilers" and "Windows Development Tools". The other items are optional, you may not want to install the documentation as it will take up a lot of space and might take a long time to download due to its large size. It `appears `_ that on 32-bit Windows, the SDK installer may not install the 64-bit tools the first time around. If so, go to the Control Panel -> Programs -> Programs and Features, choose to "Change" the "Microsoft Windows SDK for Windows 7 (7.0)" and then click the "Change" option when the installer starts up. Reselect the above options, making sure x64 and IA64 are selected in the sub-categories. ================================== Edit the registry and rename files ================================== The Windows SDK installer creates registry keys in ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\...`` to point Visual Studio to the components it installed. This is the correct registry location for the full version of Visual Studio, but the express edition uses ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\...`` instead. Similarly, the SDK installer creates ``*.VCPlatform.config`` files for Visual Studio, but the Express edition expects these to be named ``*.VCPlatform.Express.Config``. The steps below have been automated by Xia Wei. Get the zip file `here `_, unzip, then open an Administrator command prompt and run ``setup_x86.bat`` or ``setup_x64.bat`` in the unzipped directory. Note that this requires VC++ 2008 to be installed into the default location on the C drive. If you're running on 32-bit Windows or you have another version of the Windows SDK also installed, you may need to use the workarounds `here `_. *You may wish to inspect the contents of these bat files before running code from an unknown source.* To accomplish the above manually, proceed as follows: 32-bit OS --------- #. Open the Registry editor (``regedit.exe``). #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Studio\9.0\CLSID`` and export it to a file, e.g. ``sdk_data_clsid.reg``. #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Studio\9.0\VC`` and export it to a file, e.g. ``sdk_data_vc.reg``. #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress`` and export it to a file as a backup, since the following steps will make changes here. #. Edit the files ``sdk_data_clsid.reg`` and ``sdk_data_vc.reg``, to replace all occurrences of ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Studio`` to ``HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress``. Save the files. #. Import the files ``sdk_data_clsid.reg`` and ``sdk_data_vc.reg``, either from Regedit or by double-clicking on the modified files. #. Go to the folder ``C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages`` and rename the file ``AMD64.VCPlatform.config`` to ``AMD64.VCPlatform.Express.config``. Note: if you have installed VC++ 2008 in a different location, you will need to go to that location instead. 64-bit OS --------- #. Open the Registry editor (``regedit.exe``). #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Visual Studio\9.0\CLSID`` and export it to a file, e.g. ``sdk_data_clsid.reg``. #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Visual Studio\9.0\VC`` and export it to a file, e.g. ``sdk_data_vc.reg``. #. Visit the key ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress`` and export it to a file as a backup, since the following steps will make changes here. #. Edit the files ``sdk_data_clsid.reg`` and ``sdk_data_vc.reg``, to replace all occurrences of ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Visual Studio`` to ``HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress``. Save the files. #. Import the files ``sdk_data_clsid.reg`` and ``sdk_data_vc.reg``, either from Regedit or by double-clicking on the modified files. #. Go to the folder ``C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages`` and rename the file ``AMD64.VCPlatform.config`` to ``AMD64.VCPlatform.Express.config``. Note: if you have installed VC++ 2008 in a different location, you will need to go to that location instead. ========================================= Make the installed SDK the system default ========================================= Open the Windows 7 SDK CMD shell located in "Start -> Programs -> Microsoft Windows SDK v7.0 -> CMD Shell" and at the CMD prompt type the following:: Setup\WindowsSdkVer.exe -version:v7.0 You may not need this step if you do not have a previous version of the SDK installed. stimfit-0.17.1/doc/sphinx/win_install_guide/building.rst000066400000000000000000000023551517235503400233760ustar00rootroot00000000000000**************** Building Stimfit **************** :Author: Christoph Schmidt-Hieber :Date: |today| Current Windows source builds use the CMake-based MSVC workflow rather than the historical Visual Studio 2008 solution files. =================== Get the source code =================== Clone the repository into a local working directory: :: PS C:\> git clone https://github.com/neurodroid/stimfit.git PS C:\> cd stimfit ============= Build Stimfit ============= Run the supported helper script from PowerShell: :: PS C:\stimfit> .\build_windows_msvc.ps1 For a Python-enabled build: :: PS C:\stimfit> .\build_windows_msvc.ps1 -WithPython The script prepares the current `vcpkg` dependency layout, selects the matching CMake preset, and runs configure, build, and install steps. ================== Create an installer ================== The CMake build can also generate distributable packages with CPack. Use one of the packaging modes below after installing Inno Setup 6 when you want a native installer: :: PS C:\stimfit> .\build_windows_msvc.ps1 -PackageGenerator INNOSETUP PS C:\stimfit> .\build_windows_msvc.ps1 -PackageGenerator ZIP This replaces the old NSIS-based packaging instructions for current releases. stimfit-0.17.1/doc/sphinx/win_install_guide/index.rst000066400000000000000000000006301517235503400227020ustar00rootroot00000000000000Windows Build Guide =================== :Author: Christoph Schmidt-Hieber :Release: |version| :Date: |today| Current Windows builds use Visual Studio, CMake presets, `vcpkg`, and CPack. The supported path is the modern CMake workflow; the historical Visual C++ Express material is no longer part of the primary build guide. Contents -------- .. toctree:: :maxdepth: 2 prerequisites building stimfit-0.17.1/doc/sphinx/win_install_guide/prerequisites.rst000066400000000000000000000046001517235503400245000ustar00rootroot00000000000000************* Prerequisites ************* :Author: Christoph Schmidt-Hieber :Date: |today| This document describes the prerequisites for current 64-bit Windows builds of `Stimfit `_ using Visual Studio, CMake presets, `vcpkg`, and optional CPack packaging. .. important:: The Visual C++ Express 2008 and Python 2.7 workflow described in older Stimfit documentation is legacy material. Current Windows builds on [`master`](README.md:13) use Visual Studio 2022, CMake presets, `vcpkg`, and CPack as described in [`README.md`](README.md:105). For current work, prefer this modern toolchain: * Visual Studio 2022 build tools * PowerShell * `vcpkg` * optional Inno Setup 6 for installer generation The repository helper script [`build_windows_msvc.ps1`](build_windows_msvc.ps1) drives the supported Windows flow and mirrors the active CI setup in [`ci.yml`](.github/workflows/ci.yml). Getting all the prerequisites takes some time, but only needs to be completed once per machine. ================================= Visual Studio and packaging tools ================================= Install Visual Studio 2022 build tools or a full Visual Studio 2022 release with C++ support. If you want to generate installer packages, also install Inno Setup 6 for the `INNOSETUP` CPack generator used by the current workflow. ========= Libraries ========= Current third-party C and C++ dependencies are resolved through `vcpkg` by [`build_windows_msvc.ps1`](build_windows_msvc.ps1) and the repository's CMake presets. You do not need to download the old hand-curated dependency ZIP files used by the Visual Studio 2008 workflow. If you are building with embedded Python enabled, install a matching Python 3 interpreter and ensure it is discoverable when running [`build_windows_msvc.ps1`](build_windows_msvc.ps1). =========== Build Tools =========== SWIG ---- If you are building outside the helper script, install a current SWIG binary for Windows and make sure it is available on `PATH`. The repository helper script and CI workflow assume a standard command-line installation rather than the old Cygwin-specific layout. git --- Install a current Git for Windows release from `git-scm.com `_. nsis ---- The legacy NSIS packaging path is no longer the supported release route. Prefer Inno Setup 6 with the `INNOSETUP` CPack generator used by the current Windows workflow. stimfit-0.17.1/doc/wiki/000077500000000000000000000000001517235503400147745ustar00rootroot00000000000000stimfit-0.17.1/doc/wiki/Stimfit.md000066400000000000000000000063501517235503400167410ustar00rootroot00000000000000![Stimfit logo](https://neurodroid.github.io/stimfit/_static/stimfit_128.png) Stimfit is a free, fast and simple program for viewing and analyzing electrophysiological data. It's currently available for GNU/Linux, macOS and Windows. It features an embedded Python shell that allows you to extend the program functionality by using numerical libraries such as [NumPy](https://numpy.org/) and [SciPy](https://scipy.org/). A standalone Python module for file I/O that doesn't depend on the graphical user interface is also available. > This wiki page is maintained from the main documentation workflow. The canonical documentation lives at [neurodroid.github.io/stimfit](https://neurodroid.github.io/stimfit/). We'd appreciate if you could cite the following publication when you use Stimfit for your research: Guzman SJ, Schlögl A, Schmidt-Hieber C (2014) Stimfit: quantifying electrophysiological data with Python. *Front Neuroinform* [doi:10.3389/fninf.2014.00016](https://doi.org/10.3389/fninf.2014.00016) ## Supported file types - Read/write: CFS binary data, HDF5 files, Axon text files, ASCII files - Read-only: Axon binary files versions 1 and 2 (`*.abf`), Axograph files (`*.axgd`, `*.axgx`), HEKA files (`*.dat`) - Write-only: Igor binary waves (`*.ibw`) Support for other file types may be implemented upon request. ## Installing and building ### Windows Windows builds and packaging are based on Visual Studio 2022, CMake presets, `vcpkg`, and CPack. Current source-build instructions are documented here: - [Windows build guide](https://neurodroid.github.io/stimfit/win_install_guide/index.html) - [Repository build overview](https://github.com/neurodroid/stimfit/blob/master/BUILDING.md) Release artifacts are published on the GitHub releases page: - [Stimfit releases](https://github.com/neurodroid/stimfit/releases) ### macOS Stimfit on macOS is currently built from source with the CMake toolchain and MacPorts-oriented dependencies. Current instructions are documented here: - [macOS build guide](https://neurodroid.github.io/stimfit/osx_install_guide/index.html) - [Repository build overview](https://github.com/neurodroid/stimfit/blob/master/BUILDING.md) ### Debian and Ubuntu systems You can get Stimfit and the `stfio` module from standard repositories on Debian-based systems: ```bash sudo apt-get install stimfit python-stfio ``` For current source builds and dependency guidance, see: - [GNU/Linux build guide](https://neurodroid.github.io/stimfit/linux_install_guide/index.html) - [Repository build overview](https://github.com/neurodroid/stimfit/blob/master/BUILDING.md) ## Build from source The source code lives in the main repository: - [neurodroid/stimfit](https://github.com/neurodroid/stimfit) Current build instructions are maintained in: - [Published documentation site](https://neurodroid.github.io/stimfit/) - [BUILDING.md](https://github.com/neurodroid/stimfit/blob/master/BUILDING.md) ## Community and links - [Online documentation](https://neurodroid.github.io/stimfit/) - [Downloads and releases](https://github.com/neurodroid/stimfit/releases) - [Issues](https://github.com/neurodroid/stimfit/issues) - [Source repository](https://github.com/neurodroid/stimfit) - [User mailing list / Google group](https://groups.google.com/g/stimfit) stimfit-0.17.1/gpl-2.0.txt000066400000000000000000000431031517235503400151050ustar00rootroot00000000000000 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. stimfit-0.17.1/manuscript/000077500000000000000000000000001517235503400154515ustar00rootroot00000000000000stimfit-0.17.1/manuscript/events.py000066400000000000000000000567111517235503400173410ustar00rootroot00000000000000from __future__ import print_function import sys import os import numpy as np np.random.seed(42) import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from matplotlib.patches import ConnectionPatch from scipy.optimize import leastsq import stfio import stfio_plot try: import spectral except ImportError: pass class Bardata(object): def __init__(self, mean, err=None, data=None, title="", color='k'): self.mean = mean self.err = err self.data = data self.title = title self.color = color def bargraph(datasets, ax, ylabel=None, labelpos=0, ylim=None, paired=False): if paired: assert(len(datasets)==2) assert(datasets[0].data is not None and datasets[1].data is not None) assert(len(datasets[0].data)==len(datasets[0].data)) ax.axis["right"].set_visible(False) ax.axis["top"].set_visible(False) ax.axis["bottom"].set_visible(False) bar_width = 0.6 gap2 = 0.15 # gap between series pos = 0 xys = [] for data in datasets: pos += gap2 ax.bar(pos, data.mean, width=bar_width, color=data.color, edgecolor='k') if data.data is not None: ax.plot([pos+bar_width/2.0 for dat in data.data], data.data, 'o', ms=15, mew=0, lw=1.0, alpha=0.5, mfc='grey', color='grey')#grey') if paired: xys.append([[pos+bar_width/2.0, dat] for dat in data.data]) if data.err is not None: yerr_offset = data.err/2.0 if data.mean < 0: sign=-1 else: sign=1 erb = ax.errorbar(pos+bar_width/2.0, data.mean+sign*yerr_offset, yerr=sign*data.err/2.0, fmt=None, ecolor='k', capsize=6) if data.err==0: for erbs in erb[1]: erbs.set_visible(False) erb[1][0].set_visible(False) # make lower error cap invisible ax.text(pos+bar_width, labelpos, data.title, ha='right', va='top', rotation=20) pos += bar_width+gap2 if paired: for nxy in range(len(datasets[0].data)): ax.plot([xys[0][nxy][0],xys[1][nxy][0]], [xys[0][nxy][1],xys[1][nxy][1]], '-k')#grey') if ylabel is not None: ax.set_ylabel(ylabel) if ylim is not None: ax.set_ylim(ylim) def leastsq_helper(p,y,lsfunc,x): return y - lsfunc(p,x) def fexpbde(p, x): offset, delay, tau1, amp, tau2 = p if delay < 0: return np.ones(x.shape) * 1e9 e1 = np.exp((delay-x)/tau1); e2 = np.exp((delay-x)/tau2); y = amp*e1 - amp*e2 + offset; y[x threshold)*1.0)==1)[0] peak_end_i = np.where(np.diff( (data[peak_start_i[0]:] > threshold)*1.0)==-1)[0] + peak_start_i[0] peak_i = np.array([ np.argmax(data[peak_start_i[ni]:peak_end_i[ni]])+peak_start_i[ni] for ni, psi in enumerate(peak_start_i[:len(peak_end_i)])]) if min_interval is not None: while np.any(np.diff(peak_i)*dt <= min_interval): peak_i = peak_i[np.diff(peak_i)*dt > min_interval] return peak_i def correct_peaks(data, peak_i, i_before, i_after): """ Finds and corrects misplaced peak indices. Arguments: data -- 1D NumPy array peak_i -- Peak indices i_before -- Sampling points to be considered before the peak i_before -- Sampling points to be considered after the peak Returns: Corrected peak indices within data. """ new_peak_i = [] for pi in peak_i: old_pi = pi real_pi = np.argmax(data[pi-i_before: pi+i_after])+pi-i_before while real_pi != old_pi: old_pi = real_pi real_pi = np.argmax(data[real_pi-i_before: real_pi+i_after])+real_pi-i_before new_peak_i.append(real_pi) # Remove duplicates new_peak_i = np.array(list(set(new_peak_i))) return new_peak_i def generate_events(t, mean_f): dt = t[1]-t[0] assert(np.sum(np.diff(t)-dt) < 1e-15) prob_per_dt = mean_f * dt event_prob = np.random.uniform(0, 1, (len(t))) event_times_i = np.where(event_prob < prob_per_dt)[0] assert(np.all(np.diff(event_times_i))) return event_times_i * dt def ball_and_stick(h): soma = h.Section() soma.L = 20.0 soma.diam = 20.0 soma.nseg = 5 dend = h.Section() dend.L = 500.0 dend.diam = 5.0 dend.nseg = 31 dend.connect(soma) for sec in [soma, dend]: sec.insert('pas') sec.Ra = 150.0 for seg in sec: seg.pas.e = -80.0 seg.pas.g = 1.0/25000.0 soma.push() return soma, dend def add_noise(data, dt, mean_amp, snr=5.0): sigma = mean_amp/snr noise = np.random.normal(0, sigma, data.shape[0]) std_orig = noise.std() noise = spectral.lowpass(spectral.Timeseries(noise, dt), 1.0) std_new = noise.data.std() noise.data *= std_orig/std_new return data+noise.data def run(dt_nrn, tstop, mean_f): module_dir = os.path.dirname(__file__) if os.path.exists("%s/dat/events.h5" % module_dir): rec = stfio.read("%s/dat/events.h5" % module_dir) spiketimes = np.load("%s/dat/spiketimes.npy" % module_dir) return rec, spiketimes if os.path.exists("%s/dat/events_nonoise.npy" % module_dir): mrec = np.load("%s/dat/events_nonoise.npy" % module_dir) spiketimes = np.load("%s/dat/spiketimes.npy" % module_dir) else: from neuron import h h.load_file('stdrun.hoc') soma, dend = ball_and_stick(h) h.tstop = tstop trange = np.arange(0, tstop+dt_nrn, dt_nrn) spiketimes = generate_events(trange, mean_f) np.save("%s/dat/spiketimes.npy" % module_dir, spiketimes) syn_AMPA, spiketimes_nrn, vecstim, netcon = [], [], [], [] for spike in spiketimes: loc = 0.8 * np.random.normal(1.0, 0.03) if loc < 0: loc = 0 if loc > 1: loc = 1 syn_AMPA.append(h.Exp2Syn(dend(loc), sec=dend)) spiketimes_nrn.append(h.Vector([spike])) vecstim.append(h.VecStim()) netcon.append(h.NetCon(vecstim[-1], syn_AMPA[-1])) syn_AMPA[-1].tau1 = 0.2 * np.random.normal(1.0, 0.3) if syn_AMPA[-1].tau1 < 0.05: syn_AMPA[-1].tau1 = 0.05 syn_AMPA[-1].tau2 = 2.5 * np.random.normal(1.0, 0.3) if syn_AMPA[-1].tau2 < syn_AMPA[-1].tau1*1.5: syn_AMPA[-1].tau2 = syn_AMPA[-1].tau1 * 1.5 syn_AMPA[-1].e = 0 vecstim[-1].play(spiketimes_nrn[-1]) netcon[-1].weight[0] = np.random.normal(1.0e-3, 1.0e-4) if netcon[-1].weight[0] < 0: netcon[-1].weight[0] = 0 netcon[-1].threshold = 0.0 vclamp = h.SEClamp(soma(0.5), sec=soma) vclamp.dur1 = tstop vclamp.amp1 = -80.0 vclamp.rs = 5.0 mrec = h.Vector() mrec.record(vclamp._ref_i) h.dt = dt_nrn # ms h.steps_per_ms = 1.0/h.dt h.v_init = -80.0 h.run() mrec = np.array(mrec) np.save("%s/dat/events_nonoise.npy" % module_dir, mrec) plt.plot(np.arange(len(mrec), dtype=np.float) * dt_nrn, mrec) peak_window_i = 20.0 / dt_nrn amps_i = np.array([int(np.argmin(mrec[onset_i:onset_i+peak_window_i])+onset_i) for onset_i in spiketimes/dt_nrn], dtype=np.int) plt.plot(amps_i * dt_nrn, mrec[amps_i], 'o') mean_amp = np.abs(mrec[amps_i].mean()) print(mean_amp) mrec = add_noise(mrec, dt_nrn, mean_amp) plt.plot(np.arange(len(mrec), dtype=np.float) * dt_nrn, mrec) seclist = [stfio.Section(mrec),] chlist = [stfio.Channel(seclist),] chlist[0].yunits = "pA" rec = stfio.Recording(chlist) rec.dt = dt_nrn rec.xunits = "ms" rec.write("%s/dat/events.h5" % module_dir) return rec, spiketimes def template(pre_event=5.0, post_event=15.0, sd_factor=4.0, min_interval=5.0, tau1_guess=0.5, tau2_guess=3.0): module_dir = os.path.dirname(__file__) if os.path.exists("%s/dat/template.npy" % module_dir): return np.load("%s/dat/template.npy" % module_dir), \ np.load("%s/dat/template_epscs.npy" % module_dir), \ np.load("%s/dat/spiketimes.npy" % module_dir) rec, spiketimes = run(0.01, 60000.0, 0.005) i_before = int(pre_event/rec.dt) i_after = int(post_event/rec.dt) # Find large peaks: trace = -np.array(rec[0][0]) print(trace.mean(), trace.min(), trace.max()) rec_threshold = trace.mean() + trace.std()*sd_factor peak_i = find_peaks(trace, rec.dt, rec_threshold, min_interval) # Correct for wrongly placed peaks after min_interval check: peak_i = correct_peaks(trace, peak_i, i_before, i_after) print(" Aligning events... ", end="") sys.stdout.flush() # offset, delay, tau1, amp, tau2 = p epscs = [] for pi in peak_i: # Fit a function to each event to estimate its timing epsc = trace[pi-i_before:pi+i_after] t_epsc = np.arange(len(epsc)) * rec.dt p0 = [0, pre_event, tau1_guess, np.max(epsc)*4.0, tau2_guess] try: plsq = leastsq(leastsq_helper, p0, args = (epsc, fexpbde, t_epsc)) except RuntimeWarning: pass delay_i = int(plsq[0][1]/rec.dt+pi-i_before) new_epsc = trace[delay_i-i_before:delay_i+i_after] # Reject badly fitted events: if np.argmax(new_epsc)*rec.dt > 0.8*pre_event: epscs.append(new_epsc) epscs = np.array(epscs) print("done") print(" Computing mean epsc ... ", end="") sys.stdout.flush() mean_epsc = np.mean(epscs, axis=0) p0 = [0, pre_event, tau1_guess, np.max(mean_epsc)*4.0, tau2_guess] plsq = leastsq(leastsq_helper, p0, args = (mean_epsc, fexpbde, t_epsc)) sys.stdout.write(" done\n") templ = fexpbde(plsq[0], t_epsc)[plsq[0][1]/rec.dt:] np.save("%s/dat/template.npy" % module_dir, templ) np.save("%s/dat/template_epscs.npy" % module_dir, epscs) print("done") return templ, epscs, spiketimes def figure(): sd_factor=5.0 # to yield a low total number of false positive and negative events: deconv_th=4.0 matching_th=2.5 deconv_min_int=5.0 matching_min_int=5.0 module_dir = os.path.dirname(__file__) import stf if not stf.file_open("%s/dat/events.h5" % module_dir): sys.stderr.write("Couldn't open %s/dat/events.h5; aborting now.\n" % module_dir) return dt = stf.get_sampling_interval() trace = stf.get_trace() * 1e3 plot_start_t = 55310.0 plot_end_t = 55640.0 plot_hi_start_t = 55489.0 plot_hi_end_t = 55511.0 plot_start_i = int(plot_start_t/dt) plot_end_i = int(plot_end_t/dt) plot_hi_start_i = int(plot_hi_start_t/dt) plot_hi_end_i = int(plot_hi_end_t/dt) plot_trace = trace[plot_start_i:plot_end_i] plot_hi_trace = trace[plot_hi_start_i:plot_hi_end_i] trange = np.arange(len(plot_trace)) * dt trange_hi = np.arange(len(plot_hi_trace)) * dt templ, templ_epscs, spiketimes = template(sd_factor=sd_factor) plot_templ = templ * 1e3 templ_epscs *= 1e3 rec_threshold = trace.mean() - trace.std()*sd_factor t_templ = np.arange(templ_epscs.shape[1]) * dt # subtract baseline and normalize template: templ -= templ[0] if np.abs(templ.min()) > np.abs(templ.max()): templ /= np.abs(templ.min()) else: templ /= templ.max() deconv_amps, deconv_onsets, deconv_crit, \ matching_amps, matching_onsets, matching_crit = \ events(-templ, deconv_th=deconv_th, matching_th=matching_th, deconv_min_int=deconv_min_int, matching_min_int=matching_min_int) theoretical_ieis = np.diff(spiketimes) theoretical_peaks_t = spiketimes # + np.argmax(templ)*dt theoretical_peaks_t_plot = theoretical_peaks_t[ (theoretical_peaks_t > plot_start_i*dt) & (theoretical_peaks_t < plot_end_i*dt)] - plot_start_i*dt + 1.0 theoretical_peaks_t_plot_hi = theoretical_peaks_t[ (theoretical_peaks_t > plot_hi_start_i*dt) & (theoretical_peaks_t < plot_hi_end_i*dt)] - plot_hi_start_i*dt + 1.0 deconv_peaks_t = deconv_onsets# + np.argmax(templ)*dt deconv_peaks_t_plot = deconv_peaks_t[ (deconv_peaks_t > plot_start_i*dt) & (deconv_peaks_t < plot_end_i*dt)] - plot_start_i*dt deconv_peaks_t_plot_hi = deconv_peaks_t[ (deconv_peaks_t > plot_hi_start_i*dt) & (deconv_peaks_t < plot_hi_end_i*dt)] - plot_hi_start_i*dt matching_peaks_t = matching_onsets# + np.argmax(templ)*dt matching_peaks_t_plot = matching_peaks_t[ (matching_peaks_t > plot_start_i*dt) & (matching_peaks_t < plot_end_i*dt)] - plot_start_i*dt matching_peaks_t_plot_hi = matching_peaks_t[ (matching_peaks_t > plot_hi_start_i*dt) & (matching_peaks_t < plot_hi_end_i*dt)] - plot_hi_start_i*dt deconv_correct = np.zeros((deconv_peaks_t.shape[0])) matching_correct = np.zeros((matching_peaks_t.shape[0])) for theor in theoretical_peaks_t: if (np.abs(deconv_peaks_t-theor)).min() < deconv_min_int: deconv_correct[(np.abs(deconv_peaks_t-theor)).argmin()] = True if (np.abs(matching_peaks_t-theor)).min() < matching_min_int: matching_correct[(np.abs(matching_peaks_t-theor)).argmin()] = True total_events = spiketimes.shape[0] deconv_TP = deconv_correct.sum()/deconv_correct.shape[0] deconv_FP = (deconv_correct.shape[0]-deconv_correct.sum())/deconv_correct.shape[0] deconv_FN = (total_events - deconv_correct.sum())/total_events sys.stdout.write("True positives deconv: %.2f\n" % (deconv_TP*100.0)) sys.stdout.write("False positives deconv: %.2f\n" % (deconv_FP*100.0)) sys.stdout.write("False negatives deconv: %.2f\n" % (deconv_FN*100.0)) matching_TP = matching_correct.sum()/matching_correct.shape[0] matching_FP = (matching_correct.shape[0]-matching_correct.sum())/matching_correct.shape[0] matching_FN = (total_events - matching_correct.sum())/total_events sys.stdout.write("True positives matching: %.2f\n" % (matching_TP*100.0)) sys.stdout.write("False positives matching: %.2f\n" % (matching_FP*100.0)) sys.stdout.write("False negatives matching: %.2f\n" % (matching_FN*100.0)) gs = gridspec.GridSpec(11, 13) fig = plt.figure(figsize=(16,12)) ax = stfio_plot.StandardAxis(fig, gs[:5,:6], hasx=False, hasy=False) ax.plot(trange, plot_trace, '-k', lw=2) ax.plot(theoretical_peaks_t_plot, theoretical_peaks_t_plot**0*np.max(plot_trace), 'v', ms=12, mew=2.0, mec='k', mfc='None') ax.axhline(rec_threshold, ls='--', color='r', lw=2.0) stfio_plot.plot_scalebars(ax, xunits="ms", yunits="pA") ax_templ = stfio_plot.StandardAxis(fig, gs[:5,7:], hasx=False, hasy=False, sharey=ax) for epsc in templ_epscs: ax_templ.plot(t_templ, -epsc, '-', color='0.5', alpha=0.5) ax_templ.plot(t_templ, -templ_epscs.mean(axis=0), '-k', lw=2) ax_templ.plot(t_templ[-plot_templ.shape[0]:], -plot_templ, '-r', lw=4, alpha=0.5) stfio_plot.plot_scalebars(ax_templ, xunits="ms", yunits="pA", sb_yoff=0.1) ax_matching = stfio_plot.StandardAxis(fig, gs[5:7,:6], hasx=False, hasy=False, sharex=ax) ax_matching.plot(trange, matching_crit[plot_start_i:plot_end_i], '-g') stfio_plot.plot_scalebars(ax_matching, xunits="ms", yunits="SD", nox=True) ax_matching.axhline(matching_th, ls='--', color='r', lw=2.0) ax_matching.plot(theoretical_peaks_t_plot, theoretical_peaks_t_plot**0*1.25*np.max( matching_crit[plot_start_i:plot_end_i]), 'v', ms=12, mew=2.0, mec='k', mfc='None') ax_matching.plot(matching_peaks_t_plot, matching_peaks_t_plot**0*np.max( matching_crit[plot_start_i:plot_end_i]), 'v', ms=12, mew=2.0, mec='g', mfc='None') ax_matching.set_ylim(None, 1.37*np.max( matching_crit[plot_start_i:plot_end_i])) ax_matching.set_title(r"Template matching") ax_deconv = stfio_plot.StandardAxis(fig, gs[7:9,:6], hasx=False, hasy=False, sharex=ax) ax_deconv.plot(trange, deconv_crit[plot_start_i:plot_end_i], '-b') stfio_plot.plot_scalebars(ax_deconv, xunits="ms", yunits="SD") ax_deconv.axhline(deconv_th, ls='--', color='r', lw=2.0) ax_deconv.plot(theoretical_peaks_t_plot, theoretical_peaks_t_plot**0*1.2*np.max( deconv_crit[plot_start_i:plot_end_i]), 'v', ms=12, mew=2.0, mec='k', mfc='None') ax_deconv.plot(deconv_peaks_t_plot, deconv_peaks_t_plot**0*np.max( deconv_crit[plot_start_i:plot_end_i]), 'v', ms=12, mew=2.0, mec='b', mfc='None') ax_deconv.set_ylim(None, 1.3*np.max( deconv_crit[plot_start_i:plot_end_i])) ax_deconv.set_title(r"Deconvolution") ax_hi = stfio_plot.StandardAxis(fig, gs[9:11,2:5], hasx=False, hasy=False) ax_hi.plot(trange_hi, plot_hi_trace, '-k', lw=2) ax_hi.plot(theoretical_peaks_t_plot_hi, theoretical_peaks_t_plot_hi*0 + 30.0, 'v', ms=12, mew=2.0, mec='k', mfc='None') ax_hi.plot(matching_peaks_t_plot_hi, matching_peaks_t_plot_hi*0 + 20.0, 'v', ms=12, mew=2.0, mec='g', mfc='None') ax_hi.plot(deconv_peaks_t_plot_hi, deconv_peaks_t_plot_hi*0 + 10.0, 'v', ms=12, mew=2.0, mec='b', mfc='None') stfio_plot.plot_scalebars(ax_hi, xunits="ms", yunits="pA") xA = plot_hi_start_t - plot_start_t yA = deconv_crit[plot_start_i:plot_end_i].min() con = ConnectionPatch(xyA=(xA, yA), xyB=(0, 1.0), coordsA="data", coordsB="axes fraction", axesA=ax_deconv, axesB=ax_hi, arrowstyle="-", linewidth=1, color="k") ax_deconv.add_artist(con) xA += (plot_hi_end_t - plot_hi_start_t) * 0.9 con = ConnectionPatch(xyA=(xA, yA), xyB=(0.9, 1.0), coordsA="data", coordsB="axes fraction", axesA=ax_deconv, axesB=ax_hi, arrowstyle="-", linewidth=1, color="k") ax_deconv.add_artist(con) ax_bars_matching = stfio_plot.StandardAxis(fig, gs[5:10,7:9]) matching_bars_FP = Bardata(matching_FP*1e2, title="False positives", color='g') matching_bars_FN = Bardata(matching_FN*1e2, title="False negatives", color='g') bargraph([matching_bars_FP, matching_bars_FN], ax_bars_matching, ylabel=r'Rate ($\%$)') ax_bars_matching.set_title(r"Template matching") ax_bars_deconv = stfio_plot.StandardAxis(fig, gs[5:10,10:12], hasy=False, sharey=ax_bars_matching) deconv_bars_FP = Bardata(deconv_FP*1e2, title="False positives", color='b') deconv_bars_FN = Bardata(deconv_FN*1e2, title="False negatives", color='b') bargraph([deconv_bars_FP, deconv_bars_FN], ax_bars_deconv, ylabel=r'Error rate $\%$') ax_bars_deconv.set_title(r"Deconvolution") fig.text(0.09, 0.9, "A", size='x-large', weight='bold', ha='left', va='top') fig.text(0.53, 0.9, "B", size='x-large', weight='bold', ha='left', va='top') fig.text(0.09, 0.58, "C", size='x-large', weight='bold', ha='left', va='top') fig.text(0.53, 0.58, "D", size='x-large', weight='bold', ha='left', va='top') plt.savefig("%s/../../manuscript/figures/Fig5/Fig5.svg" % module_dir) fig = plt.figure() ieis_ax = fig.add_subplot(111) ieis_ax.hist([np.diff(deconv_onsets), np.diff(matching_onsets), theoretical_ieis], bins=len(theoretical_ieis)/1.0, cumulative=True, normed=True, histtype='step') ieis_ax.set_xlabel("Interevent intervals (ms)") ieis_ax.set_ylabel("Cumulative probability") ieis_ax.set_xlim(0,800.0) ieis_ax.set_ylim(0,1.0) def events(template, deconv_th=4.5, matching_th=3.0, deconv_min_int=5.0, matching_min_int=5.0): """ Detects events using both deconvolution and template matching. Requires an arbitrary template waveform as input. Thresholds and minimal intervals between events can be adjusted for both algorithms. Plots cumulative distribution functions. """ module_dir = os.path.dirname(__file__) if os.path.exists("%s/dat/deconv_amps.npy" % module_dir): return np.load("%s/dat/deconv_amps.npy" % module_dir), \ np.load("%s/dat/deconv_onsets.npy" % module_dir), \ np.load("%s/dat/deconv_crit.npy" % module_dir), \ np.load("%s/dat/matching_amps.npy" % module_dir), \ np.load("%s/dat/matching_onsets.npy" % module_dir), \ np.load("%s/dat/matching_crit.npy" % module_dir) # Compute criteria deconv_amps, deconv_onsets, deconv_crit = \ detect(template, "deconvolution", deconv_th, deconv_min_int) matching_amps, matching_onsets, matching_crit = \ detect(template, "criterion", matching_th, matching_min_int) fig = plt.figure() amps_ax = fig.add_subplot(121) amps_ax.hist([deconv_amps, matching_amps], bins=50, cumulative=True, normed=True, histtype='step') amps_ax.set_xlabel("Amplitudes (pA)") amps_ax.set_ylabel("Cumulative probability") ieis_ax = fig.add_subplot(122) ieis_ax.hist([np.diff(deconv_onsets), np.diff(matching_onsets)], bins=50, cumulative=True, normed=True, histtype='step') ieis_ax.set_xlabel("Interevent intervals (ms)") ieis_ax.set_ylabel("Cumulative probability") np.save("%s/dat/deconv_amps.npy" % module_dir, deconv_amps) np.save("%s/dat/deconv_onsets.npy" % module_dir, deconv_onsets) np.save("%s/dat/deconv_crit.npy" % module_dir, deconv_crit) np.save("%s/dat/matching_amps.npy" % module_dir, matching_amps) np.save("%s/dat/matching_onsets.npy" % module_dir, matching_onsets) np.save("%s/dat/matching_crit.npy" % module_dir, matching_crit) return deconv_amps, deconv_onsets, deconv_crit, \ matching_amps, matching_onsets, matching_crit def detect(template, mode, th, min_int): """ Detect events using the given template and the algorithm specified in 'mode' with a threshold 'th' and a minimal interval of 'min_int' between events. Returns amplitudes and interevent intervals. """ import stf # Compute criterium crit = stf.detect_events(template, mode=mode, norm=False, lowpass=0.1, highpass=0.001) dt = stf.get_sampling_interval() # Find event onset times (corresponding to peaks in criteria) onsets_i = stf.peak_detection(crit, th, int(min_int/dt)) trace = stf.get_trace() # Use event onset times to find event amplitudes (negative for epscs) peak_window_i = min_int / dt amps_i = np.array([int(np.argmin(trace[onset_i:onset_i+peak_window_i])+onset_i) for onset_i in onsets_i], dtype=np.int) amps = trace[amps_i] onsets = onsets_i * dt return amps, onsets, crit if __name__=="__main__": figure() stimfit-0.17.1/plans/000077500000000000000000000000001517235503400144015ustar00rootroot00000000000000stimfit-0.17.1/plans/doc-refresh-plan.md000066400000000000000000000223601517235503400200570ustar00rootroot00000000000000# Documentation refresh plan for current `master` ## Objective Bring the maintained documentation sources under [`doc/`](doc/) and the published site on [`gh-pages`](gh-pages) into alignment with the current CMake-based repository state on [`master`](README.md:13). ## Findings from the audit ### Current source of truth has moved, but docs have not - The repository now documents CMake as the supported build path in [`BUILDING.md`](BUILDING.md). - The old Sphinx install guides still instruct users to run [`autogen.sh`](autogen.sh) and `configure`, for example in [`doc/sphinx/linux_install_guide/moduleonly.rst`](doc/sphinx/linux_install_guide/moduleonly.rst) and [`doc/sphinx/osx_install_guide/moduleonly.rst`](doc/sphinx/osx_install_guide/moduleonly.rst). - [`autogen.sh`](autogen.sh) is explicitly deprecated in [`BUILDING.md`](BUILDING.md:3), so large parts of the existing install docs are now misleading. ### The Sphinx toolchain is also stale - [`doc/sphinx/conf.py.in`](doc/sphinx/conf.py.in) still reflects a very old Sphinx layout and compatibility model. - [`doc/sphinx/Makefile.sphinx`](doc/sphinx/Makefile.sphinx) is an old hand-written build wrapper and does not define a modern publish-oriented build contract. - The repository previously shipped an external-host upload helper under [`doc/sphinx/`](doc/sphinx/) that targeted a former non-GitHub hosting setup. ### The `gh-pages` publishing flow is obsolete - The repository previously shipped a local `gh-pages` publication helper that checked out [`gh-pages`](gh-pages), merged [`master`](README.md:13), built docs in place, copied generated HTML to the repository root, and pushed. - That model mixes source and generated content, depends on local state, and is not appropriate for the current GitHub-hosted documentation target linked from [`README.md`](README.md:3). - The repository already has GitHub Actions in [`ci.yml`](.github/workflows/ci.yml), so documentation publication should be automated there rather than maintained manually. ### Doxygen is highly curated and likely incomplete for the modern tree - [`doc/Doxyfile.in`](doc/Doxyfile.in) uses a fixed `INPUT` list rather than a maintainable current-tree scope. - It still assumes older layout names such as `../src/stimfit/gui/*.h` in its input set, which should be revalidated against the current source structure before any regeneration strategy is finalized. - Because `EXTRACT_ALL` is disabled and coverage depends on hand-maintained inputs and comments, a refresh will require both configuration updates and selective source-comment improvements. ## Target end state ### Documentation architecture 1. **Sphinx becomes the canonical user and maintainer documentation source** - Keep authored documentation under [`doc/sphinx/`](doc/sphinx/). - Update build, install, Python module, and platform guidance to match current CMake workflows and supported packaging paths. - Keep existing user-manual content that is still product-relevant, but explicitly prune or rewrite stale procedural sections. 2. **Doxygen becomes a generated API reference artifact** - Refresh [`doc/Doxyfile.in`](doc/Doxyfile.in) so it targets the current codebase deliberately. - Publish Doxygen output as a sub-area of the site, linked from the Sphinx docs. - Treat Doxygen gaps as source-comment debt to be fixed in targeted source files during the refresh. 3. **GitHub Actions becomes the publishing mechanism** - Build documentation on pushes to [`master`](README.md:13). - Publish generated site output to [`gh-pages`](gh-pages). - Keep a documented local fallback build path for maintainers, but make automation the primary path. 4. **`gh-pages` becomes generated output only** - No branch merges from [`master`](README.md:13) into [`gh-pages`](gh-pages). - No editing docs directly on [`gh-pages`](gh-pages). - Branch contents should be the built site artifact produced by CI. ## Proposed implementation work ### Phase 1: Refresh Sphinx configuration and information architecture 1. Review [`doc/sphinx/conf.py.in`](doc/sphinx/conf.py.in) for current Sphinx compatibility issues. 2. Modernize the configuration while preserving the existing document tree where possible. 3. Confirm the top-level navigation in [`doc/sphinx/contents.rst`](doc/sphinx/contents.rst) reflects the sections that should still exist. 4. Decide which stale pages should be rewritten, redirected, or removed from the toctree. 5. Add or revise landing-page language so it describes the current repository, build system, and supported platforms. ### Phase 2: Rewrite stale build and install content 1. Replace autotools-based instructions in Linux docs with the workflows described in [`BUILDING.md`](BUILDING.md). 2. Replace outdated macOS instructions that reference Python 2, old Homebrew formulas, and old MacPorts package names in [`doc/sphinx/osx_install_guide/moduleonly.rst`](doc/sphinx/osx_install_guide/moduleonly.rst). 3. Rework Windows documentation so it points to the current MSVC and CPack flow documented in [`README.md`](README.md:105). 4. Update module-only build guidance so it reflects modern CMake switches for `stfio` and the current Python support story. 5. Sweep the remaining Sphinx tree for obsolete references to: - `autogen.sh` - `configure` - Python 2 only workflows - outdated package names - legacy external hosting URLs ### Phase 3: Reconcile documentation with current source layout 1. Audit public-facing source areas that are still relevant to docs, especially the directories listed in [`README.md`](README.md:156). 2. Update Sphinx pages that describe Python APIs, file I/O capabilities, and extension points so they match the current tree. 3. Check whether the current `stf` and `stfio` reference sections are still correct or should be reduced, regenerated, or partly replaced by API extracts. 4. Remove references to files, subdirectories, or workflows that no longer exist on [`master`](README.md:13). ### Phase 4: Refresh Doxygen for the current tree 1. Audit the `INPUT` set in [`doc/Doxyfile.in`](doc/Doxyfile.in) against the modern source tree. 2. Replace the brittle curated input list with one of these controlled approaches: - a smaller set of current public headers for intentional API docs, or - a recursive input rooted in the maintained library and application headers with exclusions for vendored code. 3. Update path stripping, output paths, and optional graph generation settings for modern tool versions. 4. Validate whether LaTeX output is still needed; if not, de-scope it from the first refresh to reduce risk. 5. Identify headers and classes that need comment improvements so Doxygen output is materially useful rather than just technically generated. ### Phase 5: Replace the publish pipeline 1. Retire the old local `gh-pages` publication helper as the primary publication mechanism. 2. Add a GitHub Actions workflow dedicated to docs publication, separate from or layered onto [`ci.yml`](.github/workflows/ci.yml). 3. The workflow should: - check out submodules as needed - install Sphinx and Doxygen dependencies - build Sphinx HTML - build Doxygen HTML - assemble a single site tree - publish to [`gh-pages`](gh-pages) 4. Keep the built site structure stable enough that links in [`README.md`](README.md:3) remain valid. 5. Document a local fallback procedure for maintainers in a markdown file under [`doc/`](doc/) or [`plans/`](plans/). ## Recommended execution order for implementation mode ```mermaid flowchart TD A[Audit current doc pages and build commands] --> B[Modernize Sphinx config and toctree] B --> C[Rewrite stale install and build guides] C --> D[Refresh API reference strategy and Doxygen config] D --> E[Add docs publishing workflow] E --> F[Build docs and fix breakages] F --> G[Publish generated site to gh-pages] ``` ## Implementation checklist for the next mode - [ ] Establish the exact set of Sphinx pages to keep, rewrite, or remove - [ ] Update [`doc/sphinx/conf.py.in`](doc/sphinx/conf.py.in) for current Sphinx expectations - [ ] Rewrite Linux, macOS, Windows, and module-only build docs to match [`BUILDING.md`](BUILDING.md) - [ ] Sweep and fix stale links, package names, and hosting references across [`doc/sphinx/`](doc/sphinx/) - [ ] Rework [`doc/Doxyfile.in`](doc/Doxyfile.in) to target the current source tree deliberately - [ ] Improve missing or weak source comments in the headers selected for Doxygen output - [ ] Add a GitHub Actions documentation publish workflow under [`.github/workflows/`](.github/workflows/) - [ ] Define the assembled site layout that will be deployed to [`gh-pages`](gh_pages) - [ ] Validate generated output and internal links before any publish step - [ ] Update maintainers on the new source-versus-generated-doc boundary ## Risk notes - The largest risk is not the build tooling but the amount of stale prose embedded in many Sphinx pages. - Doxygen refresh may expose sparse code comments, which means configuration-only changes will not be enough. - Publishing should be treated as the final step only after source docs build cleanly and link structure is stable. ## Recommendation Use **Code mode** for implementation, with the first implementation milestone focused on source documentation cleanup and a reproducible local docs build, then add CI-based publication to [`gh-pages`](gh-pages). stimfit-0.17.1/plans/ipython-architecture-plan.md000066400000000000000000000321651517235503400220340ustar00rootroot00000000000000# IPython embedded shell architecture plan ## Objective Replace the obsolete legacy IPython path with a new architecture that delivers a real modern IPython experience inside Stimfit by running a Jupyter-compatible kernel in process and attaching an embedded frontend widget inside the existing Stimfit shell pane. ## Architectural recommendation Adopt a two-layer shell architecture: 1. a Stimfit-managed in-process kernel host that exposes a Jupyter messaging surface while sharing the existing embedded Python runtime 2. an embedded frontend widget hosted in the current shell window area that talks to that kernel through a local transport layer instead of the removed legacy [`IPython.ipapi.get()`](../src/stimfit/gui/unopt.cpp:372) model This should be treated as a full replacement for the old [`#ifdef IPYTHON`](../src/stimfit/gui/parentframe.cpp:346) branch, not as a revival of [`embedded_ipython.py`](../src/stimfit/gui/parentframe.cpp:347). ## Why this architecture fits Stimfit - It matches your stated goal of a real IPython experience rather than just keeping the current [`wx.py.shell.Shell`](../src/stimfit/py/embedded_shell_modern.py:15) UI. - It removes dependence on missing legacy artifacts such as [`embedded_ipython.py`](../src/stimfit/py/CMakeLists.txt) and obsolete execution hooks like [`ip.ex`](../src/stimfit/gui/unopt.cpp:380). - It preserves the current Stimfit-owned embedding point in [`makeWindow`](../src/stimfit/gui/parentframe.cpp:352), so the GUI integration can stay conceptually similar even though the shell implementation changes. - It allows import, completion, history, rich traceback, and inspection behavior to come from a modern kernel and frontend protocol instead of Stimfit-specific shell internals. ## Proposed target architecture ```mermaid flowchart TD A[Stimfit C++ host] --> B[Python bridge bootstrap] B --> C[Embedded kernel host] C --> D[Stimfit namespace adapter] C --> E[Frontend transport adapter] E --> F[Embedded shell widget] D --> G[stf lazy imports and helpers] F --> H[User commands rich display completion history] ``` ## Component design ### 1. C++ shell host layer Keep the existing shell pane creation entrypoint in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:381), but simplify it so C++ only does three things: - prepare Python import paths and environment - import one canonical shell module - ask that module to create the shell widget The new design should eliminate legacy compile-time branching on [`IPYTHON`](../cmake/StimfitToolchain.cmake:15) and reduce backend choice to a runtime module contract. ### 2. Python bootstrap module Introduce a new Python-side bootstrap module, likely something like [`embedded_shell_ipython.py`](../src/stimfit/py/CMakeLists.txt), responsible for: - starting the in-process kernel host only once per application lifetime - creating the frontend widget for the parent wx container - exposing a stable [`MyPanel`](../src/stimfit/gui/parentframe.cpp:356)-compatible API so C++ integration remains narrow - registering Stimfit startup imports now handled through [`from embedded_init import *`](../src/stimfit/py/embedded_shell_modern.py:125) This module should be the only Stimfit-specific entrypoint for the new shell stack. ### 3. In-process kernel host Build a dedicated kernel host abstraction around an IPython or Jupyter kernel implementation, with these responsibilities: - own kernel lifecycle start stop restart - provide a namespace seeded with Stimfit helpers from [`embedded_init.py`](../src/stimfit/py/embedded_init.py:16) - serialize execution requests coming from the embedded frontend - surface stdout stderr display data completion and introspection replies back to the frontend - provide a controlled API for Stimfit menu actions such as import module reload module and context injection The kernel host should not depend on removed singletons such as [`IPython.ipapi.get()`](../src/stimfit/gui/unopt.cpp:372). Instead, Stimfit should talk to the host through explicit Python functions or objects retained by the bootstrap module. ### 4. Embedded frontend widget Use a dedicated embedded frontend widget instead of trying to stretch [`wx.py.shell.Shell`](../src/stimfit/py/embedded_shell_modern.py:15) into an IPython UI. The frontend responsibilities are: - render prompts input output and rich tracebacks - issue Jupyter execute completion history and inspection requests - manage keybindings multi-line editing and history - host any rich output area that can later be extended for figures or mime bundle rendering The key architectural decision is to isolate the frontend behind a transport adapter so the rest of Stimfit does not care whether the UI implementation is a wx-native text control wrapper, an embedded web view, or another widget technology. ### 5. Transport adapter Because the kernel is in process, avoid legacy direct object poking and also avoid unnecessary external process assumptions. Use an internal transport abstraction with one implementation for the initial rollout: - in-process message queues or loopback channels that mimic Jupyter request reply and publish flows This gives two benefits: - the frontend and kernel can still be reasoned about as separate protocol actors - an external console or remote debugging frontend could be added later without rewriting the shell business logic ### 6. Stimfit namespace adapter Add a dedicated namespace service responsible for exposing Stimfit objects and helpers into the kernel namespace. This replaces the old behavior where imports were injected differently depending on [`#ifdef IPYTHON`](../src/stimfit/gui/unopt.cpp:369). The adapter should: - load [`embedded_init.py`](../src/stimfit/py/embedded_init.py:16) consistently for all shell modes - expose lazy [`stf`](../src/stimfit/py/embedded_init.py:67) access without forcing early SWIG import - provide helper methods for adding current document selection recording and analysis state to the shell namespace - own the import or reload workflow currently built as ad hoc source strings in [`ImportPython`](../src/stimfit/gui/unopt.cpp:359) ### 7. Import execution service Remove shell-specific import semantics from C++. Instead of building source strings that call [`ip.ex`](../src/stimfit/gui/unopt.cpp:380) or raw [`PyRun_SimpleString`](../src/stimfit/gui/unopt.cpp:401), route user-driven imports through a Python API such as: - `stimfit_shell.import_module_from_path path` - `stimfit_shell.reload_module name` - `stimfit_shell.push_context data` That gives one implementation regardless of shell frontend. ## Integration seams ### GUI seam The existing call to [`MakePythonWindow`](../src/stimfit/gui/parentframe.cpp:381) remains the embedding seam. The only required C++ contract should be: - shell module import name - widget factory name - optional lifecycle callbacks for restart or shutdown ### Python initialization seam The current environment setup in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:335) should be retained in spirit but simplified to import one shell bootstrap module. All IPython-specific startup logic should move out of C++ strings and into Python modules. ### Menu action seam The menu-driven import path in [`ImportPython`](../src/stimfit/gui/unopt.cpp:359) should call a single Python facade rather than embed different execution code paths for legacy IPython and non-IPython shells. ### Build and packaging seam The Python install list in [`src/stimfit/py/CMakeLists.txt`](../src/stimfit/py/CMakeLists.txt:60) should eventually ship the new shell bootstrap and any helper modules. Packaging should stop referencing missing files such as [`embedded_ipython.py`](../dist/windows/nsis/installer.nsi.in:234). ## Migration strategy ### Phase 1: remove dead legacy assumptions Remove or deprecate immediately: - [`STF_ENABLE_IPYTHON`](../cmake/StimfitOptions.cmake:8) because it encodes a dead implementation path rather than a meaningful product choice - compile definition wiring in [`StimfitToolchain.cmake`](../cmake/StimfitToolchain.cmake:15) - dead legacy branches in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:346) and [`unopt.cpp`](../src/stimfit/gui/unopt.cpp:369) - stale packaging entry for [`embedded_ipython.py`](../dist/windows/nsis/installer.nsi.in:234) - stale summary output for [`STF_ENABLE_IPYTHON`](../cmake/StimfitMigration.cmake:9) - stale comments in [`embedded_init.py`](../src/stimfit/py/embedded_init.py:11) Retain temporarily only if needed during implementation: - [`STF_PY_SHELL_BACKEND`](../cmake/StimfitOptions.cmake:9) as the feature flag for switching between the current shell and the new architecture during migration - [`embedded_stf.py`](../src/stimfit/py/embedded_stf.py:1) and [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py:1) as fallback paths until the new shell is stable ### Phase 2: add the new IPython shell stack behind a migration backend Add a new backend value to [`STF_PY_SHELL_BACKEND`](../cmake/StimfitOptions.cmake:9), such as `JUPYTER`, and route [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:281) to one bootstrap module per backend. This gives a reversible migration path without preserving the obsolete [`IPYTHON`](../cmake/StimfitToolchain.cmake:15) macro. ### Phase 3: unify import and namespace management Move the import logic out of [`wxStfApp::ImportPython`](../src/stimfit/gui/unopt.cpp:359) and into Python services shared by all backends. Once complete, C++ should stop constructing import source code entirely. ### Phase 4: make the new backend the default After the new shell handles execution completion history restart and module import reliably, switch the default backend away from `MODERN` to the new kernel-backed mode, while keeping a non-IPython fallback for environments where the richer stack cannot start. ### Phase 5: retire old shell implementations if desired Once validated across supported platforms, decide whether [`embedded_stf.py`](../src/stimfit/py/embedded_stf.py:1) remains as a low-dependency fallback or whether [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py:1) can absorb that responsibility alone. ## Recommended concrete work breakdown 1. Remove obsolete legacy IPython build and packaging hooks. 2. Introduce a new backend name in [`STF_PY_SHELL_BACKEND`](../cmake/StimfitOptions.cmake:9) for the kernel-backed shell. 3. Create a Python bootstrap module for the new backend with a stable panel factory contract. 4. Implement a kernel host abstraction with lifecycle and namespace management. 5. Implement a frontend transport adapter and embedded widget. 6. Rework [`ImportPython`](../src/stimfit/gui/unopt.cpp:359) to call a Python facade instead of generating shell-specific source code. 7. Update packaging in [`src/stimfit/py/CMakeLists.txt`](../src/stimfit/py/CMakeLists.txt:60) and [`installer.nsi.in`](../dist/windows/nsis/installer.nsi.in:220). 8. Keep [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py:1) as a migration fallback until the new backend is proven. ## Design constraints and risks ### Dependency and portability risk A modern Jupyter stack introduces more moving parts than the current shell. The implementation must define which dependencies are mandatory and how they are packaged on macOS Windows and Linux. ### GUI technology risk A true rich frontend may push Stimfit beyond the capabilities of a simple wx text widget. The plan should therefore keep the frontend behind an adapter boundary so the initial widget can be simple while leaving room for a richer renderer later. ### Kernel reentrancy risk Because the kernel runs in process with the application, long-running user code can block the UI unless execution and message pumping are coordinated carefully. ### Stimfit object lifetime risk Objects exposed to the shell may outlive their underlying C++ resources. The namespace adapter must normalize how current recording and document objects are published and invalidated. ### Fallback behavior risk The product should keep a minimal shell path available while the new architecture matures, likely through [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py:1). ## Acceptance criteria for the future implementation The new architecture should not be considered complete until all of the following are true: - Stimfit no longer references [`embedded_ipython.py`](../dist/windows/nsis/installer.nsi.in:234) or [`IPython.ipapi`](../src/stimfit/gui/unopt.cpp:371) - shell creation in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:281) selects backends without the obsolete [`IPYTHON`](../cmake/StimfitToolchain.cmake:15) macro - module import and reload from the GUI work through one backend-agnostic service instead of separate legacy and non-legacy paths - the embedded shell widget supports command execution completion inspection history and rich traceback behavior - Stimfit startup remains resilient when optional rich shell dependencies are absent, with fallback to [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py:1) ## Review summary Recommended direction: build a new kernel-backed embedded shell architecture and remove the dead legacy IPython path immediately, while keeping the current modern shell as a migration fallback. stimfit-0.17.1/plans/ipython-feasibility-investigation.md000066400000000000000000000201471517235503400236040ustar00rootroot00000000000000# IPython feasibility investigation for the embedded Python shell ## Scope Investigate whether Stimfit can realistically use modern IPython for the embedded Python shell, given the current codebase and surviving legacy integration hooks. ## Summary conclusion A direct revival of the historical IPython integration does not look viable. The repository still carries remnants of an old IPython path, but the implementation depends on APIs and files that no longer exist in the current tree. The current embedded shell architecture has already shifted to a non-IPython approach built around [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py) and, optionally, the older [`embedded_stf.py`](../src/stimfit/py/embedded_stf.py). The most likely outcome of a full implementation attempt would be one of these: - treat legacy IPython support as obsolete and remove or deprecate its stale build and packaging hooks - or design a substantially new architecture that embeds a modern Jupyter or IPython frontend rather than reviving the old in-process wx integration ## Evidence inventory ### Remaining legacy IPython hooks - Build option [`STF_ENABLE_IPYTHON`](../cmake/StimfitOptions.cmake) still exists and is described as equivalent to legacy [`--enable-ipython`](../CMAKE_MIGRATION.md) - Toolchain logic still converts that option into compile definition [`IPYTHON`](../cmake/StimfitToolchain.cmake:15) - Historical Autotools support also still shows the old [`--enable-ipython`](../dist/macosx/scripts/configure.10.4.in:81) flag - Window creation in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp) still branches on [`#ifdef IPYTHON`](../src/stimfit/gui/parentframe.cpp:346) and tries to import [`embedded_ipython`](../src/stimfit/gui/parentframe.cpp:347) - Import-module handling in [`unopt.cpp`](../src/stimfit/gui/unopt.cpp) still branches on [`#ifdef IPYTHON`](../src/stimfit/gui/unopt.cpp:369) - Windows packaging still tries to ship [`embedded_ipython.py`](../dist/windows/nsis/installer.nsi.in:234) - Comments in [`embedded_init.py`](../src/stimfit/py/embedded_init.py:11) still mention [`embedded_ipython.py`](../src/stimfit/py/embedded_init.py:11) - Historical references in [`ChangeLog.old`](../ChangeLog.old) show that IPython support was once an active feature ### Missing or inconsistent pieces - The source tree no longer contains [`embedded_ipython.py`](../src/stimfit/py/CMakeLists.txt) - The Python install list in [`src/stimfit/py/CMakeLists.txt`](../src/stimfit/py/CMakeLists.txt) includes [`embedded_stf.py`](../src/stimfit/py/embedded_stf.py) and [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py), but not [`embedded_ipython.py`](../src/stimfit/py/CMakeLists.txt) - Current build artifacts likewise install [`embedded_shell_modern.py`](../build/macos-app/install_manifest.txt) rather than any IPython-specific shell module ## Legacy assumptions versus current architecture ### Historical IPython path The legacy path assumes all of the following: 1. Stimfit can import a module named [`embedded_ipython`](../src/stimfit/gui/parentframe.cpp:347) 2. That module provides [`MyPanel`](../src/stimfit/gui/parentframe.cpp:354) as a wx widget 3. The embedded shell exposes an object reachable through [`IPython.ipapi.get()`](../src/stimfit/gui/unopt.cpp:372) 4. Stimfit can execute user imports by calling [`ip.ex`](../src/stimfit/gui/unopt.cpp:380) inside the live IPython session That model is tightly coupled to a very old IPython API surface. ### Current shell model The current codebase instead supports two non-IPython shell backends: - [`embedded_stf.py`](../src/stimfit/py/embedded_stf.py), the older wx shell based on [`wx.py.shell.Shell`](../src/stimfit/py/embedded_stf.py:18) - [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py), the current default, which prefers [`wx.py.shell`](../src/stimfit/py/embedded_shell_modern.py:15) and falls back to a minimal in-process [`code.InteractiveConsole`](../src/stimfit/py/embedded_shell_modern.py:72) Current backend selection is controlled by [`STF_PY_SHELL_BACKEND`](../cmake/StimfitOptions.cmake) and the compile-time macro selection in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:281). ### Import workflow comparison For the non-IPython shells, Stimfit imports user modules by constructing Python source and executing it with [`PyRun_SimpleString`](../src/stimfit/gui/unopt.cpp:401). That path only assumes a normal interpreter namespace. For the legacy IPython path, Stimfit instead imports through [`ip.ex`](../src/stimfit/gui/unopt.cpp:380), which assumes a shell-specific control object obtained from the deprecated [`IPython.ipapi`](../src/stimfit/gui/unopt.cpp:371) module. This means the old IPython integration is not just another frontend widget. It changes the import control path and assumes shell-specific execution semantics. ## Feasibility assessment for modern IPython ### API blockers The strongest blocker is reliance on removed or obsolete IPython APIs: - [`IPython.ipapi`](../src/stimfit/gui/unopt.cpp:371) - [`IPython.ipapi.get()`](../src/stimfit/gui/unopt.cpp:372) - shell execution through [`ip.ex`](../src/stimfit/gui/unopt.cpp:380) Even if a replacement frontend existed, these calls would need a redesign. ### UI and embedding blockers The old design assumes an in-process wx panel that behaves like the legacy shell. Modern IPython development moved toward terminal integration, Qt consoles, kernels, and Jupyter frontends rather than a simple wx-embedded shell object with the same control API. By contrast, the currently supported path uses [`wx.py.shell`](../src/stimfit/py/embedded_shell_modern.py:15) directly or falls back to [`InteractiveConsole`](../src/stimfit/py/embedded_shell_modern.py:72), both of which match Stimfit’s existing embedding model much more naturally. ### Packaging blockers The stale Windows installer entry for [`embedded_ipython.py`](../dist/windows/nsis/installer.nsi.in:234) shows that packaging metadata has already drifted away from reality. Reintroducing modern IPython would likely add substantially more runtime complexity across macOS, Windows, and Linux than the current shell backends require. ### Maintenance blockers The codebase already has a clear modernization path centered on [`STF_PY_SHELL_BACKEND`](../cmake/StimfitOptions.cmake) and [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py). Reopening IPython support would create a second advanced shell architecture with different assumptions, dependencies, and failure modes. ## Go or no-go recommendation ### Recommendation No-go for direct revival of the historical IPython integration. ### Rationale - missing source file [`embedded_ipython.py`](../src/stimfit/py/CMakeLists.txt) - obsolete API dependency on [`IPython.ipapi.get()`](../src/stimfit/gui/unopt.cpp:372) - stale packaging reference in [`installer.nsi.in`](../dist/windows/nsis/installer.nsi.in:234) - current supported architecture already solved the embedded-shell problem without IPython through [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py) ## Recommended next actions 1. Confirm through a brief implementation-free review that no modern IPython wx embedding API exists that preserves the old in-process model 2. If that review confirms the current evidence, deprecate or remove the stale IPython hooks: - [`STF_ENABLE_IPYTHON`](../cmake/StimfitOptions.cmake) - compile definition wiring in [`StimfitToolchain.cmake`](../cmake/StimfitToolchain.cmake:15) - dead guarded branches in [`parentframe.cpp`](../src/stimfit/gui/parentframe.cpp:346) and [`unopt.cpp`](../src/stimfit/gui/unopt.cpp:369) - stale packaging entry in [`installer.nsi.in`](../dist/windows/nsis/installer.nsi.in:234) - stale comments mentioning [`embedded_ipython.py`](../src/stimfit/py/embedded_init.py:11) 3. Keep the supported embedded shell strategy centered on [`embedded_shell_modern.py`](../src/stimfit/py/embedded_shell_modern.py) ## Decision statement Based on the repository state, there is no credible path to simply turn on IPython for the embedded shell again. Any future IPython use would require a new design effort, not restoration of the legacy integration. stimfit-0.17.1/plans/macos-cmake-port-plan.md000066400000000000000000000153261517235503400210240ustar00rootroot00000000000000# Stimfit macOS CMake Port Plan ## Scope agreed - Deliver **build + install parity** on macOS using CMake. - Include compile, link, install, and loader path behavior. - Exclude legacy app bundle and DMG workflows from deprecated scripts in [`dist/macosx/scripts`](dist/macosx/scripts). - Keep existing Linux GCC and Windows MSVC CMake behavior stable. - Treat [`dist/macosx/macports/python/py-stfio`](dist/macosx/macports/python/py-stfio) as retired and out of scope. ## Current-state summary Autotools macOS behavior comes from [`configure.ac`](configure.ac) and [`Makefile.am`](Makefile.am): - Darwin sets PIC and platform-specific library naming via `STF_PYTHON_LIBNAME` and `STFIO_PYTHON_LIBNAME`. - Non-module builds compile wx GUI executable and shared libs. - Legacy install recipe for macOS used manual copy and extensive `install_name_tool -change` rewrite in [`Makefile.am`](Makefile.am:283). Current CMake baseline in [`CMakeLists.txt`](CMakeLists.txt) and per-component files already covers: - Core targets: `stfio`, `stfnum`, optional BioSig support, `stimfit_core`, `stimfit`, optional `pystf`, optional `_stfio`. - Linux RPATH handling via [`CMakeLists.txt`](CMakeLists.txt:83). - Windows runtime collection and packaging logic via [`CMakeLists.txt`](CMakeLists.txt:35). macOS gap: no explicit, unified CMake policy for install-name and runtime lookup parity equivalent to historical loader path fixups. ## Design principles 1. Prefer modern CMake target properties over shell post-processing. 2. Keep macOS logic isolated behind `APPLE` conditionals and new opt-in cache variables where needed. 3. Do not alter default Linux or Windows behavior paths. 4. Align install layout with active MacPorts expectations from [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile). ## Planned CMake changes ### 1. Add macOS runtime path policy module Create [`cmake/StimfitMacOS.cmake`](cmake/StimfitMacOS.cmake) with: - Global defaults under `if(APPLE)`: - `CMAKE_MACOSX_RPATH ON` - `CMAKE_INSTALL_NAME_DIR "@rpath"` - Helper function `stf_apply_macos_runtime_policy(target)` to set: - `BUILD_WITH_INSTALL_RPATH` OFF - `INSTALL_RPATH "@loader_path/../lib/stimfit;@loader_path"` for executables and modules as appropriate - `INSTALL_NAME_DIR "@rpath"` for shared libs/modules - Optional toggle for strict post-install validation command using `otool -L` (validation only). ### 2. Wire module into top-level build In [`CMakeLists.txt`](CMakeLists.txt): - Include new module after existing includes. - Keep existing Linux `CMAKE_INSTALL_RPATH` block untouched. - Add guarded macOS block to define canonical install subdir variables, reusing `${CMAKE_INSTALL_LIBDIR}/stimfit` layout already used by targets. ### 3. Apply policy to all relevant targets In these files, call `stf_apply_macos_runtime_policy()` after target creation: - [`src/libstfio/CMakeLists.txt`](src/libstfio/CMakeLists.txt) - [`src/libstfnum/CMakeLists.txt`](src/libstfnum/CMakeLists.txt) - the BIOSIG integration component CMake file - [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt) - [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) - [`src/stimfit/py/CMakeLists.txt`](src/stimfit/py/CMakeLists.txt) - top-level executable `stimfit` in [`CMakeLists.txt`](CMakeLists.txt:100) - test executable `stimfittest` in [`CMakeLists.txt`](CMakeLists.txt:391) ### 4. Ensure Python module loader-path parity on macOS For `pystf` and `_stfio` module targets: - Ensure install name and rpath allow resolving `libstimfit`, `libstfio`, `libstfnum`, and optional BioSig support libraries from installed tree. - Keep current install destinations unchanged to avoid Linux and Windows churn. ### 5. Migrate active MacPorts Stimfit port to CMake immediately Update active MacPorts files: - [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) - regenerated [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile) Planned MacPorts migration details: - Switch from Autotools-driven configure arguments to CMake flow by defining: - `configure.cmd` as CMake - `build.cmd` as CMake build invocation - `destroot.cmd` as CMake install invocation - Pass equivalent options from variants into CMake cache arguments, including: - `-DSTF_ENABLE_PYTHON` toggled by Python variants - `-DSTF_WITH_BIOSIG=ON` with `-DSTF_BIOSIG_PROVIDER=SUBMODULE` as the default behavior - `-DSTF_BUILD_MODULE=OFF` for stimfit application port - Keep wx integration by forwarding selected `wx-config` path or equivalent include/link hints to CMake through explicit cache variables where needed. - Preserve existing MacPorts dependency model and Python variant logic while changing only build backend semantics. Out-of-scope remains unchanged: - No migration work for retired [`dist/macosx/macports/python/py-stfio`](dist/macosx/macports/python/py-stfio). - No reliance on deprecated scripts in [`dist/macosx/scripts`](dist/macosx/scripts). ## Regression safety strategy - All new logic wrapped in `if(APPLE)` or invoked by function that no-ops on non-Apple. - No changes to Windows runtime dependency installer sections in [`CMakeLists.txt`](CMakeLists.txt:35). - No changes to Linux RPATH logic in [`CMakeLists.txt`](CMakeLists.txt:83). - No changes to dependency selection semantics in [`cmake/StimfitDependencies.cmake`](cmake/StimfitDependencies.cmake). ## Acceptance checks for Code mode ### macOS 1. Configure non-module: - `cmake -S . -B build/macos -G Ninja -DSTF_WITH_BIOSIG=ON -DSTF_BIOSIG_PROVIDER=SUBMODULE` 2. Build: - `cmake --build build/macos` 3. Install to staging prefix: - `cmake --install build/macos --prefix build/macos/install` 4. Validate loader references: - `otool -L build/macos/install/bin/stimfit` - `otool -L build/macos/install/lib/stimfit/libstimfit.dylib` - `otool -L ` 5. Validate expected `@rpath` and `@loader_path` usage and absence of broken absolute build-tree paths. ### Linux GCC smoke - Reconfigure existing Linux preset and ensure successful configure/build without changed option behavior. ### Windows MSVC smoke - Reconfigure existing Windows preset and ensure configure step does not regress option/dependency resolution. ## Ordered implementation sequence for Code mode 1. Add [`cmake/StimfitMacOS.cmake`](cmake/StimfitMacOS.cmake). 2. Include it in [`CMakeLists.txt`](CMakeLists.txt) and add macOS-scoped defaults. 3. Apply runtime policy calls in component `CMakeLists.txt` files. 4. Apply runtime policy calls for top-level executables/tests. 5. Run configure/build/install validation on macOS. 6. Run Linux and Windows configuration smoke checks. 7. Document resulting behavior in [`CMAKE_MIGRATION.md`](CMAKE_MIGRATION.md). stimfit-0.17.1/plans/macports-release-protocol.md000066400000000000000000000210011517235503400220220ustar00rootroot00000000000000# MacPorts release protocol for Stimfit ## Purpose This protocol captures the exact workflow for preparing a Stimfit MacPorts release so a future agent can repeat the process with minimal guidance. ## Current target - upstream version: `0.17.1` - MacPorts tag: `v0.17.1macports` - source template: [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) - checksum helper reference: [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in) - version source of truth: [`VERSION`](VERSION) ## Observed conventions - The Stimfit MacPorts template uses placeholders `STFVERSION`, `RMD160`, `SHA256`, and `SIZE` in [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in). - The checksum regeneration flow is documented by [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in:3) through [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in:39). - Historical MacPorts release tags follow the `vmacports` pattern, as seen in [`.git/packed-refs`](.git/packed-refs). - Local helper [`dist/macosx/macports/mk_diff.sh`](dist/macosx/macports/mk_diff.sh) compares the generated local Portfile against a MacPorts checkout under `~/macports/dports`. - The active CMake path requires the [`src/biosig`](src/biosig) submodule to be initialized before packaging because the MacPorts port builds with [`-DSTF_BIOSIG_PROVIDER=SUBMODULE`](dist/macosx/macports/science/stimfit/Portfile.in:35). - The generated source archive extracts to `Stimfit--Source`, so [`worksrcdir`](dist/macosx/macports/science/stimfit/Portfile.in:20) must stay aligned with that name. - The MacPorts [`cmake` PortGroup](dist/macosx/macports/science/stimfit/Portfile.in:5) must control the build and destroot phases; custom [`build.cmd`](dist/macosx/macports/science/stimfit/Portfile.in) or [`destroot.cmd`](dist/macosx/macports/science/stimfit/Portfile.in) overrides break MacPorts’ wrapper invocation. - For app-bundle installs, [`-DCMAKE_INSTALL_PREFIX=${applications_dir}`](dist/macosx/macports/science/stimfit/Portfile.in:33) is required so the bundle lands under `/Applications/MacPorts/stimfit.app` rather than `/usr/local` or `/Applications/MacPorts/MacPorts`. ## Release workflow ### 1. Prepare the upstream tree 1. Confirm the work starts from the intended upstream branch, currently [`master`](BRANCHES.md:7). 2. Inspect [`VERSION`](VERSION) and bump it from the previous release to the target release. 3. Review whether MacPorts-related defaults need adjustment for the new release in: - [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) - [`dist/macosx/scripts/conf_macports_release.sh`](dist/macosx/scripts/conf_macports_release.sh) 4. Keep the active Stimfit MacPorts port in scope and treat legacy [`dist/macosx/macports/python/py-stfio/Portfile.in`](dist/macosx/macports/python/py-stfio/Portfile.in) as reference-only unless a compatibility reason forces an update. ### 2. Generate the dist tarball and checksums Follow the logic embedded in [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in): 1. Initialize the BioSig submodule with `git submodule update --init src/biosig`. 2. Configure the release build with explicit MacPorts wx/Python tool paths. The updated [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in) now does this directly instead of relying on a legacy `make dist` flow. 3. Generate the source archive with `COPYFILE_DISABLE=1 cpack --config build-macports-release/CPackSourceConfig.cmake -G TGZ`. 4. Copy `Stimfit--Source.tar.gz` to the uploaded filename `stimfit-.tar.gz`. 5. Upload the renamed tarball using [`dist/macosx/macports/upload_stimfit.in`](dist/macosx/macports/upload_stimfit.in). 6. Compute: - `rmd160` - `sha256` - archive `size` 7. Regenerate [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile) from [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) by replacing the placeholders. Critical packaging guardrails: - Ensure the source archive contains [`src/biosig`](src/biosig) before uploading. - Ensure the source archive does **not** contain `build/release`, otherwise the tarball can recursively include itself and grow to many gigabytes. - Keep [`CPACK_SOURCE_IGNORE_FILES`](CMakeLists.txt:606) in [`CMakeLists.txt`](CMakeLists.txt) so build artifacts are excluded from the source archive. ### 3. Validate the new Portfile 1. Confirm the generated [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile) contains: - `version 0.17.1` - updated `checksums` - [`worksrcdir Stimfit-${version}-Source`](dist/macosx/macports/science/stimfit/Portfile.in:20) - [`-DCMAKE_INSTALL_PREFIX=${applications_dir}`](dist/macosx/macports/science/stimfit/Portfile.in:33) - unchanged variant logic unless intentionally revised 2. If a local MacPorts checkout exists at `~/macports/dports`, run the comparison flow described by [`dist/macosx/macports/mk_diff.sh`](dist/macosx/macports/mk_diff.sh). 3. Validate that the resulting Portfile remains ready for submission under `science/stimfit` in `macports-ports`. 4. Local acceptance sequence for the overlay port should include: - `sudo port checksum stimfit` - `sudo port -v build stimfit` - `sudo port -v install stimfit` 5. Confirm the bundle lands at `/Applications/MacPorts/stimfit.app` only. ### 4. Prepare git history for upstream release tracking 1. Commit the version bump and any source-release changes in the Stimfit repository. 2. Commit the regenerated MacPorts files in the Stimfit repository. 3. Create an annotated tag named `v0.17.1macports` on the final packaging commit. Recommended split if there are two commits: - upstream/version prep commit: `Bump version to 0.17.1` - packaging commit: `Update macports files` If the release is prepared as a single consolidated commit, preserve the existing intent and make sure the annotated tag still lands on the packaging-ready commit. ### 5. Prepare the downstream MacPorts pull request branch In the local clone of `https://github.com/macports/macports-ports`, create a dedicated branch for the submission. Recommended branch naming: - `users/cs/stimfit-0.17.1` - or `stimfit-0.17.1` Recommended MacPorts commit message format: - `stimfit: update to 0.17.1` If dependencies or build logic change materially, append a brief bullet list in the commit body describing the rationale. ### 6. Pull request readiness checklist Before opening the downstream PR, verify: - the generated [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile) is final - version and checksum fields match the produced tarball - local branch for `macports-ports` is dedicated to this update only - commit message is `stimfit: update to 0.17.1` - upstream Stimfit tag `v0.17.1macports` exists on the final packaging commit ## Implementation-ready checklist for Code mode - Update [`VERSION`](VERSION) from `0.17.0` to `0.17.1`. - Review [`dist/macosx/macports/science/stimfit/Portfile.in`](dist/macosx/macports/science/stimfit/Portfile.in) for any release-specific adjustments. - Use the checksum-generation procedure from [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in) to build the tarball and regenerate [`dist/macosx/macports/science/stimfit/Portfile`](dist/macosx/macports/science/stimfit/Portfile). - Verify the generated Portfile fields and diff against any existing MacPorts checkout if available. - Commit upstream changes using the established local history style. - Create annotated tag `v0.17.1macports` on the packaging commit. - In the `macports-ports` clone, create a fresh branch and commit the new Portfile with message `stimfit: update to 0.17.1`. ## Notes for future agents - [`dist/macosx/macports/insert_checksums.h.in`](dist/macosx/macports/insert_checksums.h.in) was requested in the task description, but the repository currently contains [`dist/macosx/macports/insert_checksums.sh.in`](dist/macosx/macports/insert_checksums.sh.in), which appears to be the actual helper script describing the checksum workflow. - Architect mode can document and plan this workflow, but the actual file edits outside Markdown, git commands, build commands, tag creation, and downstream branch preparation require a switch to Code mode. stimfit-0.17.1/plans/pip-install-feasibility-plan.md000066400000000000000000000223771517235503400224240ustar00rootroot00000000000000# Pip installation feasibility for Stimfit ## Current state summary - The historical packaging entry point in [`setup.py.in`](setup.py.in) is tightly coupled to the old distutils and NumPy-distutils world, hardcodes source lists, probes system libraries manually, and does not reflect the active CMake build graph. - The repository now builds through [`CMakeLists.txt`](CMakeLists.txt) and related CMake modules, with the Python pieces split between the standalone [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) module path and the full GUI application path in [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt) plus [`src/stimfit/py/CMakeLists.txt`](src/stimfit/py/CMakeLists.txt). - The build already distinguishes two product shapes: - [`STF_BUILD_MODULE`](cmake/StimfitOptions.cmake:3) for standalone Python module builds - full native application builds when [`STF_BUILD_MODULE`](cmake/StimfitOptions.cmake:3) is `OFF` - The current presets show that full Stimfit depends on a platform-specific native dependency stack, especially [`wxWidgets`](cmake/StimfitDependencies.cmake:621), HDF5, FFTW, LAPACK, SWIG, and BIOSIG, with extra coupling to [`wxPython`](cmake/StimfitDependencies.cmake:701) when embedded Python is enabled. ## Feasibility assessment ### 1. Pip-installing the full Stimfit application Feasible only in a limited technical sense, and not yet as a robust cross-platform user story. Why: - A `pip install .` flow can build native extension modules and even drive CMake through a backend such as scikit-build-core. - However, the full Stimfit product is not just a Python extension. It is a GUI executable with private native libraries, platform-specific install layouts, bundle handling on macOS, Windows runtime copying rules, and dependency discovery logic that currently assumes a CMake install tree rather than a wheel layout. - Full Stimfit with embedded Python additionally requires that the C++ wx runtime match the wx runtime used by [`wxPython`](cmake/StimfitDependencies.cmake:534), which is explicitly called out as ABI-sensitive in [`cmake/StimfitDependencies.cmake`](cmake/StimfitDependencies.cmake). - On macOS, the preferred output is a `.app` bundle via [`STF_MACOS_APP_BUNDLE`](cmake/StimfitOptions.cmake:7), which does not naturally map to standard wheel installation semantics. - On Windows, the current approach copies Python runtime pieces and selected site-packages into the install tree through options such as [`STF_WINDOWS_COPY_PYTHON_SITE_PACKAGES`](cmake/StimfitOptions.cmake:14), which is the opposite of the normal pip model where the environment owns Python packages. Conclusion: - Full pip installation of Stimfit is not impossible, but it is currently a packaging redesign project, not a thin wrapper around the existing build. - It is much more realistic as a long-term effort for selected targets than as an immediate general replacement for the current platform installers and app-bundle flows. ### 2. Pip-installing the standalone Python file I/O module Feasible and much closer to the repository's current architecture. Why: - [`src/pystfio/CMakeLists.txt`](src/pystfio/CMakeLists.txt) already builds a standalone [`_stfio`](src/pystfio/CMakeLists.txt:22) extension plus Python package files. - [`src/CMakeLists.txt`](src/CMakeLists.txt:11) already routes standalone module builds through [`STF_BUILD_MODULE`](cmake/StimfitOptions.cmake:3). - The install destination is already Python-aware through [`STF_PYTHON_PLATLIB`](cmake/StimfitDependencies.cmake:663) and the package directory layout under [`src/pystfio`](src/pystfio). Conclusion: - The cleanest path toward letting users use Stimfit functionality inside their own Python environment is to package the standalone `stfio` module first. - That path directly addresses the user-value proposition in the task while avoiding the hardest GUI-app packaging problems. ## Main blockers ### Python-module blockers 1. No modern packaging metadata - There is no [`pyproject.toml`](pyproject.toml) yet. - The old [`setup.py.in`](setup.py.in) is obsolete and should not be revived as-is. 2. CMake is not yet shaped as a wheel backend contract - There is no documented wheel-oriented configure preset or backend entry path. - Install destinations are CMake-install centric, not explicitly wheel-staging centric. 3. Native dependency policy is unresolved for wheels - Need a decision on whether Linux wheels target manylinux, musllinux, or source-only sdists. - Need a policy for HDF5, FFTW, LAPACK, and BIOSIG linkage in wheels. 4. SWIG-generated sources add build-time requirements - This is manageable, but must be declared cleanly in packaging metadata and CI. ### Full-application blockers 1. Wheel semantics do not match app semantics - [`stimfit`](CMakeLists.txt:128) is installed as a native executable or `.app` bundle, not as a Python importable package. 2. Embedded Python creates two-way dependency coupling - The app embeds Python while also depending on Python packages like `numpy`, `wx`, and optionally `IPython` as discovered in [`cmake/StimfitDependencies.cmake`](cmake/StimfitDependencies.cmake:653). - A pip-installed app inside an arbitrary environment would be sensitive to that environment's package versions and ABI combinations. 3. wxWidgets and wxPython ABI matching - The repository already documents a hard runtime constraint between C++ wxWidgets and [`wxPython`](cmake/StimfitDependencies.cmake:534). - This is a major blocker for reliable wheel-based distribution of the full GUI app. 4. Platform-specific install transformations - macOS `.app` bundling, Windows runtime DLL copying, and Linux RPATH/install layout logic are all designed around install trees, not wheel contents. ## Candidate strategies ### Strategy A: Full Stimfit wheel now Not recommended. - Would require redefining the product as a pip-installed GUI application with bundled native assets. - High risk across macOS and Windows. - Likely to produce fragile user outcomes, especially around wx and embedded Python. ### Strategy B: `stfio` wheel first, full app remains installer-based Recommended. - Introduce modern Python packaging for the standalone `stfio` module only. - Keep full Stimfit using the current CMake plus installer or bundle approach. - Explicitly document that `pip install stimfit` is not yet the supported distribution path for the GUI app. - This delivers the main practical benefit: users can access Stimfit file I/O from their own Python ecosystem. ### Strategy C: Hybrid future path Potential longer-term direction after Strategy B. - Package `stfio` first. - Refactor the GUI app so that embedding Python becomes optional or is replaced by a clearer plugin boundary. - Evaluate whether a Python launcher plus native helper libraries could make a pip-installed GUI variant workable on one platform at a time. - Treat macOS app-bundle distribution and Windows installer distribution as still-primary even if a developer-oriented pip path emerges later. ## Recommended plan for implementation mode 1. Establish packaging scope - Define the initial deliverable as a wheel and sdist for `stfio`, not the full GUI app. - Mark full-app pip installation as exploratory and unsupported for the first iteration. 2. Add modern packaging metadata - Create [`pyproject.toml`](pyproject.toml) using a CMake-aware backend such as scikit-build-core. - Surface project metadata from [`VERSION`](VERSION) and align package naming. 3. Create a wheel-focused CMake entry path - Ensure a wheel build can force [`STF_BUILD_MODULE`](cmake/StimfitOptions.cmake:3) `ON`. - Keep the build isolated from GUI-only targets in [`src/stimfit/CMakeLists.txt`](src/stimfit/CMakeLists.txt). 4. Define dependency policy - Decide which native libraries are vendored, dynamically linked, or required from the host. - Start with a conservative support matrix if needed, such as sdist-first plus platform wheels only where dependencies are controllable. 5. Remove legacy packaging confusion - Deprecate or delete [`setup.py.in`](setup.py.in) after the replacement path is in place. - Update [`README.md`](README.md) and [`BUILDING.md`](BUILDING.md) with separate guidance for wheel builds versus full-app builds. 6. Add validation - CI should build the standalone package, install it into a fresh virtual environment, and verify `import stfio` plus a minimal smoke test. ## Suggested handoff todo list for implementation - Add modern packaging metadata for the standalone `stfio` Python package - Introduce a wheel-oriented CMake configuration that builds only the standalone module path - Map CMake install outputs to wheel-compatible package layout - Decide and document native dependency handling for wheel and sdist builds - Add CI jobs for build and import smoke tests in isolated Python environments - Retire or clearly mark [`setup.py.in`](setup.py.in) as obsolete - Update user documentation to distinguish `stfio` pip installs from full Stimfit application builds ## Explicit non-goals for the first implementation pass - Do not promise `pip install stimfit` for the full GUI application yet - Do not try to replace macOS `.app` bundling or Windows installer flows in the same change set - Do not preserve the historical distutils-based logic from [`setup.py.in`](setup.py.in) beyond extracting useful source/dependency knowledge stimfit-0.17.1/plans/trace-dark-mode-implementation.md000066400000000000000000000023201517235503400227020ustar00rootroot00000000000000# Trace dark mode implementation notes ## UI entry point - Added a new checkable View menu item: `Dark trace display`. - Event id: `ID_VIEW_DARK_TRACE`. - Handler: `wxStfParentFrame::OnDarkTraceDisplay`. ## Persisted setting - Profile key: `/Settings/ViewDarkTraceDisplay` - Values: `1` (dark on), `0` (dark off) - Default when missing: `1` (dark mode ON) ## Rendering scope - Affects on-screen graph rendering only (`wxStfGraph`). - Print output pens/brushes remain unchanged. ## Palette approach - Implemented explicit light and dark palettes for graph elements. - No direct RGB inversion is used. - Updated items include: - trace pens (active/reference/background) - cursor and measurement overlays - scale bars and text colors - event/annotation indicators - integral brushes - zoom rectangle ## Regression checklist - [ ] Startup with no existing profile key defaults to dark mode. - [ ] Toggling View → Dark trace display updates active graph immediately. - [ ] Scale-bar labels remain readable in dark mode. - [ ] Secondary channel labels are readable and distinct. - [ ] Event arrows, annotation lines, and cursor overlays are visible in dark mode. - [ ] Printing retains legacy light print palette. stimfit-0.17.1/pyproject.toml000066400000000000000000000030171517235503400162010ustar00rootroot00000000000000[build-system] requires = [ "scikit-build-core>=0.10", "swig>=4.0", "numpy>=1.23", ] build-backend = "scikit_build_core.build" [project] name = "stfio" version = "0.17.1" description = "Stimfit standalone Python module for electrophysiology file I/O" readme = "README.md" requires-python = ">=3.9" license = { text = "GPL-2.0-or-later" } authors = [ { name = "Stimfit contributors" }, ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: C++", "Topic :: Scientific/Engineering :: Bio-Informatics", ] dependencies = [ "numpy>=1.23", ] [project.optional-dependencies] plot = ["matplotlib>=3.5"] neo = ["neo>=0.12"] [project.urls] Homepage = "https://github.com/neurodroid/stimfit" Documentation = "https://neurodroid.github.io/stimfit" Repository = "https://github.com/neurodroid/stimfit" [tool.scikit-build] minimum-version = "0.10" build-dir = "build/{wheel_tag}" cmake.version = ">=3.21" cmake.build-type = "Release" wheel.packages = [] sdist.include = [ "VERSION", "cmake/**", "src/**", "README.md", "COPYING", ] [tool.scikit-build.cmake.define] STF_BUILD_MODULE = "ON" STF_ENABLE_PYTHON = "ON" STF_PYTHON_PACKAGE_INSTALL = "ON" Python3_FIND_STRATEGY = "LOCATION" stimfit-0.17.1/setup.py.in000066400000000000000000000207001517235503400154020ustar00rootroot00000000000000raise RuntimeError( "setup.py.in is a legacy distutils-era template and is no longer the supported " "packaging entry point. Use pyproject.toml-based builds for the standalone " "stfio module and the CMake helper scripts for the full Stimfit application." ) import distutils from distutils.core import setup, Extension import sys import os import subprocess import shlex from numpy.distutils import system_info import numpy as np numpy_config_keys = [ 'atlas_blas_info', 'atlas_blas_threads_info', 'atlas_info', 'atlas_threads_info', 'blas_mkl_info', 'blas_opt_info', 'get_info', 'lapack_mkl_info', 'lapack_opt_info', 'mkl_info', 'openblas_info', 'openblas_lapack_info' ] np_define_macros = [] np_extra_compile_args = [] np_extra_link_args = [] np_libraries = [] if not 'linux' in sys.platform: for key in numpy_config_keys: try: np_libraries += np.__config__.get_info(key)['libraries'] except: pass try: np_define_macros += np.__config__.get_info(key)['define_macros'] except: pass try: np_extra_compile_args += np.__config__.get_info(key)[ 'extra_compile_args'] except: pass try: np_extra_link_args += np.__config__.get_info(key)['extra_link_args'] except: pass hdf5_extra_compile_args = [] hdf5_extra_link_args = [] if 'linux' in sys.platform: cmd = shlex.split('pkg-config --cflags hdf5') p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() pkg_config_out = p.stdout.read().decode("utf-8")[:-1] pkg_config_err = p.stderr.read().decode("utf-8")[:-1] if "No package" in pkg_config_err: hdf5_extra_compile_args = ["-I/usr/include/hdf5/serial"] else: hdf5_extra_compile_args = [pkg_config_out] cmd = shlex.split('pkg-config --libs hdf5') p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() pkg_config_out = p.stdout.read().decode("utf-8")[:-1] pkg_config_err = p.stderr.read().decode("utf-8")[:-1] if "No package" in pkg_config_err: hdf5_extra_link_args = [ "-L/usr/lib/x86_64-linux-gnu/", "-L/usr/lib/x86_64-linux-gnu/hdf5/serial"] else: hdf5_extra_link_args = [pkg_config_out] if os.name == "nt": biosig_define_macros = [('WITH_BIOSIG2', None)] biosig_libraries = ['libbiosig2'] biosig_submodule_sources = [] else: biosig_define_macros = [('WITH_BIOSIG2', None), ('WITHOUT_NETWORK', None)] biosig_libraries = ['iconv'] biosig_submodule_sources = [ 'src/biosig/biosig4c++/t210/sopen_abf_read.c', 'src/biosig/biosig4c++/t210/sopen_alpha_read.c', 'src/biosig/biosig4c++/t210/sopen_axg_read.c', 'src/biosig/biosig4c++/t210/sopen_cfs_read.c', 'src/biosig/biosig4c++/t210/sopen_heka_read.c', 'src/biosig/biosig4c++/t210/sopen_igor.c', 'src/biosig/biosig4c++/t210/sopen_scp_read.c', 'src/biosig/biosig4c++/t210/scp-decode.cpp', 'src/biosig/biosig4c++/t220/crc4scp.c', 'src/biosig/biosig4c++/t220/sopen_scp_write.c', 'src/biosig/biosig4c++/test0/sandbox.c', 'src/biosig/biosig4c++/biosig.c', 'src/biosig/biosig4c++/biosig2.c', 'src/biosig/biosig4c++/biosig-network.c', 'src/biosig/biosig4c++/gdftime.c', 'src/biosig/biosig4c++/mdc_ecg_codes.c', 'src/biosig/biosig4c++/physicalunits.c' ] fftw3_libraries = ['fftw3'] if 'libraries' in system_info.get_info('fftw3').keys(): fftw3_libraries = system_info.get_info('fftw3')['libraries'] if os.name == "nt": win_define_macros = [("_WINDOWS", None), ("__STF__", None), ("STFIODLL", None), ("_WIN64", None), ("_WINDLL", None), ("H5_USE_16_API", None), ("_HDF5USEDLL_", None), ("_CRT_SECURE_NO_WARNINGS", None), ("UNICODE", None), ("_UNICODE", None)] win_compile_args = ["/EHsc"] home_dir = os.path.expanduser("~") win_include_dirs = [ os.path.join(home_dir, 'boost'), os.path.join(home_dir, 'biosig', 'include'), os.path.join(home_dir, 'hdf5', 'include'), os.path.join(home_dir, 'fftw'), ] win_library_dirs = [ os.path.join(home_dir, 'hdf5', 'lib'), os.path.join(home_dir, 'biosig', 'lib'), os.path.join(home_dir, 'stimfit', 'dist', 'windows', 'libs'), os.path.join(home_dir, 'fftw'), ] fftw3_libraries = ['libfftw3-3'] np_libraries = ['BLAS', 'clapack', 'libf2c'] win_libraries = ['user32'] win_link_args = ["/SUBSYSTEM:WINDOWS", "/LARGEADDRESSAWARE", "/OPT:REF", "/OPT:ICF", "/DYNAMICBASE", "/NXCOMPAT", "/MACHINE:X64", "/NODEFAULTLIB:\"libc.lib\"", "/NODEFAULTLIB:\"libcmt.lib\""] win_data_files = [( distutils.sysconfig.get_python_lib(), [ os.path.join(home_dir, 'biosig', 'lib', 'libbiosig2.dll'), os.path.join(home_dir, 'fftw', 'libfftw3-3.dll'), ] )] else: win_define_macros = [] win_include_dirs = [] win_compile_args = [] win_library_dirs = [] win_libraries = [] win_link_args = [] win_data_files = [] stfio_module = Extension( '_stfio', swig_opts=['-c++'], library_dirs=win_library_dirs, libraries=['hdf5', 'hdf5_hl'] + fftw3_libraries + np_libraries + biosig_libraries + win_libraries, define_macros=np_define_macros + biosig_define_macros + win_define_macros, extra_compile_args=np_extra_compile_args + hdf5_extra_compile_args + win_compile_args, extra_link_args=np_extra_link_args + hdf5_extra_link_args + win_link_args, include_dirs=win_include_dirs, sources=[ 'src/libstfio/abf/abflib.cpp', 'src/libstfio/abf/axon/AxAbfFio32/Oldheadr.cpp', 'src/libstfio/abf/axon/AxAbfFio32/abferror.cpp', 'src/libstfio/abf/axon/AxAbfFio32/abffiles.cpp', 'src/libstfio/abf/axon/AxAbfFio32/abfheadr.cpp', 'src/libstfio/abf/axon/AxAbfFio32/abfhwave.cpp', 'src/libstfio/abf/axon/AxAbfFio32/abfutil.cpp', 'src/libstfio/abf/axon/AxAbfFio32/csynch.cpp', 'src/libstfio/abf/axon/AxAbfFio32/filedesc.cpp', 'src/libstfio/abf/axon/AxAbfFio32/msbincvt.cpp', 'src/libstfio/abf/axon/AxAtfFio32/axatffio32.cpp', 'src/libstfio/abf/axon/AxAtfFio32/fileio2.cpp', 'src/libstfio/abf/axon/Common/FileIO.cpp', 'src/libstfio/abf/axon/Common/FileReadCache.cpp', 'src/libstfio/abf/axon/Common/unix.cpp', 'src/libstfio/abf/axon2/ProtocolReaderABF2.cpp', 'src/libstfio/abf/axon2/SimpleStringCache.cpp', 'src/libstfio/abf/axon2/abf2headr.cpp', 'src/libstfio/atf/atflib.cpp', 'src/libstfio/axg/AxoGraph_ReadWrite.cpp', 'src/libstfio/axg/axglib.cpp', 'src/libstfio/axg/byteswap.cpp', 'src/libstfio/axg/fileUtils.cpp', 'src/libstfio/axg/stringUtils.cpp', 'src/libstfio/biosig/biosiglib.cpp', 'src/libstfio/cfs/cfs.c', 'src/libstfio/cfs/cfslib.cpp', 'src/libstfio/channel.cpp', 'src/libstfio/hdf5/hdf5lib.cpp', 'src/libstfio/igor/CrossPlatformFileIO.c', 'src/libstfio/igor/WriteWave.c', 'src/libstfio/igor/igorlib.cpp', 'src/libstfio/intan/common.cpp', 'src/libstfio/intan/intanlib.cpp', 'src/libstfio/intan/streams.cpp', 'src/libstfio/recording.cpp', 'src/libstfio/section.cpp', 'src/libstfio/stfio.cpp', 'src/libstfnum/fit.cpp', 'src/libstfnum/funclib.cpp', 'src/libstfnum/levmar/Axb.c', 'src/libstfnum/levmar/lm.c', 'src/libstfnum/levmar/lmbc.c', 'src/libstfnum/levmar/misc.c', 'src/libstfnum/measure.cpp', 'src/libstfnum/stfnum.cpp', 'src/pystfio/pystfio.cxx', 'src/pystfio/pystfio.i', ] + biosig_submodule_sources) setup(name='stfio', version='@PACKAGE_VERSION@', description='stfio module', include_dirs=system_info.default_include_dirs + [ np.get_include()], scripts=[], package_dir={'stfio': 'src/pystfio'}, packages=['stfio'], data_files=win_data_files, ext_modules=[stfio_module]) stimfit-0.17.1/src/000077500000000000000000000000001517235503400140535ustar00rootroot00000000000000stimfit-0.17.1/src/CMakeLists.txt000066400000000000000000000005751517235503400166220ustar00rootroot00000000000000include_guard(DIRECTORY) if(STF_WITH_BIOSIG AND STF_BIOSIG_USE_SUBMODULE) add_subdirectory(libbiosig) add_library(stimfit::biosig ALIAS stimfit_biosig) endif() add_subdirectory(libstfio) add_subdirectory(libstfnum) if(STF_BUILD_MODULE) add_subdirectory(pystfio) else() add_subdirectory(stimfit) if(STF_ENABLE_PYTHON) add_subdirectory(stimfit/py) endif() endif() stimfit-0.17.1/src/biosig/000077500000000000000000000000001517235503400153275ustar00rootroot00000000000000stimfit-0.17.1/src/libbiosig/000077500000000000000000000000001517235503400160165ustar00rootroot00000000000000stimfit-0.17.1/src/libbiosig/CMakeLists.txt000066400000000000000000000126621517235503400205650ustar00rootroot00000000000000include_guard(DIRECTORY) set(_stf_awk_hints) if(WIN32) list(APPEND _stf_awk_hints "C:/Program Files/Git/usr/bin" "C:/Program Files (x86)/Git/usr/bin" "$ENV{LocalAppData}/Programs/Git/usr/bin" ) endif() find_program(STF_AWK_EXECUTABLE NAMES gawk awk HINTS ${_stf_awk_hints} REQUIRED ) unset(_stf_awk_hints) set(STF_BIOSIG4CPP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../biosig/biosig4c++) set(STF_BIOSIG_EXTERN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../biosig/biosig4matlab/doc) set(_stf_biosig_binary_dir ${CMAKE_CURRENT_BINARY_DIR}) if(WIN32) set(_stf_shell_executable cmd) set(_stf_shell_flag /C) else() set(_stf_shell_executable /bin/sh) set(_stf_shell_flag -c) endif() set(_stf_biosig_generated_eventcodes ${_stf_biosig_binary_dir}/eventcodes.i) set(_stf_biosig_generated_eventcodegroups ${_stf_biosig_binary_dir}/eventcodegroups.i) set(_stf_biosig_generated_units ${_stf_biosig_binary_dir}/units.i) set(_stf_biosig_generated_annexb ${_stf_biosig_binary_dir}/11073-10102-AnnexB.i) add_custom_command( OUTPUT ${_stf_biosig_generated_eventcodes} ${_stf_biosig_generated_eventcodegroups} COMMAND ${STF_AWK_EXECUTABLE} -f ${STF_BIOSIG4CPP_DIR}/eventcodes.awk ${STF_BIOSIG_EXTERN_DIR}/eventcodes.txt DEPENDS ${STF_BIOSIG4CPP_DIR}/eventcodes.awk ${STF_BIOSIG_EXTERN_DIR}/eventcodes.txt WORKING_DIRECTORY ${_stf_biosig_binary_dir} ) add_custom_command( OUTPUT ${_stf_biosig_generated_units} COMMAND ${CMAKE_COMMAND} -E rm -f ${_stf_biosig_generated_units} COMMAND ${_stf_shell_executable} ${_stf_shell_flag} "\"${STF_AWK_EXECUTABLE}\" -f \"${STF_BIOSIG4CPP_DIR}/units.awk\" \"${STF_BIOSIG_EXTERN_DIR}/units.csv\" > \"${_stf_biosig_generated_units}\"" DEPENDS ${STF_BIOSIG4CPP_DIR}/units.awk ${STF_BIOSIG_EXTERN_DIR}/units.csv WORKING_DIRECTORY ${_stf_biosig_binary_dir} VERBATIM ) add_custom_command( OUTPUT ${_stf_biosig_generated_annexb} COMMAND ${CMAKE_COMMAND} -E rm -f ${_stf_biosig_generated_annexb} COMMAND ${_stf_shell_executable} ${_stf_shell_flag} "\"${STF_AWK_EXECUTABLE}\" -f \"${STF_BIOSIG4CPP_DIR}/annotatedECG.awk\" \"${STF_BIOSIG_EXTERN_DIR}/11073-10102-AnnexB.txt\" > \"${_stf_biosig_generated_annexb}\"" DEPENDS ${STF_BIOSIG4CPP_DIR}/annotatedECG.awk ${STF_BIOSIG_EXTERN_DIR}/11073-10102-AnnexB.txt WORKING_DIRECTORY ${_stf_biosig_binary_dir} VERBATIM ) add_custom_target(stimfit_biosig_generated DEPENDS ${_stf_biosig_generated_eventcodes} ${_stf_biosig_generated_eventcodegroups} ${_stf_biosig_generated_units} ${_stf_biosig_generated_annexb} ) set(_stf_biosig_sources ${STF_BIOSIG4CPP_DIR}/t210/sopen_abf_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_acqbiopac.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_alpha_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_axg_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_cadwell_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_cfs_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_fiff.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_heka_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_igor.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_nicolet.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_rhd2000_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_scp_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_biosigdump_read.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_sqlite.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_hdf5.c ${STF_BIOSIG4CPP_DIR}/t210/sopen_matio.c ${STF_BIOSIG4CPP_DIR}/t210/scp-decode.cpp ${STF_BIOSIG4CPP_DIR}/t220/crc4scp.c ${STF_BIOSIG4CPP_DIR}/t220/sopen_scp_write.c ${STF_BIOSIG4CPP_DIR}/t230/sopen_hl7aecg.cpp ${STF_BIOSIG4CPP_DIR}/test0/sandbox.c ${STF_BIOSIG4CPP_DIR}/XMLParser/tinystr.cpp ${STF_BIOSIG4CPP_DIR}/XMLParser/tinyxml.cpp ${STF_BIOSIG4CPP_DIR}/XMLParser/tinyxmlerror.cpp ${STF_BIOSIG4CPP_DIR}/XMLParser/tinyxmlparser.cpp ${STF_BIOSIG4CPP_DIR}/biosig.c ${STF_BIOSIG4CPP_DIR}/biosig2.c ${STF_BIOSIG4CPP_DIR}/gdftime.c ${STF_BIOSIG4CPP_DIR}/mdc_ecg_codes.c ${STF_BIOSIG4CPP_DIR}/physicalunits.c ) if(WIN32) list(APPEND _stf_biosig_sources ${STF_BIOSIG4CPP_DIR}/win32/getdelim.c ${STF_BIOSIG4CPP_DIR}/win32/getline.c ${STF_BIOSIG4CPP_DIR}/win32/getlogin.c ) elseif(APPLE) list(APPEND _stf_biosig_sources ${STF_BIOSIG4CPP_DIR}/win32/getdelim.c ${STF_BIOSIG4CPP_DIR}/win32/getline.c ) endif() add_library(stimfit_biosig STATIC ${_stf_biosig_sources}) add_dependencies(stimfit_biosig stimfit_biosig_generated) stf_apply_macos_runtime_policy(stimfit_biosig) target_compile_definitions(stimfit_biosig PUBLIC WITH_BIOSIG WITH_ZLIB WITHOUT_NETWORK) target_include_directories( stimfit_biosig PUBLIC ${_stf_biosig_binary_dir} ${STF_BIOSIG4CPP_DIR} ${STF_BIOSIG4CPP_DIR}/t210 ) target_link_libraries(stimfit_biosig PUBLIC stimfit_config) find_package(ZLIB REQUIRED) target_link_libraries(stimfit_biosig PUBLIC ZLIB::ZLIB) if(APPLE) find_package(Iconv REQUIRED) target_link_libraries(stimfit_biosig PUBLIC Iconv::Iconv) endif() set_target_properties(stimfit_biosig PROPERTIES OUTPUT_NAME biosig2) if(APPLE AND STF_MACOS_APP_BUNDLE) set(_stf_biosig_install_libdir "stimfit.app/Contents/lib/stimfit") else() set(_stf_biosig_install_libdir "${CMAKE_INSTALL_LIBDIR}/stimfit") endif() if(APPLE AND STF_MACOS_APP_BUNDLE) install(TARGETS stimfit_biosig RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${_stf_biosig_install_libdir} ) else() install(TARGETS stimfit_biosig RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${_stf_biosig_install_libdir} ARCHIVE DESTINATION ${_stf_biosig_install_libdir} ) endif() stimfit-0.17.1/src/libstfio/000077500000000000000000000000001517235503400156665ustar00rootroot00000000000000stimfit-0.17.1/src/libstfio/CMakeLists.txt000066400000000000000000000057751517235503400204440ustar00rootroot00000000000000include_guard(DIRECTORY) set(STF_STFIO_SOURCES stfio.cpp cfs/cfslib.cpp cfs/cfs.c hdf5/hdf5lib.cpp abf/abflib.cpp abf/axon/AxAbfFio32/abffiles.cpp abf/axon/AxAbfFio32/csynch.cpp abf/axon/AxAbfFio32/filedesc.cpp abf/axon/Common/FileReadCache.cpp abf/axon/Common/FileIO.cpp abf/axon/AxAbfFio32/abfheadr.cpp abf/axon/AxAbfFio32/abfhwave.cpp abf/axon/AxAbfFio32/Oldheadr.cpp abf/axon/AxAbfFio32/abfutil.cpp abf/axon/AxAbfFio32/msbincvt.cpp abf/axon/Common/unix.cpp abf/axon/AxAbfFio32/abferror.cpp abf/axon/AxAtfFio32/axatffio32.cpp abf/axon/AxAtfFio32/fileio2.cpp abf/axon2/ProtocolReaderABF2.cpp abf/axon2/SimpleStringCache.cpp abf/axon2/abf2headr.cpp atf/atflib.cpp igor/igorlib.cpp igor/CrossPlatformFileIO.c igor/WriteWave.c intan/common.cpp intan/intanlib.cpp intan/streams.cpp ) add_library( stfio_containers annotation.cpp section.cpp channel.cpp recording.cpp ) stf_apply_macos_runtime_policy(stfio_containers) target_link_libraries(stfio_containers PUBLIC stimfit_config) set_target_properties(stfio_containers PROPERTIES OUTPUT_NAME stfio_containers) if(NOT STF_WITH_BIOSIG) list(APPEND STF_STFIO_SOURCES axg/axglib.cpp axg/AxoGraph_ReadWrite.cpp axg/fileUtils.cpp axg/stringUtils.cpp axg/byteswap.cpp heka/hekalib.cpp ) endif() if(STF_WITH_BIOSIG) list(APPEND STF_STFIO_SOURCES biosig/biosiglib.cpp) endif() add_library(stfio ${STF_STFIO_SOURCES}) stf_apply_macos_runtime_policy(stfio) if(MSVC) target_compile_definitions(stfio_containers PRIVATE STFIODLL) target_compile_definitions(stfio PRIVATE STFIODLL) endif() target_link_libraries(stfio PUBLIC stimfit_config stfio_containers stimfit::hdf5) if(TARGET stimfit::biosig) target_link_libraries(stfio PUBLIC stimfit::biosig) endif() set_target_properties(stfio PROPERTIES OUTPUT_NAME stfio) if(APPLE AND STF_MACOS_APP_BUNDLE) set(_stf_stfio_install_libdir "stimfit.app/Contents/lib/stimfit") else() set(_stf_stfio_install_libdir "${CMAKE_INSTALL_LIBDIR}/stimfit") endif() if(APPLE AND STF_MACOS_APP_BUNDLE) install(TARGETS stfio RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} LIBRARY DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ) install(TARGETS stfio_containers RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} LIBRARY DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ) else() install(TARGETS stfio RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} LIBRARY DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ARCHIVE DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ) install(TARGETS stfio_containers RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${STF_COMPONENT_CORE} LIBRARY DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ARCHIVE DESTINATION ${_stf_stfio_install_libdir} COMPONENT ${STF_COMPONENT_CORE} ) endif() stimfit-0.17.1/src/libstfio/abf/000077500000000000000000000000001517235503400164165ustar00rootroot00000000000000stimfit-0.17.1/src/libstfio/abf/abflib.cpp000077500000000000000000000456241517235503400203570ustar00rootroot00000000000000// 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 (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include #include #include #include #include "./axon/Common/axodefn.h" #include "./axon/AxAbfFio32/abffiles.h" #include "./axon2/ProtocolReaderABF2.hpp" #include "./abflib.h" #include "../recording.h" namespace stfio { std::string ABF1Error(const std::string& fName, int nError); } std::string stfio::ABF1Error(const std::string& fName, int nError) { UINT uMaxLen=320; std::vector errorMsg(uMaxLen); // local copy: std::string wxCp = fName; ABF_BuildErrorText(nError, wxCp.c_str(),&errorMsg[0], uMaxLen ); return std::string( &errorMsg[0] ); } void stfio::importABFFile(const std::string &fName, Recording &ReturnData, ProgressInfo& progDlg) { ABF2_FileInfo fileInfo; // Open file: #if !defined(_MSC_VER) FILE* fh = fopen( fName.c_str(), "r" ); if (!fh) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); throw std::runtime_error(errorMsg); } // attempt to read first chunk of data: int res = fseek( fh, 0, SEEK_SET); if (res != 0) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); fclose(fh); throw std::runtime_error(errorMsg); } res = fread( &fileInfo, sizeof( fileInfo ), 1, fh ); if (res != 1) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); fclose(fh); throw std::runtime_error(errorMsg); } fclose(fh); #else HANDLE hFile = CreateFileA(fName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); CloseHandle(hFile); throw std::runtime_error(errorMsg); } // Read one character less than the buffer size to save room for // the terminating NULL character. DWORD dwBytesRead = 0; if( FALSE == ReadFile(hFile, &fileInfo, sizeof( fileInfo ), &dwBytesRead, NULL) ) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); CloseHandle(hFile); throw std::runtime_error(errorMsg); } if (dwBytesRead <= 0) { std::string errorMsg("Exception while calling importABFFile():\nCouldn't open file"); CloseHandle(hFile); throw std::runtime_error(errorMsg); } CloseHandle(hFile); #endif if (CABF2ProtocolReader::CanOpen( (void*)&fileInfo, sizeof(fileInfo) )) { importABF2File( std::string(fName.c_str()), ReturnData, progDlg ); } else { importABF1File( std::string(fName.c_str()), ReturnData, progDlg ); } } void stfio::importABF2File(const std::string &fName, Recording &ReturnData, ProgressInfo& progDlg) { CABF2ProtocolReader abf2; if (!abf2.Open( fName.c_str() )) { std::string errorMsg("Exception while calling importABF2File():\nCouldn't open file"); throw std::runtime_error(errorMsg); abf2.Close(); } #ifdef _STFDEBUG else { std::cout << "Axon binary file (v2) successfully opened" << std::endl; } #endif int nError = 0; if (!abf2.Read( &nError )) { std::string errorMsg("Exception while calling importABF2File():\nCouldn't read file"); throw std::runtime_error(errorMsg); abf2.Close(); } const ABF2FileHeader* pFH = abf2.GetFileHeader(); #ifdef _STFDEBUG std::cout << "ABF2 file information" << std::endl << "File version " << pFH->fFileVersionNumber << std::endl << "Header version " << pFH->fHeaderVersionNumber << std::endl << "Data format " << pFH->nDataFormat << std::endl << "Number of channels " << pFH->nADCNumChannels << std::endl << "Number of sweeps " << pFH->lActualEpisodes << std::endl << "Sampling points per sweep " << pFH->lNumSamplesPerEpisode << std::endl << "File type " << pFH->nOperationMode << std::endl; #endif int numberChannels = pFH->nADCNumChannels; ABFLONG numberSections = pFH->lActualEpisodes; ABFLONG finalSections = numberSections; int hFile = abf2.GetFileNumber(); bool gapfree = (pFH->nOperationMode == ABF2_GAPFREEFILE); if (gapfree) { UINT uMaxSamples = pFH->lNumSamplesPerEpisode / numberChannels; DWORD dwMaxEpi; if (!ABF2_SetChunkSize(hFile,abf2.GetFileHeaderW(),&uMaxSamples,&dwMaxEpi,&nError)) { std::ostringstream errorMsg; errorMsg << "Exception while calling ABF2_SetChunkSize() " << "\n" << ABF1Error(fName, nError); ABF_Close(hFile,&nError); throw std::runtime_error(errorMsg.str()); } finalSections = 1; } for (int nChannel=0; nChannel < numberChannels; ++nChannel) { int progbar = (int)(((double)nChannel/(double)numberChannels)*100.0); progDlg.Update(progbar, "Memory allocation"); ABFLONG grandsize = pFH->lNumSamplesPerEpisode / numberChannels; std::ostringstream label; label << fName << ", gapfree section"; if (gapfree) { grandsize = pFH->lActualAcqLength / numberChannels; Vector_double test_size(0); ABFLONG maxsize = static_cast(test_size.max_size()) #if defined(_MSC_VER) // doesn't seem to return the correct size on Windows. ; #else ; #endif if (grandsize <= 0 || grandsize >= maxsize) { progDlg.Update(progbar, "Gapfree file is too large for a single section." \ "It will be segmented.\nFile opening may be very slow."); gapfree=false; grandsize = pFH->lNumSamplesPerEpisode / numberChannels; finalSections=numberSections; } } Channel TempChannel(finalSections, grandsize); Section TempSectionGrand(grandsize, label.str()); for (int nEpisode=1; nEpisode<=numberSections;++nEpisode) { int episodeProgbar = // Channel contribution: (int)(((double)nChannel/(double)numberChannels)*100.0+ // Section contribution: (double)(nEpisode-1)/(double)numberSections*(100.0/numberChannels)); std::ostringstream progStr; progStr << "Reading channel #" << nChannel + 1 << " of " << numberChannels << ", Section #" << nEpisode << " of " << numberSections; progDlg.Update(episodeProgbar, progStr.str()); UINT uNumSamples = 0; if (gapfree) { if (nEpisode == numberSections) { uNumSamples = grandsize - (nEpisode-1) * pFH->lNumSamplesPerEpisode / numberChannels; #ifdef _STFDEBUG std::cout << "Last section size " << uNumSamples << std::endl; #endif } else { uNumSamples = pFH->lNumSamplesPerEpisode / numberChannels; } } else { if (!ABF2_GetNumSamples(hFile, pFH, nEpisode, &uNumSamples, &nError)) { std::ostringstream errorMsg; errorMsg << "Exception while calling ABF2_GetNumSamples() " << "for episode # " << nEpisode << "\n" << ABF1Error(fName, nError); ReturnData.resize(0); ABF_Close(hFile,&nError); throw std::runtime_error(errorMsg.str()); } } // Use a vector here because memory allocation can // be controlled more easily: // request memory: if (uNumSamples > 0) { Vector_float TempSection(uNumSamples, 0.0); unsigned int uNumSamplesW; if (!ABF2_ReadChannel(hFile, pFH, pFH->nADCSamplingSeq[nChannel],nEpisode,TempSection, &uNumSamplesW,&nError)) { std::string errorMsg("Exception while calling ABF2_ReadChannel():\n"); errorMsg += ABF1Error(fName, nError); ReturnData.resize(0); ABF_Close(hFile,&nError); throw std::runtime_error(errorMsg); } if (uNumSamples!=uNumSamplesW && !gapfree) { ABF_Close(hFile,&nError); throw std::runtime_error("Exception while calling ABF2_ReadChannel()"); } if (!gapfree) { std::ostringstream sectionLabel; sectionLabel << fName << ", Section # " << nEpisode; Section TempSectionT(TempSection.size(),sectionLabel.str()); std::copy(TempSection.begin(),TempSection.end(),&TempSectionT[0]); try { TempChannel.InsertSection(TempSectionT,nEpisode-1); } catch (...) { ABF_Close(hFile,&nError); throw; } } else { if ((nEpisode-1) * pFH->lNumSamplesPerEpisode / numberChannels + TempSection.size() <= TempSectionGrand.size()) { std::copy(TempSection.begin(),TempSection.end(), &TempSectionGrand[(nEpisode-1) * pFH->lNumSamplesPerEpisode / numberChannels]); } #ifdef _STFDEBUG else { std::cout << "Overflow while copying gapfree sections" << std::endl; } #endif } } else { TempChannel.resize(TempChannel.size()-1); } } if (gapfree) { try { TempChannel.InsertSection(TempSectionGrand,0); } catch (...) { ABF_Close(hFile,&nError); throw; } } try { if ((int)ReturnData.size()sADCChannelName[pFH->nADCSamplingSeq[nChannel]] ); if (channel_name.find(" ")sADCUnits[pFH->nADCSamplingSeq[nChannel]] ); if (channel_units.find(" ") < channel_units.size()) { channel_units.erase(channel_units.begin() + channel_units.find(" "),channel_units.end()); } ReturnData[nChannel].SetYUnits(channel_units); } if (!ABF_Close(hFile,&nError)) { std::string errorMsg("Exception in importABFFile():\n"); errorMsg += ABF1Error(fName,nError); ReturnData.resize(0); throw std::runtime_error(errorMsg); } ReturnData.SetXScale((double)(pFH->fADCSequenceInterval/1000.0)); std::string comment("Created with "); comment += std::string( pFH->sCreatorInfo ); ReturnData.SetComment(comment); ldiv_t year=ldiv(pFH->uFileStartDate,(ABFLONG)10000); ldiv_t month=ldiv(year.rem,(ABFLONG)100); ldiv_t hours=ldiv(pFH->uFileStartTimeMS/1000,(ABFLONG)3600); ldiv_t minutes=ldiv(hours.rem,(ABFLONG)60); // Recording::SetDateTime expects the year to be passed as the number of years since 1900, and the month // as 0 = Jan ... 11 = Dec ReturnData.SetDateTime(year.quot-1900, month.quot-1, month.rem, hours.quot, minutes.quot, minutes.rem); abf2.Close(); } void stfio::importABF1File(const std::string &fName, Recording &ReturnData, ProgressInfo& progDlg) { int hFile = 0; ABFFileHeader FH; UINT uMaxSamples = 0; DWORD dwMaxEpi = 0; int nError = 0; if (!ABF_ReadOpen(fName.c_str(), &hFile, ABF_DATAFILE, &FH, &uMaxSamples, &dwMaxEpi, &nError)) { std::string errorMsg("Exception while calling ABF_ReadOpen():\n"); errorMsg+=ABF1Error(fName,nError); ABF_Close(hFile,&nError); throw std::runtime_error(errorMsg); } /* if (!ABF_HasData(hFile,pFH)) { std::string errorMsg("Exception while calling ABF_ReadOpen():\n" "File is empty"); throw std::runtime_error(errorMsg); } */ #ifdef _STFDEBUG else { std::cout << "Axon binary file (v1) successfully opened" << std::endl; } #endif int numberChannels=FH.nADCNumChannels; ABFLONG numberSections=FH.lActualEpisodes; if ((DWORD)numberSections>dwMaxEpi) { ABF_Close(hFile,&nError); throw std::runtime_error("Error while calling stfio::importABFFile():\n" "lActualEpisodes>dwMaxEpi"); } for (int nChannel=0;nChannel #if ( __WORDSIZE == 64 ) || defined (__APPLE__) #define ABFLONG int #else #define ABFLONG long #endif #endif /* INC_AXABFFIO32_H */ stimfit-0.17.1/src/libstfio/abf/axon/AxAbfFio32/Oldheadr.cpp000077500000000000000000002261351517235503400234110ustar00rootroot00000000000000//*********************************************************************************************** // // Copyright (c) 1993-1997 Axon Instruments. // All rights reserved. // Permission is granted to freely to use, modify and copy the code in this file. // //*********************************************************************************************** // This is OLDHEADR.CPP; the routines that cope with reading the data file // parameters block for old AXON pCLAMP binary file formats. // // An ANSI C compiler should be used for compilation. // Compile with the large memory model option. // (e.g. CL -c -AL ABFHEADR.C) #include "../Common/wincpp.hpp" #include "abffiles.h" // header definition & constants #include "oldheadr.h" // prototypes for this file. #include "abfoldnx.h" // Indices for old pCLAMP files (< V6.0) #include "msbincvt.h" // Conversion routines MSBIN <==> IEEE float #include "abfutil.h" // Utility functions. #include #include #include #define ABF_OLDPARAMSIZE 260 // size of old acquisition parameter array //#define (sz) OemToCharBuff(sz, sz, sizeof(sz)) #pragma pack(1) // pack structure on byte boundaries struct ABFTopOfFile { ABFLONG lFileSignature; float fFileVersionNumber; short nOperationMode; ABFLONG lActualAcqLength; short nNumPointsIgnored; ABFLONG lActualEpisodes; ABFLONG lFileStartDate; ABFLONG lFileStartTime; ABFLONG lStopwatchTime; float fHeaderVersionNumber; short nFileType; short nMSBinFormat; }; typedef union { struct ABFTopOfFile ABF; float Param[10]; } TopOfFile; #pragma pack() // return to default packing // // #defines for diagnosing ATF files. // /* #ifdef BIGENDIAN #error Big endian computers are no longer supported by ABF. #endif */ #define ATF_MASK 0x00FFFFFF #define ATF_SIGNATURE 0x00465441 // "FTA" //----------------------------------------------------------------------------------------------- // Macros and functions to deal with returning error return codes through a pointer if given. #define ERRORRETURN(p, e) return ErrorReturn(p, e); static BOOL ErrorReturn(int *pnError, int nErrorNum) { if (pnError) *pnError = nErrorNum; return FALSE; } //=============================================================================================== // FUNCTION: IsValidFloat // PURPOSE: Check if the number is a valid float, to protect against math exceptions. // RETURNS: TRUE = number is a valid float. // static BOOL IsValidFloat( double dNumber, float fMaxMantissa, int nMaxExponent ) { int nExponent = 0; double dMantissa = 0.0; // Get the mantissa and exponent. dMantissa = frexp( dNumber, &nExponent ); // Check they are OK. if( dMantissa > fMaxMantissa || nExponent > nMaxExponent ) return FALSE; return TRUE; } //=============================================================================================== // FUNCTION: GetFileVersion // PURPOSE: Find out the version number and data format of a data file, given a DOS file handle. // RETURNS: TRUE = File is an ABF file, file version retrieved OK. // BOOL OLDH_GetFileVersion( FILEHANDLE hFile, UINT *puFileType, float *pfFileVersion, BOOL *pbMSBinFormat) { TopOfFile TOF; *puFileType = 0L; *pfFileVersion = 0.0F; *pbMSBinFormat = FALSE; // Seek to the start of the file. #if defined(_MSC_VER) SetFilePointer(hFile, 0L, NULL, FILE_BEGIN); #else c_SetFilePointer(hFile, 0L, NULL, FILE_BEGIN); #endif // Read top of file, to determine the file version if (!ABFU_ReadFile(hFile, &TOF, sizeof(TOF))) return FALSE; #ifdef _STFDEBUG std::cout << "Detected ABF Version " << TOF.ABF.fFileVersionNumber << std::endl; #endif // If the file is byte swapped, return as invalid file. // Big-endian computers are no longer supported. if (TOF.ABF.lFileSignature == ABF_REVERSESIGNATURE) return FALSE; // Check if it is an ABF file. if (TOF.ABF.lFileSignature == ABF_NATIVESIGNATURE) { *puFileType = ABF_ABFFILE; *pfFileVersion = TOF.ABF.fFileVersionNumber; return TRUE; } // check for AXON ATF text file format. if ((TOF.ABF.lFileSignature & ATF_MASK) == ATF_SIGNATURE) return FALSE; // Now we must determine if the file is an old pCLAMP file (< V6.0). // Check whether the file is in old MS binary format. This was a floating point format // with a different exponent and mantissa length than IEEE. // Make sure the experiment type and file version are valid floating point numbers. if( !IsValidFloat( TOF.Param[F53_EXPERIMENTTYPE], 10.0F, 4 ) || !IsValidFloat( TOF.Param[F53_FILEVERSIONNUMBER], 10.0F, 4 ) || !IsValidFloat( TOF.Param[F53_ADCNUMCHANNELS], 10.0F, 4 ) || !IsValidFloat( TOF.Param[F53_SAMPLESPEREPISODE], 10.0F, 50 ) ) return FALSE; if( !IsValidFloat( TOF.Param[F53_FILEVERSIONNUMBER], 10.0F, 4 ) ) return FALSE; if ((TOF.Param[F53_EXPERIMENTTYPE] < 0.0F) || (TOF.Param[F53_FILEVERSIONNUMBER] < 0.0F)) { for (int i=0; i < 10; i++) fMSBintoIeee(&(TOF.Param[i]), &(TOF.Param[i])); *pbMSBinFormat = TRUE; } // Set type for very old data files if (TOF.Param[F53_EXPERIMENTTYPE] == 0.0F) TOF.Param[F53_EXPERIMENTTYPE] = 10.0F; // Set return file type. if (TOF.Param[F53_EXPERIMENTTYPE] == 1.0F) *puFileType = ABF_CLAMPEX; else if (TOF.Param[F53_EXPERIMENTTYPE] == 10.0F) *puFileType = ABF_FETCHEX; else return FALSE; // Check for minimal sanity in critical parameters. if ((TOF.Param[F53_ADCNUMCHANNELS] < 1.0F) || (TOF.Param[F53_ADCNUMCHANNELS] > 8.0F) || (TOF.Param[F53_SAMPLESPEREPISODE] < 0.0F) || (TOF.Param[F53_FILEVERSIONNUMBER] < 0.0F) || (TOF.Param[F53_FILEVERSIONNUMBER] > 10.0F) ) return FALSE; // Return the file version. *pfFileVersion = TOF.Param[F53_FILEVERSIONNUMBER]; return TRUE; } //============================================================================================== // FUNCTION: CorrectDACFilePath // PURPOSE: Combines the old DACFileName with the old DACFilePath into the new DACFilePath. // static void CorrectDACFilePath(ABFFileHeader *pFH) { // Get the old DACFileName from the header. char szOldName[ABF_OLDDACFILENAMELEN+1]; ABFU_GetABFString(szOldName, sizeof(szOldName), pFH->_sDACFilePath, ABF_OLDDACFILENAMELEN); // Split it into filename and extension components. char szName[_MAX_FNAME]; char szExt[_MAX_EXT]; _splitpath( szOldName, NULL, NULL, szName, szExt ); // pCLAMP 6 substituted DAT for a non-existent extension. if (szExt[0] == '\0') strcpy(szExt, ".DAT"); // Get the old DACFilePath from the header. char szOldPath[ABF_OLDDACFILEPATHLEN+1]; ABFU_GetABFString(szOldPath, sizeof(szOldPath), pFH->_sDACFilePath+ABF_OLDDACFILENAMELEN, ABF_OLDDACFILEPATHLEN); // Build the complete path and set it in the header again. char szPath[_MAX_PATH]; _makepath( szPath, NULL, szOldPath, szName, szExt ); ABF_SET_STRING(pFH->_sDACFilePath, szPath); } //=============================================================================================== // FUNCTION: CorrectDACScaling // PURPOSE: Correct the DAC scaling factors in the header. // NOTES: Previously the DAC file scale factor scaled 2-byte ADC values // from the DAC file directly into DAC values for output. // Now the scale and offset convert the UU values in the input file // to UU output values, so old scale & offset values must be adjusted. // static void CorrectDACScaling(ABFFileHeader *pFH) { // Now: // DACuu = ADCuu x S + O // // Previously: // DAC = ADC x S + O // // DACuu = (ADC x S + O) x Sdac + Odac // DACuu = ((ADCuu - Oadc)/Sadc x S + O) x Sdac + Odac // DACuu = ADCuu x (S/Sadc x Sdac) // + Odac + O x Sdac - Oadc x (S/Sadc x Sdac) // // => fNewScale = fOldScale * Sdac / Sadc // => fNewOffset = fOldOffset * Sdac + Odac // - Oadc x fNewScale // Initialize a header structure to use on the DAC file. ABFFileHeader DH; ABFH_Initialize(&DH); // Try and open the file as an ABF binary file, if this fails, // just return, the user will have to sort things out for themselves. { char szFilename[_MAX_PATH]; ABF_GET_STRING(szFilename, pFH->_sDACFilePath, sizeof(szFilename)); UINT uMaxSamples = 0; DWORD dwMaxEpi = 0; int hFile; if (!ABF_ReadOpen(szFilename, &hFile, ABF_DATAFILE, // if (!ABF_ReadOpen(wca.cMB2WX(szFilename), &hFile, ABF_DATAFILE, &DH, &uMaxSamples, &dwMaxEpi, NULL)) return; ABF_Close(hFile, NULL); } // Check that the channel was acquired. UINT uChannelOffset = 0; if (!ABFH_GetChannelOffset( &DH, pFH->_nDACFileADCNum, &uChannelOffset )) return; // Save the old sacle and offset. float fOldScale = pFH->_fDACFileScale; float fOldOffset = pFH->_fDACFileOffset; // Get the ADC-to-UU factors for the ADC channel in the DAC file. float fSadc, fOadc; ABFH_GetADCtoUUFactors( &DH, pFH->_nDACFileADCNum, &fSadc, &fOadc); // Get the DAC-to-UU factors for target DAC channel. float fSdac, fOdac; ABFH_GetDACtoUUFactors( pFH, pFH->nActiveDACChannel, &fSdac, &fOdac ); // Update the scaling factors. float fNewScale = fOldScale * fSdac / fSadc; float fNewOffset = fOldOffset * fSdac + fOdac - fOadc * fNewScale; pFH->fDACFileScale[pFH->nActiveDACChannel] = fNewScale; pFH->fDACFileOffset[pFH->nActiveDACChannel] = fNewOffset; } //=============================================================================================== // FUNCTION: OLDH_ABFtoABF15 // PURPOSE: Brings an ABF file header up to ABF version 1.5. // void OLDH_ABFtoABF15(ABFFileHeader *pFH) { for (int i=0; inBellEnable[i] = 0; pFH->nBellLocation[i] = 1; pFH->nBellRepetitions[i] = 1; } ASSERT(pFH->lFileSignature==ABF_NATIVESIGNATURE); // Convert DOS strings to ANSI char set. static char s_szAxEngine[] = "AXENGN"; if ((pFH->fFileVersionNumber < 1.4) && (_strnicmp(pFH->sCreatorInfo, s_szAxEngine, strlen(s_szAxEngine))!=0)) { /* ABF_OEM_TO_ANSI(pFH->_sFileComment); for (int i=0; isADCChannelName[i]); ABF_OEM_TO_ANSI(pFH->sADCUnits[i]); } for (int i=0; isDACChannelName[i]); ABF_OEM_TO_ANSI(pFH->sDACChannelUnits[i]); } ABF_OEM_TO_ANSI(pFH->sArithmeticUnits); */ } if (pFH->fFileVersionNumber < 1.4) { // Fix trigger source parameter for FETCHEX files pre-ABF1.3. if ((pFH->nOperationMode==ABF_GAPFREEFILE) && (pFH->nTriggerSource > 0)) pFH->nTriggerSource = 0; // Synthesize statistics period from old lCalculationPeriod. pFH->fStatisticsPeriod = pFH->lCalculationPeriod * pFH->fADCSampleInterval / 1E6F; // Fill in the new filter type fields. for (int i=0; ifSignalLowpassFilter[i] != ABF_FILTERDISABLED) pFH->nLowpassFilterType[i] = ABF_FILTER_EXTERNAL; if (pFH->fSignalHighpassFilter[i] != 0.0F) pFH->nHighpassFilterType[i] = ABF_FILTER_EXTERNAL; } // Synthesize the new trial trigger field (new for 1.4). if ((pFH->nOperationMode==ABF_WAVEFORMFILE) && (pFH->nTriggerAction==ABF_TRIGGER_STARTTRIAL)) { switch (pFH->nTriggerSource) { case ABF_TRIGGERSPACEBAR: pFH->nTrialTriggerSource = ABF_TRIALTRIGGER_SPACEBAR; break; case ABF_TRIGGEREXTERNAL: pFH->nTrialTriggerSource = ABF_TRIALTRIGGER_EXTERNAL; break; default: pFH->nTrialTriggerSource = ABF_TRIALTRIGGER_NONE; break; } pFH->nTriggerAction = ABF_TRIGGER_STARTEPISODE; pFH->nTriggerSource = 0; } // Correct the DAC file scaling parameters. if ((pFH->nOperationMode==ABF_WAVEFORMFILE) && (pFH->_nWaveformSource == ABF_DACFILEWAVEFORM)) { CorrectDACFilePath(pFH); CorrectDACScaling(pFH); } UINT nStatsRegionID = 0; // Temporary statistics region ID. pFH->lStatisticsMeasurements = ABF_STATISTICS_ABOVETHRESHOLD | ABF_STATISTICS_MEANOPENTIME; pFH->lStatsMeasurements[ nStatsRegionID ] = ABF_PEAK_MEASURE_PEAK | ABF_PEAK_MEASURE_PEAKTIME; } if (pFH->fFileVersionNumber < 1.5F) { // Changes for V1.5: // * Change ABFSignal parameters from UUTop & UUBottom to fDisplayGain & fDisplayOffset. // * Addition of the external tag type parameter. pFH->nExternalTagType = ABF_EXTERNALTAG; } } //=============================================================================================== // FUNCTION: OLDH_ABFtoCurrentVersion // PURPOSE: Brings an ABF file header up to the current ABF version. // void OLDH_ABFtoCurrentVersion(ABFFileHeader *pFH) { if( (pFH->fFileVersionNumber < ABF_V16) || (pFH->nFileType != ABF_ABFFILE) ) { // Changes for V1.6: // 1. Expanded header to 6k bytes // 2. New entries to accommodate 2 waveform channels. // 3. Date changed to 4 digit year // 4. New entries to accommodate 2 presweep trains, user lists and P/N leak subtractions. // 5. Longer file comment. // 6. Extra 'enable' fields. // 7. Protocol name in header. // Copy the waveform info to the new header parameters. UINT uDAC = pFH->nActiveDACChannel; pFH->lDACFilePtr[uDAC] = pFH->_lDACFilePtr; pFH->lDACFilePtr[uDAC] = 0; pFH->lDACFileNumEpisodes[uDAC] = pFH->_lDACFileNumEpisodes; pFH->lDACFileNumEpisodes[1-uDAC] = 0; pFH->nWaveformEnable[uDAC] = (pFH->_nWaveformSource != ABF_WAVEFORMDISABLED); pFH->nWaveformEnable[1-uDAC] = 0; pFH->nWaveformSource[uDAC] = pFH->_nWaveformSource; pFH->nWaveformSource[1-uDAC] = ABF_EPOCHTABLEWAVEFORM; pFH->nInterEpisodeLevel[uDAC] = pFH->_nInterEpisodeLevel; pFH->nInterEpisodeLevel[1-uDAC] = 0; for( UINT i=0; inEpochType[uDAC][i] = pFH->_nEpochType[i]; pFH->nEpochType[1-uDAC][i] = 0; pFH->fEpochInitLevel[uDAC][i] = pFH->_fEpochInitLevel[i]; pFH->fEpochInitLevel[1-uDAC][i] = 0.0F; pFH->fEpochLevelInc[uDAC][i] = pFH->_fEpochLevelInc[i]; pFH->fEpochLevelInc[1-uDAC][i] = 0.0F; pFH->lEpochInitDuration[uDAC][i] = pFH->_nEpochInitDuration[i]; pFH->lEpochInitDuration[1-uDAC][i] = 0; pFH->lEpochDurationInc[uDAC][i] = pFH->_nEpochDurationInc[i]; pFH->lEpochDurationInc[1-uDAC][i] = 0; } pFH->fDACFileScale[uDAC] = pFH->_fDACFileScale; pFH->fDACFileScale[1-uDAC] = 0.0F; pFH->fDACFileOffset[uDAC] = pFH->_fDACFileOffset; pFH->fDACFileOffset[1-uDAC] = 0.0F; pFH->lDACFileEpisodeNum[uDAC] = pFH->_nDACFileEpisodeNum; pFH->lDACFileEpisodeNum[1-uDAC] = 0; pFH->nDACFileADCNum[uDAC] = pFH->_nDACFileADCNum; pFH->nDACFileADCNum[1-uDAC] = 0; strncpy( pFH->sDACFilePath[uDAC], pFH->_sDACFilePath, ABF_DACFILEPATHLEN ); strncpy( pFH->sDACFilePath[1-uDAC], "", ABF_DACFILEPATHLEN ); // Telegraph settings pFH->nTelegraphEnable[pFH->_nAutosampleADCNum] = pFH->_nAutosampleEnable; pFH->nTelegraphInstrument[pFH->_nAutosampleADCNum] = pFH->_nAutosampleInstrument; pFH->fTelegraphAdditGain[pFH->_nAutosampleADCNum] = pFH->_fAutosampleAdditGain; pFH->fTelegraphFilter[pFH->_nAutosampleADCNum] = pFH->_fAutosampleFilter; pFH->fTelegraphMembraneCap[pFH->_nAutosampleADCNum] = pFH->_fAutosampleMembraneCap; // Presweep trains. if( uDAC == (UINT)pFH->_nConditChannel ) { pFH->nConditEnable[uDAC] = pFH->_nConditEnable; pFH->lConditNumPulses[uDAC] = pFH->_lConditNumPulses; pFH->fBaselineDuration[uDAC] = pFH->_fBaselineDuration; pFH->fBaselineLevel[uDAC] = pFH->_fBaselineLevel; pFH->fStepDuration[uDAC] = pFH->_fStepDuration; pFH->fStepLevel[uDAC] = pFH->_fStepLevel; pFH->fPostTrainLevel[uDAC] = pFH->_fPostTrainLevel; } if( uDAC == (UINT)pFH->nActiveDACChannel ) { // P/N Leak subtraction parameters. pFH->nPNEnable[uDAC] = pFH->_nPNEnable; pFH->nPNPolarity[uDAC] = pFH->_nPNPolarity; pFH->fPNHoldingLevel[uDAC] = pFH->_fPNHoldingLevel; pFH->nPNADCSamplingSeq[uDAC][0] = LOBYTE( pFH->_nPNADCNum ); // Sanity check the channel number. ASSERT( pFH->nPNADCSamplingSeq[uDAC][0] == pFH->_nPNADCNum ); // User list parameters. pFH->nULEnable[uDAC] = pFH->_nListEnable; pFH->nULParamToVary[uDAC] = pFH->_nParamToVary; strncpy( pFH->sULParamValueList[uDAC], pFH->_sParamValueList, ABF_VARPARAMLISTLEN ); } // DAC Calibration Factors. for(int i=0; ifDACCalibrationFactor[i] = 1.0F; pFH->fDACCalibrationOffset[i] = 0.0F; } // File Comment. strncpy( pFH->sFileComment, pFH->_sFileComment, ABF_OLDFILECOMMENTLEN ); // Fix the date if needed. pFH->lFileStartDate = ABFU_FixFileStartDate ( pFH->lFileStartDate ); // Extra 'enable' fields. pFH->nCommentsEnable = (pFH->nManualInfoStrategy != ABF_ENV_DONOTWRITE); // Turn on the 'Analyse Me' flag. pFH->nAutoAnalyseEnable = ABF_AUTOANALYSE_DEFAULT; } if( (pFH->fFileVersionNumber < ABF_V170) || (pFH->nFileType != ABF_ABFFILE) ) { // Set stats variables for ( UINT uRegion = 0; uRegion < ABF_STATS_REGIONS; uRegion++ ) { pFH->lStatsMeasurements[uRegion] = pFH->_lAutopeakMeasurements; // Copy stats measurements across all regions. pFH->nRiseBottomPercentile[uRegion] = 10; pFH->nRiseTopPercentile[uRegion] = 90; pFH->nDecayBottomPercentile[uRegion] = 10; pFH->nDecayTopPercentile[uRegion] = 90; } pFH->nStatsEnable = pFH->_nAutopeakEnable; pFH->nStatsSmoothing = pFH->_nAutopeakSmoothing; pFH->nStatsBaseline = pFH->_nAutopeakBaseline; pFH->lStatsBaselineStart = pFH->_lAutopeakBaselineStart; pFH->lStatsBaselineEnd = pFH->_lAutopeakBaselineEnd; // Polarity is channel specific for ( UINT uChannel = 0; uChannel < ABF_ADCCOUNT; uChannel++ ) pFH->nStatsChannelPolarity[uChannel] = pFH->_nAutopeakPolarity;; // Convert the old channel selection to an active channel. UINT nStatsADCNum = pFH->_nAutopeakADCNum; // Shift the uBitmask by nStatsADCNum of bits. UINT uBitMask = 0x01 << nStatsADCNum; pFH->nStatsActiveChannels = (short)uBitMask; // Convert the old search region into the statistics regions. for ( UINT uRegion = 0; uRegion < ABF_STATS_REGIONS; uRegion++ ) { pFH->nStatsSearchMode[ uRegion ] = pFH->_nAutopeakSearchMode; pFH->lStatsStart[ uRegion ] = pFH->_lAutopeakStart; pFH->lStatsEnd[ uRegion ] = pFH->_lAutopeakEnd; } // Select statistics region zero. pFH->nStatsSearchRegionFlags = ABF_PEAK_SEARCH_REGION0; pFH->nStatsSelectedRegion = 0; // Telegraph settings pFH->nTelegraphEnable[pFH->_nAutosampleADCNum] = pFH->_nAutosampleEnable; pFH->nTelegraphInstrument[pFH->_nAutosampleADCNum] = pFH->_nAutosampleInstrument; pFH->fTelegraphAdditGain[pFH->_nAutosampleADCNum] = pFH->_fAutosampleAdditGain; pFH->fTelegraphFilter[pFH->_nAutosampleADCNum] = pFH->_fAutosampleFilter; pFH->fTelegraphMembraneCap[pFH->_nAutosampleADCNum] = pFH->_fAutosampleMembraneCap; } if( (pFH->fFileVersionNumber < ABF_V171) || (pFH->nFileType != ABF_ABFFILE) ) { for( int i = 0; i < ABF_WAVEFORMCOUNT; i++ ) { snprintf( pFH->sEpochResistanceSignalName[ i ], sizeof(pFH->sEpochResistanceSignalName[ i ]), "IN #%d", i); pFH->nEpochResistanceState[ i ] = 0; } } if( (pFH->fFileVersionNumber < ABF_V172) || (pFH->nFileType != ABF_ABFFILE) ) { pFH->nAlternateDACOutputState = 0; for( int nEpoch = 0; nEpoch < ABF_EPOCHCOUNT; nEpoch ++ ) { pFH->nAlternateDigitalValue[ nEpoch ] = 0; pFH->nAlternateDigitalTrainValue[ nEpoch ] = 0; } } if( (pFH->fFileVersionNumber < ABF_V173) || (pFH->nFileType != ABF_ABFFILE) ) { //Post-processing values. for( int i=0; ifPostProcessLowpassFilter[i] = ABF_FILTERDISABLED; pFH->nPostProcessLowpassFilterType[i] = ABF_POSTPROCESS_FILTER_NONE; } } if( (pFH->fFileVersionNumber < ABF_V174) || (pFH->nFileType != ABF_ABFFILE) ) pFH->channel_count_acquired = 0; if( (pFH->fFileVersionNumber < ABF_V175) || (pFH->nFileType != ABF_ABFFILE) ) { for( int i=0; inStatsChannelPolarity[ i ] = ABF_PEAK_ABSOLUTE; } if( (pFH->fFileVersionNumber < ABF_V176) || (pFH->nFileType != ABF_ABFFILE) ) pFH->nDD132xTriggerOut = 0; if( (pFH->fFileVersionNumber < ABF_V177) || (pFH->nFileType != ABF_ABFFILE) ) { pFH->nCreatorMajorVersion = 0; pFH->nCreatorMinorVersion = 0; pFH->nCreatorBugfixVersion = 0; pFH->nCreatorBuildVersion = 0; } if( (pFH->fFileVersionNumber < ABF_V178) || (pFH->nFileType != ABF_ABFFILE) ) pFH->nAlternateDigitalOutputState = 0; if( (pFH->fFileVersionNumber < ABF_V180 && pFH->fFileVersionNumber > ABF_V174) || (pFH->nFileType != ABF_ABFFILE) ) { for( UINT uRegion = 0; uRegion < ABF_STATS_REGIONS; uRegion++ ) pFH->nStatsSearchMode[ uRegion ] = pFH->_nStatsSearchMode; } // When updating the header version copy this else if statement but use your parameters and the current version number if( (pFH->fFileVersionNumber < ABF_V180) || (pFH->nFileType != ABF_ABFFILE) ) { // Clear the annotations since they will not be copied. pFH->lAnnotationSectionPtr = 0; pFH->lNumAnnotations = 0; } } /* //=============================================================================================== // FUNCTION: OLDH_CorrectScopeConfig // PURPOSE: Corrects the display gain and offset in the scope parameters. // void OLDH_CorrectScopeConfig(ABFFileHeader *pFH, ABFScopeConfig *pCfg) { ABFSignal *pT = pCfg->TraceList; for (int i=0; inTraceCount; i++, pT++) { if (pT->bFloatData) { float fUUTop = pT->fDisplayGain; float fUUBottom = pT->fDisplayOffset; float fDisplayRange = fUUTop - fUUBottom; float fDisplayOffset = (fUUTop + fUUBottom)/2; // FIX FIX FIX FIX FIX float fInputRange = pFH->fArithmeticUpperLimit - pFH->fArithmeticLowerLimit; float fInputOffset = (pFH->fArithmeticUpperLimit + pFH->fArithmeticLowerLimit)/2; pT->fDisplayGain = fInputRange / fDisplayRange; pT->fDisplayOffset = fDisplayOffset - fInputOffset; } else { ABFH_DisplayRangeToGainOffset( pFH, pFH->nADCSamplingSeq[pT->nMxOffset], pT->fDisplayGain, pT->fDisplayOffset, &pT->fDisplayGain, &pT->fDisplayOffset); } } } */ //*********************************************************************************************** // The following three utility functions work for both old FETCHEX and old // CLAMPEX files, the array indices being the same for each case. //=============================================================================================== // FUNCTION: GetOldDACUnits // PURPOSE: Extract the units-of-measure string for DAC channel 0 from the second label. // static void GetOldDACUnits(char *Label, char *DACLabel) { memcpy(DACLabel, Label+ABF_OLDUNITLEN, ABF_DACUNITLEN); } //=============================================================================================== // FUNCTION: GetOldADCUnits // PURPOSE: Extract the units-of-measure strings for ADC channels 0 and 1 from the // fourth and fifth labels, respectively. // static void GetOldADCUnits(char *Label, char *ADCLabel) { memcpy(ADCLabel, Label+3*ABF_OLDUNITLEN, ABF_ADCUNITLEN); memcpy(ADCLabel+(ABF_ADCCOUNT-2)*ABF_ADCUNITLEN, Label+3*ABF_OLDUNITLEN, ABF_ADCUNITLEN); memcpy(ADCLabel+8, Label+4*ABF_OLDUNITLEN, ABF_ADCUNITLEN); memcpy(ADCLabel+(ABF_ADCCOUNT-1)*ABF_ADCUNITLEN, Label+4*ABF_OLDUNITLEN, ABF_ADCUNITLEN); } //=============================================================================================== // FUNCTION: ReadADCInfo // PURPOSE: Read ADC channel scaling factors etc. // static BOOL ReadADCInfo(FILEHANDLE hFile, float *Param, char *ADCLabel ) { // Seek to the start of the ADC channel information. #if defined(_MSC_VER) SetFilePointer(hFile, 640L, NULL, FILE_BEGIN); #else c_SetFilePointer(hFile, 640L, NULL, FILE_BEGIN); #endif // Read the ADC channel information and display parameters (97-160). // 4 arrays of ABF_ADCCOUNT x 4 byte floats if (!ABFU_ReadFile(hFile, Param+F53_INSTOFFSET, 4 * ABF_ADCCOUNT * sizeof(float))) return FALSE; // Read the ADC channel units strings into a single string return ABFU_ReadFile(hFile, ADCLabel, ABF_ADCCOUNT * ABF_ADCUNITLEN); } //=============================================================================================== // Code for translation of old FETCHEX parameter and data file headers. // It will handle two different file formats: // // 1. Data files (program versions before 5.1): // // 320 80 single-precision (4-byte) values in Microsoft BASIC binary format // 77 77-byte ASCII character string for file comment // 80 5 16-byte ASCII character strings for units-of-measure: // time-scale "us" // DAC channel #0 // (unused) // ADC channel #0 // (unused) // 35 35 bytes of environment data // 512 bytes of unused header // ---- --------------------------- // 1024 bytes total for file header // // 2. Parameter and data files (program versions 5.1 and later): // // 320 80 single-precision (4-byte) values in IEEE floating-point format // 77 77-byte ASCII character string for file comment // 80 5 16-byte ASCII character strings (80 bytes) for units-of-measure: // time-scale "us" // DAC channel #0 // DAC channel #1 // (unused) // (unused) // 3 3 bytes of unused space // 160 16 10-byte strings (160 bytes) of channel names // 256 64 single-precision (4-byte) values in IEEE floating-point format // 128 16 8-byte ASCII character strings (128 bytes) for units-of-measure: // ADC channel #0 // . // . // . // ADC channel #15 // ---- --------------------------- // 1024 bytes total for file header // // See also the extensive documentation for the format of the Version 5.1 // parameter array. // // NOTE: the parameter version number (Param[9]) is NOT updated here. // //----------------------------------------------------------------------------- //=============================================================================================== // FUNCTION: ReadADCNames // PURPOSE: Read the channel names array. // static BOOL ReadADCNames(FILEHANDLE hFile, char *ChannelName) { // Seek to the channel names area. #if defined(_MSC_VER) SetFilePointer(hFile, 480L, NULL, FILE_BEGIN); #else c_SetFilePointer(hFile, 480L, NULL, FILE_BEGIN); #endif // Read the ADC channel name strings into a single string. return ABFU_ReadFile(hFile, ChannelName, ABF_ADCCOUNT * ABF_ADCNAMELEN); } //=============================================================================================== // FUNCTION: FetchexToV5_3 // PURPOSE: Convert fetchex parameters prior to file version 5.3 to the V5.3 format. // static BOOL FetchexToV5_3( float *Param ) { // Correct the acquisition mode. if (Param[F53_OPERATIONMODE] == 1.0F) Param[F53_OPERATIONMODE] = 2.0F; // Convert old parameter 22 to event-triggered mode. if (Param[22] == -1.0F) { Param[22] = 0.0F; Param[F53_OPERATIONMODE] = 0.0F; } // Set the default DAC channel 0 gain. if (Param[F53_GAINDACTOCELL] == 0.0F) Param[F53_GAINDACTOCELL] = 1.0F; // Convert the DAC channel 0 gain from milli-volts to volts. Param[F53_GAINDACTOCELL] = Param[F53_GAINDACTOCELL] * 1000.0F; // Initialize the amplification factors for (int i=0; i 0 & 15 Param[F53_ADCDISPLAYOFFSET] = Param[F53_VERTICALOFFSET]; Param[F53_ADCDISPLAYOFFSET+ABF_ADCCOUNT-1] = Param[F53_ADCDISPLAYOFFSET]; // Check the number of 512-sample segments per episode (old versions // allowed values of 8, 16, 24, ..., 2048), and adjust if necessary. int nSamplesPerEpisode = short(Param[F53_OLDSAMPLESPEREPISODE]); // if FETCHEX can't read the data, return an error. if ((nSamplesPerEpisode == 0) || (nSamplesPerEpisode % 512 != 0)) return FALSE; Param[F53_SEGMENTSPEREPISODE] = (float)(nSamplesPerEpisode / 512); // Check that ADC range and resolution were set properly if (Param[F53_ADCRANGE] == 0.0F) Param[F53_ADCRANGE] = 10.0F; if (Param[F53_DACRANGE] == 0.0F) Param[F53_DACRANGE] = 10.0F; if (Param[F53_ADCRESOLUTION] == 0.0F) Param[F53_ADCRESOLUTION] = 12.0F; if (Param[F53_DACRESOLUTION] == 0.0F) Param[F53_DACRESOLUTION] = 12.0F; Param[F53_INVALIDLASTDATA] = 0.0F; return TRUE; } //=============================================================================================== // FUNCTION: DataResolution // PURPOSE: Return the data resolution given the number of bits used. // static ABFLONG DataResolution( float fNumberOfBits ) { switch (short(fNumberOfBits)) { case 16: return(32768L); case 14: return(8192L); default: return(2048L); } } //=============================================================================================== // FUNCTION: FetchexToABF1_x // PURPOSE: Converts FETCHEX parameters to ABF format. // static void FetchexToABF1_x( float *Param, char *ADCLabel, char *DACLabel, char *ChannelName, char *Comment, ABFFileHeader *pFH ) { short i, n; ABFLONG OldSynchArraySize; // Initialize structure to all NULL's ABFH_Initialize(pFH); pFH->lFileSignature = ABF_OLDPCLAMP; pFH->lActualEpisodes = 1; // Gap-free, EventLen files fixed later pFH->lActualAcqLength = (ABFLONG)(Param[F53_SAMPLESPEREPISODE]) * (ABFLONG)(Param[F53_ACTUALEPISODESPERFILE]) - (ABFLONG)(Param[F53_NUMPOINTSIGNORED]) - (ABFLONG)(Param[F53_INVALIDLASTDATA]); pFH->lFileStartTime = (ABFLONG)(Param[F53_FILESTARTTIME]); pFH->lStopwatchTime = (ABFLONG)(Param[F53_FILESTARTTIME] - Param[F53_FILEELAPSEDTIME]); pFH->fFileVersionNumber = Param[F53_FILEVERSIONNUMBER]; pFH->fHeaderVersionNumber = ABF_CURRENTVERSION; pFH->lFileStartDate = (ABFLONG)(Param[F53_FILESTARTDATE]); pFH->nExperimentType = ABF_VOLTAGECLAMP; // Voltage Clamp pFH->fADCSecondSampleInterval = 0.0F; // CLAMPEX only pFH->fADCSampleInterval = Param[F53_ADCSAMPLEINTERVAL]; pFH->lPreTriggerSamples = 0; // default to 0 pFH->nManualInfoStrategy = ABF_ENV_WRITEEACHTRIAL; // default to write-each-trial if (Param[F53_OPERATIONMODE] == 0.0F) { pFH->nOperationMode = ABF_VARLENEVENTS; pFH->fSecondsPerRun = 0.0F; pFH->lPreTriggerSamples = (ABFLONG)((1.0F-Param[F53_POSTTRIGGERPORTION]) * Param[F53_SAMPLESPEREPISODE]); } else { pFH->nOperationMode = ABF_GAPFREEFILE; pFH->fSecondsPerRun = Param[F53_SAMPLESPEREPISODE] / 1E6F * Param[F53_EPISODESPERFILE] * Param[F53_REQUESTEDSAMPLEINTERVAL]; } pFH->nNumPointsIgnored = short(Param[F53_NUMPOINTSIGNORED]); pFH->lTagSectionPtr = ABFLONG(Param[F53_TAGSECTIONPTR]); pFH->lNumTagEntries = ABFLONG(Param[F53_NUMTAGENTRIES]); if (Param[F53_SEGMENTSPEREPISODE] > 4) // Fixup for AXOTAPE bug. pFH->lNumSamplesPerEpisode = 512L; else pFH->lNumSamplesPerEpisode = (ABFLONG)(Param[F53_SEGMENTSPEREPISODE]) * 512L; pFH->lClockChange = 0; // CLAMPEX only pFH->_lDACFilePtr = 0; // CLAMPEX only pFH->_lDACFileNumEpisodes = 0; // CLAMPEX only pFH->lStartDisplayNum = 0; // CLAMPEX only pFH->lFinishDisplayNum = 0; // CLAMPEX only pFH->nMultiColor = 1; // CLAMPEX only switch (short(Param[F53_AUTOSAMPLEINSTRUMENT])) { case 0: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEMANUAL; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 1: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 2: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1B; break; case 3: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEDISABLED; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 4: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH201; break; default: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEDISABLED; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; } pFH->fCellID1 = Param[F53_CELLID1]; pFH->fCellID2 = Param[F53_CELLID2]; pFH->_fAutosampleMembraneCap = 0.0F; pFH->fCellID3 = Param[F53_THRESHOLDCURRENT]; if (Param[F53_ADDITINSTGAIN] != 0.0F) pFH->_fAutosampleAdditGain = Param[F53_ADDITINSTGAIN]; else pFH->_fAutosampleAdditGain = 1.0F; pFH->_fAutosampleFilter = Param[F53_INSTRUMENTFILTER]; pFH->_nAutosampleADCNum = short(Param[F53_ADCFIRSTLOGICALCHANNEL]); pFH->lNumberOfTrials = 1; // CLAMPEX only pFH->lRunsPerTrial = 1; // CLAMPEX only pFH->lEpisodesPerRun = 1; // CLAMPEX only pFH->nADCNumChannels = short(Param[F53_ADCNUMCHANNELS]); pFH->nFirstEpisodeInRun = 0; // CLAMPEX only pFH->fTrialStartToStart = 0.0F; // CLAMPEX only pFH->fEpisodeStartToStart = 0.0F; // CLAMPEX only pFH->fScopeOutputInterval = 0.0F; // CLAMPEX only pFH->fADCRange = Param[F53_ADCRANGE]; pFH->fDACRange = Param[F53_DACRANGE]; pFH->lADCResolution = DataResolution(Param[F53_ADCRESOLUTION]); pFH->lDACResolution = DataResolution(Param[F53_DACRESOLUTION]); pFH->lDeltaArrayPtr = 0; pFH->lNumDeltas = 0; pFH->nDrawingStrategy = 1; // Display data in real time pFH->nTiledDisplay = 1; // CLAMPEX only pFH->nEraseStrategy = 1; // Erase after each trace pFH->nChannelStatsStrategy = 1; // Show channel stats in gap free pFH->lDisplayAverageUpdate = 0; // CLAMPEX only pFH->nDataDisplayMode = short(Param[F53_DATADISPLAYMODE]); pFH->fTriggerThreshold = 0.0F; pFH->nTriggerSource = short(Param[F53_ADCFIRSTLOGICALCHANNEL]); pFH->nTriggerPolarity = 0; pFH->nAveragingMode = ABF_NOAVERAGING; // AXOTAPE only pFH->fSynchTimeUnit = 0.0F; // use samples for all old files pFH->lSynchArraySize = 0; // These parameters will be reset later on pFH->lSynchArrayPtr = 0; // for files that contain a Synch array pFH->lCalculationPeriod = 16384; // Calculate stats every 16k samples pFH->lSamplesPerTrace = 16384; // 16k samples per trace during acqn. pFH->nTriggerAction = ABF_TRIGGER_STARTEPISODE; // CLAMPEX only pFH->nUndoRunCount = 0; // CLAMPEX only pFH->lAverageCount = 0; pFH->fStatisticsPeriod = pFH->lCalculationPeriod * pFH->fADCSampleInterval / 1E3F; pFH->_nPNPolarity = ABF_PN_SAME_POLARITY; // CLAMPEX only pFH->nStatsSmoothing = 1; memcpy(pFH->_sFileComment, Comment, ABF_OLDFILECOMMENTLEN); // Set up the channel mapping if (Param[F53_ADCNUMBERINGSTRATEGY] == 0.0F) { // Channel numbers are ascending // (AXOLAB-1, AXOLAB 1100, TL-1-125, TL-1-40, TL-3) // NOTE: AXOLAB 1100 only supports 8 channels (0-7) for (i=0; inADCPtoLChannelMap[i] = i; n = short(Param[F53_ADCFIRSTLOGICALCHANNEL]); for (i=0; inADCNumChannels; i++, n++) pFH->nADCSamplingSeq[i] = n; } else { // Channel numbers are decending // (TL-2 only at this stage) for (i=0; i<8; i++) pFH->nADCPtoLChannelMap[i] = short(7 - i); for (i=8; inADCPtoLChannelMap[i] = -1; n = short(8 - pFH->nADCNumChannels); for (i=0; inADCNumChannels; i++, n++) pFH->nADCSamplingSeq[i] = n; } // Set rest of sampling sequence to -1 for (i=pFH->nADCNumChannels; inADCSamplingSeq[i] = -1; // Set up the ADC channel info for (i=0; i < ABF_ADCCOUNT; i++) { pFH->fInstrumentOffset[i] = 0.0F; pFH->fInstrumentScaleFactor[i] = 1.0F; pFH->fADCDisplayAmplification[i] = 1.0F; pFH->fADCDisplayOffset[i] = 0.0F; pFH->fSignalLowpassFilter[i] = ABF_FILTERDISABLED; pFH->fSignalHighpassFilter[i] = 0.0F; pFH->fADCProgrammableGain[i] = 1.0F; pFH->fSignalGain[i] = 1.0F; pFH->fSignalOffset[i] = 0.0F; } for (i=0; i < ABF_ADCCOUNT; i++) { n = pFH->nADCPtoLChannelMap[i]; if (n == -1) break; strncpy(pFH->sADCChannelName[n], ChannelName+ABF_ADCNAMELEN*i, ABF_ADCNAMELEN); strncpy(pFH->sADCUnits[n], ADCLabel+ABF_ADCUNITLEN*i, ABF_ADCUNITLEN); pFH->fInstrumentOffset[n] = Param[F53_INSTOFFSET + i]; // protect against divide by zero errors from bad gains. if (Param[F53_INSTSCALEFACTOR + i] != 0.0F) pFH->fInstrumentScaleFactor[n] = Param[F53_INSTSCALEFACTOR + i]; if (Param[F53_ADCDISPLAYGAIN + i] != 0.0F) pFH->fADCDisplayAmplification[n] = Param[F53_ADCDISPLAYGAIN + i]; // convert offset from percentage of fullscreen to user units pFH->fADCDisplayOffset[n] = Param[F53_ADCDISPLAYOFFSET + i] * pFH->fADCRange / pFH->fInstrumentScaleFactor[i] / pFH->fADCDisplayAmplification[i]; if ((pFH->_nAutosampleEnable != 0) && (n == pFH->_nAutosampleADCNum)) pFH->fADCDisplayOffset[n] /= pFH->_fAutosampleAdditGain; } memcpy(pFH->sDACChannelUnits[0], DACLabel, ABF_DACUNITLEN); for (i=0; i < ABF_DACCOUNT; i++) { pFH->fDACScaleFactor[i] = Param[F53_GAINDACTOCELL]; pFH->fDACHoldingLevel[i] = Param[F53_DAC0HOLDINGLEVEL]; } // Set up the data and Csynch array pointers if (pFH->nOperationMode != ABF_GAPFREEFILE) { pFH->lActualEpisodes = (ABFLONG)(Param[F53_ACTUALEPISODESPERFILE]); pFH->lSynchArraySize = pFH->lActualEpisodes; if (Param[F53_FILEVERSIONNUMBER] >= 5.0F) { // In version 5.0 and later data files the Csynch array is at the // end of the file. pFH->lDataSectionPtr = 2L; pFH->lSynchArrayPtr = 2L + (pFH->lActualAcqLength*2L + 511L) / 512L; } else { // For older data files just adjust the data pointer to allow // for the presence of the Csynch array before the data pFH->lSynchArrayPtr = 2L; pFH->lDataSectionPtr = 2L + (pFH->lSynchArraySize*4L + 511L) / 512L; } } else { pFH->lSynchArrayPtr = 0; pFH->lSynchArraySize = 0; if (Param[F53_FILEVERSIONNUMBER] >= 5.0F) { pFH->lDataSectionPtr = 2; } else { // Adjust for older throughput data files that have a Csynch array // before the data anyway OldSynchArraySize = pFH->lActualAcqLength / (UINT)pFH->lNumSamplesPerEpisode; pFH->lDataSectionPtr = 2L + (OldSynchArraySize*4L + 511L) / 512L; } } } //=============================================================================================== // FUNCTION: FetchexConvert // PURPOSE: Convert an old FETCHEX file into the current ABF format. // static BOOL FetchexConvert( FILEHANDLE hFile, ABFFileHeader *pFH, float *Param, char *Comment, char *Label, int *pnError ) { char ADCLabel[ABF_ADCCOUNT*ABF_ADCUNITLEN]; char ChannelName[ABF_ADCCOUNT*ABF_ADCNAMELEN]; char DACLabel[ABF_DACCOUNT*ABF_DACUNITLEN]; // Handle the case of old (pre-version 5.1) files. ABF_BLANK_FILL(ADCLabel); ABF_BLANK_FILL(DACLabel); ABF_BLANK_FILL(ChannelName); GetOldDACUnits(Label, DACLabel); if (Param[F53_FILEVERSIONNUMBER] < 5.0999F) // MAC doen't like 5.1F { if (!FetchexToV5_3(Param)) ERRORRETURN(pnError, ABFH_EINVALIDFILE); GetOldADCUnits(Label, ADCLabel); } else { // Handle the case of version 5.1 (and later) files. if (!ReadADCNames(hFile, ChannelName)) ERRORRETURN(pnError, ABFH_EHEADERREAD); if (!ReadADCInfo(hFile, Param, ADCLabel)) ERRORRETURN(pnError, ABFH_EHEADERREAD); // Get number of Tags if present if (Param[F53_TAGSECTIONPTR] != 0.0F) { int nNumTags = 0; // Some old versions of fetchex set this value to 2 if (Param[F53_TAGSECTIONPTR] >= 3.0F) { // Seek to start of tag entries block ABFLONG lNumBytes = (ABFLONG)(Param[F53_TAGSECTIONPTR]) * 512L; #if defined(_MSC_VER) SetFilePointer(hFile, lNumBytes, NULL, FILE_BEGIN); #else c_SetFilePointer(hFile, lNumBytes, NULL, FILE_BEGIN); #endif if (!ABFU_ReadFile(hFile, &nNumTags, 2)) ERRORRETURN(pnError, ABFH_EHEADERREAD); } Param[F53_NUMTAGENTRIES] = (float)nNumTags; } } FetchexToABF1_x(Param, ADCLabel, DACLabel, ChannelName, Comment, pFH); return TRUE; } //=============================================================================================== // Code for translation of old CLAMPEX parameter and data file headers. // It will handle two different file formats: // // 1. Data files (program versions before 5): // 320 80 single-precision (4-byte) values in Microsoft BASIC binary format // 77 77-byte ASCII character string for file comment // 80 5 16-byte ASCII character strings for units-of-measure: // time-scale "us" // DAC channel #0 // (unused) // ADC channel #0 // ADC channel #1 // 35 35 bytes of environment data // 64 64-byte ASCII character string for the presweep (conditioning) pulse parameters // 448 bytes of unused header // ---- --------------------------- // 1024 bytes total for file header // // 2. Parameter and data files (program versions 5 and later): // // 320 80 single-precision (4-byte) values in IEEE floating-point format // 77 77-byte ASCII character string for file comment // 80 5 16-byte ASCII character strings (80 bytes) for units-of-measure: // time-scale "us" // DAC channel #0 // (unused) // (unused) // (unused) // 35 35 bytes of environment data // 64 64-byte ASCII character string for the presweep (conditioning) pulse parameters // 320 80 single-precision (4-byte) values in IEEE floating-point format // 128 16 8-byte ASCII character strings for units-of-measure: // ADC channel #0 // . // . // . // ADC channel #15 // ---- --------------------------- // 1024 bytes total for file header // // See also the extensive documentation for the format of the Version 5 // parameter array. // // Support for pre- version 5 parameter has been dropped. // // NOTE: the parameter version number (Param[C52_FILEVERSIONNUMBER]) is NOT // updated here, since the trial routines need it to decide whether the // data is in averaged form (version 5+) or accumulated form (Version < 5). //=============================================================================================== // FUNCTION: ReadCondit // PURPOSE: Read presweep (conditioning) train parameters from an old file. // static BOOL ReadCondit(FILEHANDLE hFile, char *Condit) { // Seek to the presweep (conditioning) string #if defined(_MSC_VER) SetFilePointer(hFile, 512L, NULL, FILE_BEGIN); #else c_SetFilePointer(hFile, 512L, NULL, FILE_BEGIN); #endif // Read the presweep (conditioning) pulse string. return ABFU_ReadFile(hFile, Condit, ABF_OLDCONDITLEN); } //=============================================================================================== // FUNCTION: ClampexToV5_2 // PURPOSE: Convert CLAMPEX files prior to file version 5.2 to V5.2 format. // #define STEPPED 1 // stepped waveform #define RAMPED 2 // ramp waveform static void ClampexToV5_2(float *Param) { int i; // Set the default for the number of runs per trial. if (Param[C52_RUNSPERFILE] < 1.0F) Param[C52_RUNSPERFILE] = 1.0F; // Set the default for the number of episodes per run. if (Param[C52_EPISODESPERRUN] < 1.0F) Param[C52_EPISODESPERRUN] = 1.0F; // Set the default for the number of trials. if (Param[C52_NUMTRIALS] == 0.0F) Param[C52_NUMTRIALS] = 1.0F; // Set the default for the starting episode number. if (Param[C52_STARTEPISODENUM] == 0.0F) Param[C52_STARTEPISODENUM] = 1.0F; // Set the default for the number of data samples per episode. // (Very old versions of the program didn// t set Param[C52_SEGMENTSPEREPISODE], // since all episodes were 512 samples long) if (Param[C52_SEGMENTSPEREPISODE] < 1.0F) Param[C52_SEGMENTSPEREPISODE] = 1.0F; // Convert the DAC channel 0 gain from milli-volts to volts. Param[C52_GAINDACTOCELL] = Param[C52_GAINDACTOCELL] * 1000.0F; // Change the ADC multiplexer code (48) to the number of channels to sample. Param[C52_ADCNUMCHANNELS] = Param[C52_OLDMULTIPLEXCODE] + 1.0F; // Check that the number of channels is within range. if (Param[C52_ADCNUMCHANNELS] < 1) Param[C52_ADCNUMCHANNELS] = 1.0F; // Set the default for the stimulus duration to 10 samples. if (Param[C52_CH1PULSE] == 0.0F) Param[C52_CH1PULSE] = 10.0F; if (Param[C52_CH2PULSE] == 0.0F) Param[C52_CH2PULSE] = 10.0F; // Initialize the ADC scaling factors to 1.0 for (i=0; i= 2.0F) Param[C52_AUTOPEAKSEARCHMODE] += 2.0F; // Set the number of the search channel. if (Param[C52_ADCNUMCHANNELS] == 2.0F) Param[C52_AUTOPEAKCHANNEL] = 1.0F; else Param[C52_AUTOPEAKCHANNEL] = 0.0F; } Param[C52_PNNUMPULSES] = 0.0F; Param[C52_PNADCNUM] = 0.0F; Param[C52_PNHOLDINGLEVEL] = 0.0F; Param[C52_PNSETTLINGTIME] = 0.0F; Param[C52_PNINTERPULSE] = 0.0F; } //=============================================================================================== // FUNCTION: ClampexToABF1_x // PURPOSE: Convert old CLAMPEX parameters to ABF format. // static void ClampexToABF1_x( float *Param, char *ADCLabel, char *DACLabel, char *Condit, char *Comment, ABFFileHeader *pFH ) { short i, n; float EpiTime; // Initialize structure to all NULL's ABFH_Initialize(pFH); pFH->lFileSignature = ABF_OLDPCLAMP; pFH->lActualEpisodes = (ABFLONG)(Param[C52_EPISODESPERFILE]); // 4 pFH->lActualAcqLength = (ABFLONG)(Param[C52_SAMPLESPEREPISODE]) * (ABFLONG)(Param[C52_EPISODESPERFILE]); pFH->lFileStartTime = (ABFLONG)(Param[C52_FILESTARTTIME]); pFH->lStopwatchTime = (ABFLONG)(Param[F53_FILESTARTTIME] - Param[F53_FILEELAPSEDTIME]); pFH->fFileVersionNumber = Param[C52_FILEVERSIONNUMBER]; pFH->fHeaderVersionNumber = ABF_CURRENTVERSION; pFH->lFileStartDate = (ABFLONG)(Param[C52_FILESTARTDATE]); pFH->nExperimentType = ABF_VOLTAGECLAMP; // Voltage Clamp pFH->fADCSecondSampleInterval = Param[C52_SECONDCLOCKPERIOD]; pFH->fADCSampleInterval = Param[C52_FIRSTCLOCKPERIOD]; pFH->nOperationMode = ABF_WAVEFORMFILE; // CLAMPEX file - waveform mode pFH->lPreTriggerSamples = 0; // Fetchex only pFH->nManualInfoStrategy = ABF_ENV_WRITEEACHTRIAL; // default to write-each-trial pFH->nNumPointsIgnored = 0; // Fetchex only pFH->lTagSectionPtr = 0; pFH->lNumTagEntries = 0; pFH->lNumSamplesPerEpisode = (ABFLONG)(Param[C52_SEGMENTSPEREPISODE]) * 512L; pFH->lClockChange = 0; pFH->fSecondsPerRun = 0.0F; pFH->_lDACFilePtr = 0; pFH->_lDACFileNumEpisodes = 0; pFH->lStartDisplayNum = 1; pFH->lFinishDisplayNum = 0; pFH->nMultiColor = 1; if (Param[C52_DISPLAYSEGMENTNUM] != 0.0F) { pFH->lFinishDisplayNum = (ABFLONG)(Param[C52_DISPLAYSEGMENTNUM]) * 512L; pFH->lStartDisplayNum = pFH->lFinishDisplayNum - 511L; } switch (short(Param[C52_AUTOSAMPLEINSTRUMENT])) { case 0: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEMANUAL; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 1: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 2: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1B; break; case 3: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEDISABLED; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; case 4: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEAUTOMATIC; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH201; break; default: pFH->_nAutosampleEnable = ABF_AUTOSAMPLEDISABLED; pFH->_nAutosampleInstrument = ABF_INST_AXOPATCH1; break; } pFH->fCellID1 = 0.0F; pFH->fCellID2 = 0.0F; pFH->_fAutosampleMembraneCap = 0.0F; pFH->fCellID3 = 0.0F; if (Param[C52_GAINMULTIPLIER] == 0.0F) pFH->_fAutosampleAdditGain = 1.0F; else pFH->_fAutosampleAdditGain = Param[C52_GAINMULTIPLIER]; pFH->_fAutosampleFilter = Param[C52_FILTERCUTOFF]; // 41 pFH->_nAutosampleADCNum = short(Param[C52_AUTOSAMPLEADCNUM]); // 96 pFH->lNumberOfTrials = ABFLONG(Param[C52_NUMTRIALS]); // 16 pFH->lRunsPerTrial = ABFLONG(Param[C52_RUNSPERFILE]); // 12 pFH->lEpisodesPerRun = ABFLONG(Param[C52_EPISODESPERRUN]); // 13 pFH->nADCNumChannels = short(Param[C52_ADCNUMCHANNELS]); pFH->nFirstEpisodeInRun = short(Param[C52_STARTEPISODENUM]); // 17 pFH->fTrialStartToStart = 0.0F; pFH->fEpisodeStartToStart = Param[C52_INTEREPISODETIME]; // 11 pFH->fScopeOutputInterval = Param[C52_STARTDELAY]; // 15 pFH->fADCRange = Param[C52_ADCRANGE]; pFH->fDACRange = Param[C52_DACRANGE]; pFH->lADCResolution = DataResolution(Param[C52_ADCRESOLUTION]); pFH->lDACResolution = DataResolution(Param[C52_DACRESOLUTION]); pFH->lDeltaArrayPtr = 0; pFH->lNumDeltas = 0; pFH->nDrawingStrategy = 1; // Display data in real time pFH->nTiledDisplay = 0; pFH->nEraseStrategy = short(Param[C52_AUTOERASE]); // 69 pFH->nChannelStatsStrategy = 1; // FETCHEX only pFH->lDisplayAverageUpdate = short(Param[C52_AVERAGEDDATADISPLAY]); // 65 pFH->nDataDisplayMode = short(Param[C52_DATADISPLAYMODE]); pFH->fTriggerThreshold = 0.0F; // FETCHEX only if (Param[C52_TRIGGERMODE] == 0.0F) pFH->nTriggerSource = short(Param[C52_ADCFIRSTLOGICALCHANNEL]); else pFH->nTriggerSource = short(-Param[C52_TRIGGERMODE]); pFH->nTriggerPolarity = 0; // FETCHEX only pFH->nAveragingMode = ABF_NOAVERAGING; // AXOTAPE only pFH->fSynchTimeUnit = 0.0F; pFH->lSynchArraySize = 0; // FETCHEX only pFH->lSynchArrayPtr = 0; // FETCHEX only pFH->lCalculationPeriod = 16384; // FETCHEX only pFH->lSamplesPerTrace = 16384; // FETCHEX only pFH->nTriggerAction = ABF_TRIGGER_STARTEPISODE; // Start one episode pFH->nUndoRunCount = 0; // Disabled pFH->lDataSectionPtr = 2; pFH->lAverageCount = (ABFLONG)(Param[C52_RUNSPERFILE]); pFH->fStatisticsPeriod = pFH->lCalculationPeriod * pFH->fADCSampleInterval / 1E3F; memcpy(pFH->_sFileComment, Comment, ABF_OLDFILECOMMENTLEN); // Set up the channel mapping // Channel numbers are always ascending for old CLAMPEX files // (AXOLAB-1, AXOLAB 1100, TL-1-125, TL-1-40, TL-3) // NOTE: AXOLAB 1100 only supports 8 channels (0-7) for (i=0; inADCPtoLChannelMap[i] = i; n = short(Param[C52_ADCFIRSTLOGICALCHANNEL]); for (i=0; inADCNumChannels; i++, n++) pFH->nADCSamplingSeq[i] = n; // Set rest of sampling sequence to -1 for (i=pFH->nADCNumChannels; inADCSamplingSeq[i] = -1; // Set up the ADC channel info for (i=0; ifInstrumentOffset[i] = 0.0F; pFH->fInstrumentScaleFactor[i] = 1.0F; pFH->fADCDisplayAmplification[i] = 1.0F; pFH->fADCDisplayOffset[i] = 0.0F; pFH->fSignalLowpassFilter[i] = ABF_FILTERDISABLED; pFH->fSignalHighpassFilter[i] = 0.0F; pFH->fADCProgrammableGain[i] = 1.0F; pFH->fSignalGain[i] = 1.0F; pFH->fSignalOffset[i] = 0.0F; } for (i=0; i < ABF_ADCCOUNT; i++) { // no physical to logical mapping necessary as CLAMPEX never supported // the TL2 strncpy(pFH->sADCUnits[i], ADCLabel+ABF_ADCUNITLEN*i, ABF_ADCUNITLEN); // protect against divide by zero errors from bad gains. if (Param[C52_INSTSCALEFACTOR + i] != 0.0F) pFH->fInstrumentScaleFactor[i] = Param[C52_INSTSCALEFACTOR + i]; if (Param[C52_ADCDISPLAYGAIN + i] != 0.0F) pFH->fADCDisplayAmplification[i] = Param[C52_ADCDISPLAYGAIN + i]; pFH->fInstrumentOffset[i] = Param[C52_INSTOFFSET + i]; pFH->fADCDisplayOffset[i] = Param[C52_ADCDISPLAYOFFSET + i] * pFH->fADCRange / pFH->fInstrumentScaleFactor[i] / pFH->fADCDisplayAmplification[i]; if ((pFH->_nAutosampleEnable != 0) && (i == pFH->_nAutosampleADCNum)) pFH->fADCDisplayOffset[i] /= pFH->_fAutosampleAdditGain; } memcpy(pFH->sDACChannelUnits[0], DACLabel, ABF_DACUNITLEN); for (i=0; ifDACScaleFactor[i] = Param[C52_GAINDACTOCELL]; pFH->fDACHoldingLevel[i] = Param[C52_DAC0HOLDINGLEVEL]; } // CLAMPEX specific parameter sections follow ... // GROUP #6 (14 bytes) - Synchronous timer outputs. if (((Param[C52_CH1PULSE] != 0.0F) || (Param[C52_CH2PULSE] != 0.0F)) && (Param[C52_LASTTRIGGEREPISODE] != 0.0F) ) pFH->nOUTEnable = 1; else pFH->nOUTEnable = 0; pFH->nSampleNumberOUT1 = short(Param[C52_PULSESAMPLECH1]); pFH->nSampleNumberOUT2 = short(Param[C52_PULSESAMPLECH2]); pFH->nFirstEpisodeOUT = short(Param[C52_FIRSTTRIGGEREPISODE]); pFH->nLastEpisodeOUT = short(Param[C52_LASTTRIGGEREPISODE]); pFH->nPulseSamplesOUT1 = short(Param[C52_CH1PULSE]); pFH->nPulseSamplesOUT2 = short(Param[C52_CH2PULSE]); // GROUP #7 (172 bytes) - Epoch Output Waveform and Pulses pFH->nDigitalEnable = 0; pFH->_nWaveformSource = 1; // Waveform from epochs. pFH->nActiveDACChannel = 0; pFH->_nInterEpisodeLevel = short(Param[C52_INTEREPISODEAMP]); pFH->_nEpochType[0] = short(Param[C52_EPOCHATYPE]); pFH->_fEpochInitLevel[0] = Param[C52_EPOCHALEVELINIT]; pFH->_fEpochLevelInc[0] = Param[C52_EPOCHAINCREMENT]; pFH->_nEpochInitDuration[0] = short(int(Param[C52_EPOCHAINITDURATION]) / pFH->nADCNumChannels); pFH->_nEpochDurationInc[0] = short(int(Param[C52_EPOCHADURATIONINC]) / pFH->nADCNumChannels); pFH->_nEpochType[1] = short(Param[C52_EPOCHBTYPE]); pFH->_fEpochInitLevel[1] = Param[C52_EPOCHBLEVELINIT]; pFH->_fEpochLevelInc[1] = Param[C52_EPOCHBINCREMENT]; pFH->_nEpochInitDuration[1] = short(int(Param[C52_EPOCHBINITDURATION]) / pFH->nADCNumChannels); pFH->_nEpochDurationInc[1] = short(int(Param[C52_EPOCHBDURATIONINC]) / pFH->nADCNumChannels); pFH->_nEpochType[2] = short(Param[C52_EPOCHCTYPE]); pFH->_fEpochInitLevel[2] = Param[C52_EPOCHCLEVELINIT]; pFH->_fEpochLevelInc[2] = Param[C52_EPOCHCINCREMENT]; pFH->_nEpochInitDuration[2] = short(int(Param[C52_EPOCHCINITDURATION]) / pFH->nADCNumChannels); pFH->_nEpochDurationInc[2] = short(int(Param[C52_EPOCHCDURATIONINC]) / pFH->nADCNumChannels); pFH->_nEpochType[3] = short(Param[C52_EPOCHDTYPE]); pFH->_fEpochInitLevel[3] = Param[C52_EPOCHDLEVELINIT]; pFH->_fEpochLevelInc[3] = Param[C52_EPOCHDINCREMENT]; pFH->_nEpochInitDuration[3] = short(int(Param[C52_EPOCHDINITDURATION]) / pFH->nADCNumChannels); pFH->_nEpochDurationInc[3] = short(int(Param[C52_EPOCHDDURATIONINC]) / pFH->nADCNumChannels); for (i=0; i<4; i++) { if ((pFH->_nEpochInitDuration[i] == 0) && (pFH->_nEpochDurationInc[i] == 0)) pFH->_nEpochType[i] = 0; } for (i=4; i_nEpochType[i] = 0; pFH->_fEpochInitLevel[i] = 0.0F; pFH->_fEpochLevelInc[i] = 0.0F; pFH->_nEpochInitDuration[i]= 0; pFH->_nEpochDurationInc[i] = 0; } pFH->nDigitalHolding = 0; pFH->nDigitalInterEpisode = 0; pFH->nDigitalTrainActiveLogic= 1; for (i=0; inDigitalValue[i] = 0; pFH->nDigitalTrainValue[i] = 0; } // GROUP #8 (80 bytes) - Analog Output File Waveform pFH->_fDACFileScale = 1.0F; pFH->_fDACFileOffset = 0.0F; pFH->_nDACFileEpisodeNum = 1; pFH->_nDACFileADCNum = 1; // GROUP #9 (32 bytes) - Presweep (conditioning) pulse train. if (Param[C52_PULSESINTRAIN] != 0.0F) pFH->_nConditEnable = 1; else pFH->_nConditEnable = 0; pFH->_nConditChannel = 0; pFH->_lConditNumPulses = (ABFLONG)(Param[C52_PULSESINTRAIN]); pFH->_fBaselineDuration = Param[C52_PRECONDURATION]; pFH->_fBaselineLevel = Param[C52_PRECONLEVEL]; pFH->_fStepDuration = Param[C52_CONDURATION]; pFH->_fStepLevel = Param[C52_CONLEVEL]; pFH->_fPostTrainPeriod = Param[C52_POSTCONDURATION]; pFH->_fPostTrainLevel = Param[C52_POSTCONLEVEL]; // GROUP #10 ( 82 bytes) - Variable parameter list. // remap old parameter number to start at 1 for C52_PULSESINTRAIN. See const // definitions in ABFFILES.INC if (Param[C52_CONDITVARIABLE] != 0) { pFH->_nListEnable = 1; pFH->_nParamToVary = short(Param[C52_CONDITVARIABLE] - C52_PULSESINTRAIN + 0.5F); } else { pFH->_nListEnable = 0; pFH->_nParamToVary = 0; } strncpy(pFH->_sParamValueList, Condit, ABF_OLDCONDITLEN); // GROUP #11 (14 bytes) - Autopeak measurement. if (Param[C52_AUTOPEAKSEARCHMODE] == 0) pFH->nStatsEnable = 0; else pFH->nStatsEnable = 1; UINT uBitMask = 0x01 << short(Param[C52_AUTOPEAKCHANNEL]); pFH->nStatsActiveChannels = (short)uBitMask; n = short(Param[C52_AUTOPEAKSEARCHMODE]); for (UINT uRegion = 0; uRegion < ABF_STATS_REGIONS; uRegion++) { switch (n) { case 5: pFH->nStatsSearchMode[ uRegion ] = ABF_PEAK_SEARCH_ALL; break; case 6: pFH->nStatsSearchMode[ uRegion ] = 0; break; default: pFH->nStatsSearchMode[ uRegion ] = short(Param[C52_AUTOPEAKSEARCHMODE]); break; } pFH->lStatsStart[ uRegion ] = 0; pFH->lStatsEnd[ uRegion ] = 0; } for (UINT uChannel = 0; uChannel < ABF_ADCCOUNT; uChannel++) { if (Param[C52_AUTOPEAKCENTER] < 0) pFH->nStatsChannelPolarity[ uChannel ] = ABF_PEAK_NEGATIVE; else pFH->nStatsChannelPolarity[ uChannel ] = ABF_PEAK_POSITIVE; } pFH->nStatsBaseline = short(Param[C52_BASELINECALCULATION]); pFH->nStatsSmoothing = short(Param[C52_AUTOPEAKAVPOINTS]); if (pFH->nStatsSmoothing < 1) pFH->nStatsSmoothing = 1; // GROUP #12 (40 bytes) - Channel Arithmetic pFH->nArithmeticEnable = 0; pFH->fArithmeticUpperLimit = 0.0F; pFH->fArithmeticLowerLimit = 0.0F; pFH->nArithmeticADCNumA = 0; pFH->nArithmeticADCNumB = 0; pFH->fArithmeticK1 = 0.0F; pFH->fArithmeticK2 = 0.0F; pFH->fArithmeticK3 = 0.0F; pFH->fArithmeticK4 = 0.0F; pFH->fArithmeticK5 = 0.0F; pFH->fArithmeticK6 = 0.0F; memcpy(pFH->sArithmeticOperator, "+ ", ABF_ARITHMETICOPLEN); pFH->nArithmeticExpression = ABF_SIMPLE_EXPRESSION; // GROUP #13 (20 bytes) - On-line subtraction. if (Param[C52_PNNUMPULSES] != 0) { pFH->_nPNEnable = 1; pFH->nPNNumPulses = short(fabs(Param[C52_PNNUMPULSES])); } else { pFH->_nPNEnable = 0; pFH->nPNNumPulses = 1; } if (Param[C52_PNNUMPULSES] < 0) pFH->_nPNPolarity = ABF_PN_SAME_POLARITY; else pFH->_nPNPolarity = ABF_PN_OPPOSITE_POLARITY; pFH->nPNPosition = 0; pFH->_nPNADCNum = short(Param[C52_PNADCNUM]); pFH->_fPNHoldingLevel = Param[C52_PNHOLDINGLEVEL]; pFH->fPNSettlingTime = Param[C52_PNSETTLINGTIME]; pFH->fPNInterpulse = Param[C52_PNINTERPULSE]; if (pFH->fPNInterpulse > 0.0F) { if (pFH->fADCSecondSampleInterval == 0.0F) EpiTime = pFH->fADCSampleInterval * pFH->lNumSamplesPerEpisode; else EpiTime = (pFH->fADCSampleInterval + pFH->fADCSecondSampleInterval) * pFH->lNumSamplesPerEpisode/2; pFH->fPNInterpulse += EpiTime / 1E3F; } } //=============================================================================================== // FUNCTION: ClampexConvert // PURPOSE: Convert an old CLAMPEX file to the current ABF format. // static int ClampexConvert( FILEHANDLE hFile, ABFFileHeader *pFH, float *Param, char *Comment, char *Label, int *pnError ) { char ADCLabel[ABF_ADCCOUNT*ABF_ADCUNITLEN]; char DACLabel[ABF_DACCOUNT*ABF_DACUNITLEN]; char ConditStr[ABF_OLDCONDITLEN]; ABF_BLANK_FILL(ADCLabel); ABF_BLANK_FILL(DACLabel); ABF_BLANK_FILL(ConditStr); GetOldDACUnits(Label, DACLabel); // Handle the case of old (pre-version 5) files. if (Param[C52_FILEVERSIONNUMBER] < 5.0F) { ClampexToV5_2(Param); GetOldADCUnits(Label, ADCLabel); // Read in the conditioning string if (!ReadCondit(hFile, ConditStr)) ERRORRETURN(pnError, ABFH_EHEADERREAD); } else // Handle the case of version 5 (and later) files. { if (Param[C52_FILEVERSIONNUMBER] < 5.1999F) // MAC doen't like 5.2F { Param[C52_GAINMULTIPLIER] = 1.0F; Param[C52_FILTERCUTOFF] = ABF_FILTERDISABLED; Param[C52_AUTOSAMPLEINSTRUMENT] = 3.0F; Param[C52_INTEREPISODEAMP] = 0.0F; Param[C52_INTEREPISODEWRITE] = 0.0F; } else if (Param[C52_AUTOSAMPLEINSTRUMENT] == 3.0F) { Param[C52_GAINMULTIPLIER] = 1.0F; Param[C52_FILTERCUTOFF] = ABF_FILTERDISABLED; } // Read in the conditioning string if (!ReadCondit(hFile, ConditStr)) ERRORRETURN(pnError, ABFH_EHEADERREAD); // Read the extended parameters (81-96). (16 x 4-byte floats) if (!ABFU_ReadFile(hFile, Param+80, 16 * sizeof(float))) ERRORRETURN(pnError, ABFH_EHEADERREAD); if (!ReadADCInfo(hFile, Param, ADCLabel)) ERRORRETURN(pnError, ABFH_EHEADERREAD); } ClampexToABF1_x(Param, ADCLabel, DACLabel, ConditStr, Comment, pFH); return TRUE; } //=============================================================================================== // FUNCTION: ReadOldHeader // PURPOSE: This is the main routine to read old FETCHEX and CLAMPEX data headers. // BOOL OLDH_ReadOldHeader( FILEHANDLE hFile, UINT uFileType, int bMSBinFormat, ABFFileHeader *pFH, ABFLONG lFileLength, int *pnError) { // ABFH_WASSERT(pFH); int i; BOOL bRval; float Param[ABF_OLDPARAMSIZE]; // Allocate old arrays for reading the data char Comment[ABF_OLDCOMMENTLEN]; char Label[5 * ABF_OLDUNITLEN]; // Read parameters 1-80 (80 x 4-byte floats) if (!ABFU_ReadFile(hFile, Param, 80 * sizeof(float))) ERRORRETURN(pnError, ABFH_EHEADERREAD); // convert the parameters to IEEE floating-point format if necessary. if (bMSBinFormat) { for (i=0; i < 80; i++) fMSBintoIeee(Param+i, Param+i); for(i=80; i < ABF_OLDPARAMSIZE; i++) Param[i] = 0.0F; } // Read the file comment. if (!ABFU_ReadFile(hFile, Comment, ABF_OLDCOMMENTLEN)) ERRORRETURN(pnError, ABFH_EHEADERREAD); // Read the units-of-measure strings into a single string. if (!ABFU_ReadFile(hFile, Label, sizeof(Label))) ERRORRETURN(pnError, ABFH_EHEADERREAD); if (uFileType == ABF_FETCHEX) bRval = FetchexConvert(hFile, pFH, Param, Comment, Label, pnError); else bRval = ClampexConvert(hFile, pFH, Param, Comment, Label, pnError); pFH->nFileType = short(uFileType); pFH->nMSBinFormat = short(bMSBinFormat); // // Check data length against the length of the file. Some old versions of AXOTAPE // incorrectly set the number of 512 byte blocks per episode to 512. // ABFLONG lMaxLength = (lFileLength - pFH->lDataSectionPtr * 512L - pFH->lSynchArraySize * 8L) / 2L; if (pFH->lActualAcqLength > lMaxLength) { if ((pFH->nOperationMode != ABF_VARLENEVENTS) && (pFH->nOperationMode != ABF_GAPFREEFILE)) { ABFLONG lNumEpisodes = lMaxLength / pFH->lNumSamplesPerEpisode; pFH->lActualEpisodes = lNumEpisodes; if (pFH->lSynchArraySize != 0L) pFH->lSynchArraySize = lNumEpisodes; lMaxLength = lNumEpisodes * pFH->lNumSamplesPerEpisode; } pFH->lActualAcqLength = lMaxLength; } // Bring the header up to the current version. OLDH_ABFtoABF15(pFH); OLDH_ABFtoCurrentVersion(pFH); return bRval; } stimfit-0.17.1/src/libstfio/abf/axon/AxAbfFio32/abferror.cpp000077500000000000000000000203751517235503400234670ustar00rootroot00000000000000//*********************************************************************************************** // // Copyright (c) 1993-1997 Axon Instruments. // All rights reserved. // Permission is granted to freely to use, modify and copy the code in this file. // //*********************************************************************************************** // // MODULE: ABFERROR.STR // PURPOSE: Include file containing the string table for ABF error strings. // #include #include #include "./../Common/axodefn.h" #include "abffiles.h" #include "./../Common/resource.h" void initErrorMap(std::map& myMap) { #define STR(i, s) myMap[i]=s; #define BEGIN #define END #define STRINGTABLE #define DISCARDABLE STRINGTABLE DISCARDABLE BEGIN STR(ABF_EUNKNOWNFILETYPE, "File '%s' is of unknown file type.") STR(ABF_EBADFILEINDEX, "INTERNAL ERROR: bad file index.") STR(ABF_TOOMANYFILESOPEN, "INTERNAL ERROR: too many files open.") STR(ABF_EOPENFILE, "Cannot open file '%s'.") STR(ABF_EBADPARAMETERS, "File '%s' has invalid parameters.") STR(ABF_EREADDATA, "File '%s': error reading data.") STR(ABF_OUTOFMEMORY, "Out of memory reading file '%s'.") STR(ABF_EREADSYNCH, "File '%s': error reading synch array.") STR(ABF_EBADSYNCH, "File '%s': has a corrupted synch array.") STR(ABF_EEPISODERANGE, "INTERNAL ERROR: File '%s': episode out of range.") STR(ABF_EINVALIDCHANNEL, "INTERNAL ERROR: File '%s': invalid channel number.") STR(ABF_EEPISODESIZE, "File '%s': has an invalid episode size.") STR(ABF_EREADONLYFILE, "INTERNAL ERROR: file '%s' is read only.") STR(ABF_EDISKFULL, "Insufficient disk space for file '%s'.") STR(ABF_ENOTAGS, "INTERNAL ERROR: File '%s' does not contain any tag information.") STR(ABF_EREADTAG, "Error reading tag from file '%s'.") STR(ABF_ENOSYNCHPRESENT, "INTERNAL ERROR: No synch array is present in file '%s'.") STR(ABF_EREADDACEPISODE, "Error reading DAC episode from file '%s'.") STR(ABF_ENOWAVEFORM, "INTERNAL ERROR: No waveform defined.") STR(ABF_EBADWAVEFORM, "INTERNAL ERROR: Bad waveform definition.") STR(ABF_BADMATHCHANNEL, "INTERNAL ERROR: Bad math channel description.") STR(ABF_BADTEMPFILE, "Could not create a temporary file.") STR(ABF_NODOSFILEHANDLES, "No DOS file handles were available - too many files open.") STR(ABF_ENOSCOPESPRESENT, "INTERNAL ERROR: File '%s' does not contain any scope configuration information.") STR(ABF_EREADSCOPECONFIG, "Error reading scope configuration from file '%s'.") STR(ABF_EBADCRC, "INTERNAL ERROR: Bad CRC on reading ABF file -- file may be corrupted.") STR(ABF_ENOCOMPRESSION, "Data compression is not supported on this platform.") STR(ABF_EREADDELTA, "Error reading delta from file '%s'.") STR(ABF_ENODELTAS, "INTERNAL ERROR: File '%s' does not contain any delta information.") STR(ABF_EBADDELTAID, "INTERNAL ERROR: ABFDelta has an unknown parameter ID.") STR(ABF_EWRITEONLYFILE, "INTERNAL ERROR: file '%s' is write only.") STR(ABF_ENOSTATISTICSCONFIG, "INTERNAL ERROR: File '%s' does not contain a statistics window configuration structure.") STR(ABF_EREADSTATISTICSCONFIG, "INTERNAL ERROR: Error reading statistics window configuration from file '%s'.") STR(ABF_EWRITERAWDATAFILE, "INTERNAL ERROR: Cannot modify raw data files.") STR(ABF_EWRITEMATHCHANNEL, "INTERNAL ERROR: Cannot modify math channels.") STR(ABFH_EHEADERREAD, "Error reading file header.") STR(ABFH_EHEADERWRITE, "Error writing file header.") STR(ABFH_EINVALIDFILE, "Not a valid ABF file.") STR(ABFH_EUNKNOWNFILETYPE, "Not a valid ABF file.") STR(ABFH_CHANNELNOTSAMPLED,"The requested Analog IN channel was not sampled.") STR(ABFH_EPOCHNOTPRESENT, "The requested epoch is not present.") STR(ABFH_ENOWAVEFORM, "No waveform was defined.") STR(ABFH_EDACFILEWAVEFORM, "Waveform was defined by a DAC file.") STR(ABFH_ENOMEMORY, "Out of memory!") STR(ABFH_BADSAMPLEINTERVAL, "Invalid sample interval.") STR(ABFH_BADSECONDSAMPLEINTERVAL,"Invalid second sample interval.") STR(ABFH_BADSAMPLEINTERVALS, "The first and second sampling intervals must be integer multiples of each other.") STR(ABFH_ENOCONDITTRAINS, "There is an error in the User List.\n\nConditioning trains must be enabled in order to vary this parameter.") STR(ABFH_EMETADURATION, "There is an error in the User List.\n\nThe conditioning train duration is too long. Either reduce the duration or increase the sweep start to start time.") STR(ABFH_ECONDITNUMPULSES, "There is an error in the User List.\n\nThe number of pulses in the conditioning train must be between 1 and 10000.") STR(ABFH_ECONDITBASEDUR, "There is an error in the User List.\n\nThe conditioning train baseline duration must be between 0.01 and 10000 ms.") STR(ABFH_ECONDITBASELEVEL, "There is an error in the User List.\n\nThe conditioning train baseline level is out of range.") STR(ABFH_ECONDITPOSTTRAINDUR, "There is an error in the User List.\n\nThe conditioning train post-train duration must be between 0 and 10000 ms.") STR(ABFH_ECONDITPOSTTRAINLEVEL, "There is an error in the User List.\n\nThe conditioning train post-train level is out of range.") STR(ABFH_ESTART2START, "There is an error in the User List.\n\nThe time between sweep starts is too short.") STR(ABFH_EINACTIVEHOLDING, "There is an error in the User List.\n\nThe inactive analog OUT holding level is out of range.") STR(ABFH_EINVALIDCHARS, "The user list contains invalid characters or is empty.\n\nValid characters are: 0..9 E e + - .\n\nValid characters for binary values: 0 1 *.") STR(ABFH_EINVALIDBINARYCHARS, "The user list contains invalid characters.\n\nValid characters for binary values are: 0 1 *,\n\nA * is valid for defining a digital train.") STR(ABFH_ENODIG, "There is an error in the User List.\n\nThe waveform digital outputs must be enabled in order to vary this parameter.") STR(ABFH_EDIGHOLDLEVEL, "There is an error in the User List.\n\nThe waveform digital inter-sweep holding level is out of range.") STR(ABFH_ENOPNPULSES, "There is an error in the User List.\n\nP/N leak subtraction must be enabled in order to vary this parameter.") STR(ABFH_EPNNUMPULSES, "There is an error in the User List.\n\nThe number of P/N leak subtraction sub-sweeps must be between 1 and 8.") STR(ABFH_ENOEPOCH, "There is an error in the User List.\n\nThe waveform epoch requested in the user list must be enabled in order to vary this parameter.") STR(ABFH_EEPOCHLEN, "There is an error in the User List.\n\nThe waveform duration is too long. Either reduce the waveform duration or increase the sweep duration.") STR(ABFH_EEPOCHINITLEVEL, "There is an error in the User List.\n\nThe waveform initial level is out of range.") STR(ABFH_EDIGLEVEL, "There is an error in the User List.\n\nThe waveform digital pattern is out of range.") STR(ABFH_ECONDITSTEPLEVEL, "There is an error in the User List.\n\nThe conditioning train step level is out of range.") STR(ABFH_ECONDITSTEPDUR, "There is an error in the User List.\n\nThe conditioning train step duration must be between 0.01 and 10000 ms.") STR(ABF_ECRCVALIDATIONFAILED, "The Cyclic Redundancy Code (CRC) validation failed while opening the file.") STR(IDS_ENOMESSAGESTR, "INTERNAL ERROR: No message string assigned to error %d.") STR(IDS_EPITAGHEADINGS, "Tag # Time (s) Episode Comment") STR(IDS_CONTTAGHEADINGS, "Tag # Time (s) Comment") STR(IDS_NONE, "") STR(IDS_CANNOTLOAD, "This version of ABFInfo is out of date.") STR(IDS_MATHCHANNEL, "Math") END } extern "C" INT WINAPI c_LoadString( HINSTANCE instance, UINT resource_id, char* buffer, INT buflen ) { std::map errorMap; initErrorMap(errorMap); strcpy(buffer,errorMap[resource_id].c_str()); return (int)errorMap[resource_id].length(); } stimfit-0.17.1/src/libstfio/abf/axon/AxAbfFio32/abffiles.cpp000066400000000000000000005151621517235503400234400ustar00rootroot00000000000000//*********************************************************************************************** // // Copyright (c) 1993-2000 Axon Instruments. // All rights reserved. // Permission is granted to freely to use, modify and copy the code in this file. // //*********************************************************************************************** // // MODULE: ABFFILES.CPP // PURPOSE: Contains the low level multi data file I/O package for ABF data files. // // An ANSI C++ compiler should be used for compilation. // Compile with the large memory model option. // (e.g. CL -c -AL ABFFILES.C) #include "../Common/wincpp.hpp" #include "abffiles.h" #include "../../axon2/abf2headr.h" #include "csynch.hpp" // Virtual synch array object #include "filedesc.hpp" // File descriptors for ABF files. #include "./../Common/ArrayPtr.hpp" // Smart array pointer template class. #include "./../Common/FileReadCache.hpp" // // Set the maximum number of files that can be open simultaneously. // This can be overridden from the compiler command line. // #ifndef ABF_MAXFILES #define ABF_MAXFILES 64 #endif #define ABF_DEFAULTCHUNKSIZE 8192 // Default chunk size for reading gap-free amd var-len files. #if !defined(_WINDOWS) || defined(__MINGW32__) || defined(__STF__) #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif /* // Set USE_DACFILE_FIX to 1 to use the fix (incomplete) for DAC File channels. #define USE_DACFILE_FIX 0 //------------------------------------ Shared Variables ----------------------------------------- */ static CFileDescriptor *g_FileData[ABF_MAXFILES]; HINSTANCE g_hInstance = NULL; //=============================================================================================== static BOOL ReadEDVarLenSynch(CFileDescriptor *pFI, ABFFileHeader *pFH, DWORD *pdwMaxEpi, UINT *puMaxSamples, int *pnError); static BOOL ReadEDFixLenSynch(CFileDescriptor *pFI, const ABFFileHeader *pFH, DWORD *pdwMaxEpi, BOOL bAllowOverlap, int *pnError); static BOOL ReadOldSynchArray(CFileDescriptor *pFI, ABFFileHeader *pFH, DWORD *pdwMaxEpi, int *pnError); //=============================================================================================== // Macros and functions to deal with returning error return codes through a pointer if given. #define ERRORRETURN(p, e) return ErrorReturn(p, e); static BOOL ErrorReturn(int *pnError, int nErrorNum) { if (pnError) *pnError = nErrorNum; return FALSE; } //=============================================================================================== // FUNCTION: GetNewFileDescriptor // PURPOSE: Allocate a new file descriptor and return it. // BOOL GetNewFileDescriptor(CFileDescriptor **ppFI, int *pnFile, int *pnError) { // WPTRASSERT(ppFI); // WPTRASSERT(pnFile); int nFile; // Find an empty slot. for (nFile=0; nFile < ABF_MAXFILES; nFile++) if (g_FileData[nFile] == NULL) break; // Return an error if no space left. if (nFile == ABF_MAXFILES) return ErrorReturn(pnError, ABF_TOOMANYFILESOPEN); // Allocate a new descriptor. CFileDescriptor *pFI = new CFileDescriptor; if (pFI == NULL) return ErrorReturn(pnError, ABF_OUTOFMEMORY); if (!pFI->IsOK()) { delete pFI; return ErrorReturn(pnError, ABF_BADTEMPFILE); } *ppFI = g_FileData[nFile] = pFI; *pnFile = nFile; return TRUE; } //----------------------------------------------------------------------------------------------- // FUNCTION: GetFileDescriptor // PURPOSE: Retreive an existing file descriptor. // BOOL GetFileDescriptor(CFileDescriptor **ppFI, int nFile, int *pnError) { // WPTRASSERT(ppFI); // Check that index is within range. if ((nFile < 0) || (nFile >= ABF_MAXFILES)) return ErrorReturn(pnError, ABF_EBADFILEINDEX); // Get a pointer to the descriptor. CFileDescriptor *pFI = g_FileData[nFile]; if (pFI == NULL) return ErrorReturn(pnError, ABF_EBADFILEINDEX); // Return the descriptor. *ppFI = pFI; return TRUE; } //----------------------------------------------------------------------------------------------- // FUNCTION: ReleaseFileDescriptor // PURPOSE: Release an existing file descriptor. // void ReleaseFileDescriptor(int nFile) { delete g_FileData[nFile]; g_FileData[nFile] = NULL; } //=============================================================================================== // FUNCTION: SampleSize // PURPOSE: Get the sample size used in the data described by the header. // static UINT SampleSize(const ABFFileHeader *pFH) { // ABFH_ASSERT(pFH); return (pFH->nDataFormat != ABF_INTEGERDATA) ? sizeof(float) : sizeof(short); } //=============================================================================================== // FUNCTION: SampleSize // PURPOSE: Get the sample size used in the data described by the header. // static UINT ABF2_SampleSize(const ABF2FileHeader *pFH) { // ABFH_ASSERT(pFH); return (pFH->nDataFormat != ABF_INTEGERDATA) ? sizeof(float) : sizeof(short); } //=============================================================================================== // FUNCTION: GetDataOffset // PURPOSE: Get the file offset to the data allowing for "ignored" points from old AxoLab files. // static ABFLONG GetDataOffset(const ABFFileHeader *pFH) { // ABFH_ASSERT(pFH); ABFLONG lDataOffset = pFH->lDataSectionPtr * ABF_BLOCKSIZE; // Adjust the data pointer for any garbage data words at the start of // the data portion of the file. (Created by AxoLab in continuous // files only) if (pFH->nOperationMode == ABF_GAPFREEFILE) lDataOffset += pFH->nNumPointsIgnored * SampleSize(pFH); return lDataOffset; } //=============================================================================================== // FUNCTION: GetDataOffset // PURPOSE: Get the file offset to the data allowing for "ignored" points from old AxoLab files. // static ABFLONG ABF2_GetDataOffset(const ABF2FileHeader *pFH) { // ABFH_ASSERT(pFH); ABFLONG lDataOffset = pFH->lDataSectionPtr * ABF_BLOCKSIZE; // Adjust the data pointer for any garbage data words at the start of // the data portion of the file. (Created by AxoLab in continuous // files only) if (pFH->nOperationMode == ABF_GAPFREEFILE) lDataOffset += pFH->nNumPointsIgnored * ABF2_SampleSize(pFH); return lDataOffset; } #if 0 //============================================================================================== // FUNCTION: CalculateCRC // PURPOSE: Return checksum Cyclic Redundancy Code CRC. // unsigned ABFLONG CalculateCRC( CFileDescriptor *pFI ) { WPTRASSERT( pFI); LONGLONG llReadPointer = 0L; BOOL bReadOk = FALSE; char acBuffer[ ABF_BLOCKSIZE ] = {0}; CRC crc(CRC::CRC_32); // Get the total length of the file. LONGLONG llFileLength = pFI->GetFileSize(); ASSERT(llFileLength >= sizeof(ABFFileHeader)); VERIFY(pFI->Seek( 0L, FILE_BEGIN)); while( llReadPointer < llFileLength ) { // Read a file block into the buffer. bReadOk = pFI->Read( acBuffer, ABF_BLOCKSIZE ); ASSERT( bReadOk ); // Update the CRC of the buffer crc.Update(acBuffer, ABF_BLOCKSIZE ); llReadPointer += ABF_BLOCKSIZE; } //#ifdef _DEBUG // TRACE1("Calculate CRC Value %X\n", crc.Value() ); //#endif // Set pointer at the beggining. VERIFY(pFI->Seek( 0L, FILE_BEGIN)); return crc.Value(); } //============================================================================================== // FUNCTION: ValidateFileCRC // PURPOSE: // static BOOL ValidateFileCRC( CFileDescriptor *pFI, ABFFileHeader *pFH, int nSizeOfHeader ) { WPTRASSERT( pFI ); WPTRASSERT( pFH ); // Validate CRC for files that support it. // The versions of ABF 1.82 and higher support CRC checksum. if( pFH->fFileVersionNumber < ABF_V182 ) return TRUE; // Valid and no checking. unsigned ABFLONG ulExpectedCRC = 0L; LONGLONG llReadPointer = 0L; BOOL bReadOk = FALSE; char acBuffer[ ABF_BLOCKSIZE ] = {0}; CRC crc(CRC::CRC_32); // Keep expected CRC value from header. ulExpectedCRC = pFH->ulFileCRC; // Zero the lFileCRC. The CRC is generated with this field as zero. pFH->ulFileCRC = 0; // Get the total length of the file. LONGLONG llFileLength = pFI->GetFileSize(); ASSERT(llFileLength >= nSizeOfHeader ); crc.Update( pFH, nSizeOfHeader ); llReadPointer = nSizeOfHeader; VERIFY(pFI->Seek( llReadPointer, FILE_BEGIN)); while( llReadPointer < llFileLength ) { // Read a file block into the buffer. bReadOk = pFI->Read( acBuffer, ABF_BLOCKSIZE ); ASSERT( bReadOk ); // Update the CRC of the buffer crc.Update(acBuffer, ABF_BLOCKSIZE ); llReadPointer += ABF_BLOCKSIZE; } #ifdef _DEBUG TRACE1("Validate CRC Value %X\n", crc.Value() ); #endif // Set pointer at the beggining. VERIFY(pFI->Seek( 0L, FILE_BEGIN)); unsigned ABFLONG ulFileCRC = crc.Value(); // Compare expected CRC with file CRC. if ( ulFileCRC != ulExpectedCRC ) { #ifdef _DEBUG TRACE( "File CRC Validation Failed\n" ); #endif return FALSE; } #ifdef _DEBUG TRACE( "File CRC Validation OK\n" ); #endif return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF_Initialize() // PARAMETERS: // hInstance - Instance handle from which resources will be taken. // RETURNS: // BOOL - TRUE = Initialization was successful. // // PURPOSE: This function should be called before any of the other API functions. // NOTES: This function is not exported as it is called from the DLL startup code. If the // API is bound into an executable rather than a DLL it will need to be called // explicitly. // BOOL ABF_Initialize() { // Protect against multiple calls. /* if (g_hInstance != NULL) return TRUE; // Save the DLL instance handle. g_hInstance = hDLL; */ for (int i=0; i 15) // UINT uAvailableFiles = SetHandleCount(ABF_MAXFILES); uAvailableFiles = uAvailableFiles; #endif return TRUE; } #if 0 //=============================================================================================== // FUNCTION: ABF_Cleanup // PURPOSE: Cleanup function, only applicable to DOS & Windows programs, not DLLs. // NOTES: This function is not exported as it is called from the DLL startup code. If the // API is bound into an executable rather than a DLL it will need to be called // explicitly. // void ABF_Cleanup(void) { for (int i=0; iGetFileName()); ABF_Close(i, NULL); } } } #endif //=============================================================================================== // FUNCTION: ABF_ReadOpen // PURPOSE: This routine opens an existing data file for reading. It reads the acquisition // parameters, ADC/DAC unit strings and comment string from the file header. // INPUT: // szFileName the name of the data file that will be opened // fFlags Flag for whether the file is a parameter file // puMaxSamples points to the requested size of data blocks to be returned. // This is only used in the case of GAPFREE and EVENT-DETECTED- // VARIABLE-LENGTH acquisitions. Otherwise the size of the // Episode is used. 80x86 limitations require this to be // less than or equal to 64k. // pdwMaxEpi The maximum number of episodes to be read. // OUTPUT: // pFH the acquisition parameters that were read from the data file // phFile pointer to the ABF file number of this file (NOT the DOS handle) // puMaxSamples the maximum number of samples that can be read contiguously // from the data file. // pdwMaxEpi the number of episodes of puMaxSamples points that exist // in the data file. // BOOL WINAPI ABF_ReadOpen(LPCTSTR szFileName, int *phFile, UINT fFlags, ABFFileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError) { //LPSZASSERT(szFileName); WPTRASSERT(phFile); // CSH ABFH_WASSERT(pFH); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); int nError = 0; CFileDescriptor *pFI = NULL; UINT uDAC = 0; // Get a new file descriptor if available. if (!GetNewFileDescriptor(&pFI, phFile, pnError)) return FALSE; // Now open the file for reading. if (!pFI->Open(szFileName, TRUE)) { nError = pFI->GetLastError(); goto RCloseAndAbort; } // Read the data file parameters. if (!ABFH_ParamReader(pFI->GetFileHandle(), &NewFH, &nError)) { nError = (nError == ABFH_EUNKNOWNFILETYPE) ? ABF_EUNKNOWNFILETYPE : ABF_EBADPARAMETERS; goto RCloseAndAbort; } if (NewFH.lFileSignature == ABF_REVERSESIGNATURE) { nError = ABF_EBADPARAMETERS; goto RCloseAndAbort; } // if we are reading a parameter file, we are done. if (fFlags & ABF_PARAMFILE) { // If it is an old (pre-ABF file), update file version and file type. if( (NewFH.nFileType == ABF_CLAMPEX) || (NewFH.nFileType == ABF_FETCHEX) ) { NewFH.nFileType = ABF_ABFFILE; NewFH.fFileVersionNumber = ABF_CURRENTVERSION; } pFI->SetFlag(FI_PARAMFILE); // Restore the original header. ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; } // Check for valid parameters. // WPTRASSERT(puMaxSamples); // WPTRASSERT(pdwMaxEpi); // Check that the data file actually contains data. if ((NewFH.lActualAcqLength <= 0) || (NewFH.nADCNumChannels <= 0)) { nError = ABF_EBADPARAMETERS; goto RCloseAndAbort; } // Disable stimulus file output if data file does not include any // stimulus file sweeps. This is to prevent problems later when // looking for a non-existent DACFile section. for( uDAC=0; uDACSetAcquiredEpisodes(*pdwMaxEpi); pFI->SetAcquiredSamples(NewFH.lActualAcqLength); // Seek to start of Data section pFI->Seek(GetDataOffset(&NewFH), FILE_BEGIN); // Restore the original header. ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; RCloseAndAbort: ASSERT(nError!=0); ReleaseFileDescriptor(*phFile); phFile = ABF_INVALID_HANDLE; return ErrorReturn(pnError, nError); } #if 0 //=============================================================================================== // FUNCTION: ABF_IsABFFile // PURPOSE: This routine opens a file and determines if it is an ABF file or not. // RETURNS: TRUE if the file is an ABF file. The type of ABF file is returned in // *pnDataFormat: ABF_INTEGERDATA or ABF_FLOATDATA. // BOOL WINAPI ABF_IsABFFile(const char *szFileName, int *pnDataFormat, int *pnError) { LPSZASSERT(szFileName); int nError = 0; // Now open the file for reading. HANDLE hHandle = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hHandle == INVALID_HANDLE_VALUE) { if (GetLastError()==ERROR_TOO_MANY_OPEN_FILES) return ErrorReturn(pnError, ABF_NODOSFILEHANDLES); return ErrorReturn(pnError, ABF_EOPENFILE); } // Read the data file parameters. ABFFileHeader FH; if (!ABFH_ParamReader(hHandle, &FH, &nError)) { if (nError == ABFH_EUNKNOWNFILETYPE) nError = ABF_EUNKNOWNFILETYPE; else nError = ABF_EBADPARAMETERS; } CloseHandle(hHandle); if (nError) return ErrorReturn(pnError, nError); if (pnDataFormat) *pnDataFormat = FH.nDataFormat; return TRUE; } //=============================================================================================== // FUNCTION: ABF_WriteOpen // PURPOSE: This routine opens an existing data file for writing. // It writes all the acquisition parameters to the file header. // INPUT: // szFileName the name of the data file that will be opened // phFile pointer to the ABF file number of this file (NOT the DOS handle) // fFlags Flag for whether the file is a parameter file // pFH the acquisition parameters to be written to the data file // // OUTPUT: // NONE. // BOOL WINAPI ABF_WriteOpen(LPCSTR szFileName, int *phFile, UINT fFlags, ABFFileHeader *pFH, int *pnError) { LPSZASSERT(szFileName); WPTRASSERT(phFile); ABFH_WASSERT(pFH); // Get a new file descriptor if available. CFileDescriptor *pFI = NULL; if (!GetNewFileDescriptor(&pFI, phFile, pnError)) return FALSE; // Now create and open the file for writing if (!pFI->Open(szFileName, FALSE)) { // An error has occurred, cleanup and return the error. int nError = pFI->GetLastError(); ReleaseFileDescriptor(*phFile); *phFile = ABF_INVALID_HANDLE; return ErrorReturn(pnError, nError); } // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); NewFH.lDataSectionPtr = sizeof(ABFFileHeader) / ABF_BLOCKSIZE; NewFH.lScopeConfigPtr = 0; NewFH.lStatisticsConfigPtr = 0; NewFH.lNumScopes = 0; NewFH.lActualAcqLength = 0; NewFH.lActualEpisodes = 0; NewFH.nNumPointsIgnored = 0; NewFH.lTagSectionPtr = 0; NewFH.lNumTagEntries = 0; NewFH._lDACFilePtr = 0; NewFH._lDACFileNumEpisodes = 0; NewFH.lDeltaArrayPtr = 0; NewFH.lNumDeltas = 0; NewFH.lSynchArrayPtr = 0; NewFH.lSynchArraySize = 0; NewFH.lVoiceTagPtr = 0; NewFH.lVoiceTagEntries = 0; NewFH.lAnnotationSectionPtr= 0; NewFH.lNumAnnotations = 0; NewFH.ulFileCRC = 0; for( UINT i=0; iSetFlag(FI_PARAMFILE); // Create a GUID for this file. NewFH.FileGUID = GUID_NULL; ::CoCreateGuid(&NewFH.FileGUID); // Write the data file parameters, returning if successful. if (!ABFH_ParamWriter(pFI->GetFileHandle(), &NewFH, NULL)) { // An error has occurred, cleanup and return the error. ReleaseFileDescriptor(*phFile); *phFile = ABF_INVALID_HANDLE; remove(szFileName); return ErrorReturn(pnError, ABF_EDISKFULL); } // Calculate CRC in current file descriptor. // lFileCRC needs to be zero during the calculation. NewFH.ulFileCRC = CalculateCRC( pFI ); // Update the header in the file descriptor with CRC in place. VERIFY(pFI->Seek( 0L, FILE_BEGIN)); if (!ABFH_ParamWriter(pFI->GetFileHandle(), &NewFH, NULL)) return ErrorReturn(pnError, ABF_EDISKFULL); // Restore the original header. ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; } //=============================================================================================== // FUNCTION: WriteSynchArray // PURPOSE: This routine writes the Synch array out to disk // static BOOL WriteSynchArray(CFileDescriptor *pFI, ABFFileHeader *pFH, int *pnError) { WPTRASSERT(pFI); ABFH_WASSERT(pFH); // Return if no write is required. if (pFI->TestFlag(FI_PARAMFILE)) return TRUE; // Transfer the synch array to the ABF file, checking to see that the synch array // only refers to data that was actually saved. if (!pFI->WriteSynchArray( &pFH->lSynchArrayPtr, &pFH->lSynchArraySize, SampleSize(pFH) )) return ErrorReturn(pnError, ABF_EDISKFULL); pFH->lActualEpisodes = pFH->lSynchArraySize; pFH->lActualAcqLength = pFI->GetAcquiredSamples(); return TRUE; } //=============================================================================================== // FUNCTION: WriteTags // PURPOSE: This routine writes the accumulated tags out to disk // static BOOL WriteTags(CFileDescriptor *pFI, ABFFileHeader *pFH, int *pnError) { WPTRASSERT(pFI); ABFH_WASSERT(pFH); if (!pFI->WriteTags( &pFH->lTagSectionPtr, &pFH->lNumTagEntries )) return ErrorReturn(pnError, ABF_EDISKFULL); if (!pFI->WriteVoiceTags( &pFH->lVoiceTagPtr, &pFH->lVoiceTagEntries )) return ErrorReturn(pnError, ABF_EDISKFULL); return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF_HasData // PURPOSE: This routine returns TRUE if data has been written to the file since opening it. // BOOL WINAPI ABF_HasData(int nFile, const ABFFileHeader *pFH) { // ABFH_ASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, NULL)) return FALSE; // Take a copy of the passed in header to ensure it is 5k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); if (NewFH.lDataSectionPtr==0) return FALSE; // Assume that only data has been written to the file at this point. ASSERT(NewFH.lSynchArrayPtr==0); ASSERT(NewFH.lTagSectionPtr==0); ASSERT(NewFH.lVoiceTagPtr==0); ASSERT(NewFH.lDeltaArrayPtr==0); ASSERT(NewFH.lAnnotationSectionPtr==0); ASSERT(NewFH.lDACFilePtr[0]==0); ASSERT(NewFH.lDACFilePtr[1]==0); return (pFI->GetFileSize() > NewFH.lDataSectionPtr * ABF_BLOCKSIZE); } #if 0 //=============================================================================================== // FUNCTION: ABF_UpdateHeader // PURPOSE: This routine should always be called before closing a file opened with // ABF_WriteOpen. It updates the file header and writes the synch array out // to disk if required. // BOOL WINAPI ABF_UpdateHeader(int nFile, ABFFileHeader *pFH, int *pnError) { ABFH_WASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (pFI->TestFlag(FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); // Assume that only data has been written to the file at this point. //GR 12-Jan-2001: These used to be asserts to assert that these values //were all equal to 0. This was causing assertion failures when //attempting to copy part or all of an analysis window file as an //atf file for the second time. //The logic is that if these variables are no longer 0, then we have //already written the file header and don't need to write it again. //And what if the header settings have changed since last time we //wrote them? Then the temporary file should have been re-written //and these variables will be 0 again. I think. if( (NewFH.lSynchArrayPtr!=0) || (NewFH.lTagSectionPtr!=0) || (NewFH.lVoiceTagPtr!=0) || (NewFH.lAnnotationSectionPtr!=0) || (NewFH.lDeltaArrayPtr!=0) ) { return TRUE; } for( UINT i=0; iGetFileSize(); ASSERT(llFileLength >= sizeof(ABFFileHeader)); // Calculate the number of data samples in the file. UINT uAcquiredSamples = UINT((llFileLength - NewFH.lDataSectionPtr * ABF_BLOCKSIZE)/SampleSize(&NewFH)); pFI->SetAcquiredSamples(uAcquiredSamples); if (pFI->GetSynchCount() != 0) { // Write the synch array out to disk, storing the size and location // of the Synch array in the header in the process. if (!WriteSynchArray(pFI, &NewFH, pnError)) { // Truncate the file at the end of the data section. VERIFY(pFI->Seek( llFileLength, FILE_END)); VERIFY(pFI->SetEndOfFile()); return FALSE; } // Switch the synch array to read mode to allow access to synch array in Save As (PRC 6/99) pFI->SetSynchMode( CSynch::eREADMODE ); } else if (NewFH.nOperationMode == ABF_GAPFREEFILE) { NewFH.lEpisodesPerRun = 1; NewFH.lRunsPerTrial = 1; NewFH.lActualAcqLength = uAcquiredSamples; NewFH.lActualEpisodes = uAcquiredSamples / NewFH.lNumSamplesPerEpisode; // Allow for the last (possibly incomplete) episode. if( uAcquiredSamples % NewFH.lNumSamplesPerEpisode ) NewFH.lActualEpisodes++; } else if (NewFH.nOperationMode == ABF_WAVEFORMFILE) { UINT uAcquiredEpisodes = uAcquiredSamples / NewFH.lNumSamplesPerEpisode; uAcquiredSamples = uAcquiredEpisodes * NewFH.lNumSamplesPerEpisode; pFI->SetAcquiredEpisodes(uAcquiredEpisodes); pFI->SetAcquiredSamples(uAcquiredSamples); NewFH.lActualEpisodes = uAcquiredEpisodes; NewFH.lActualAcqLength = uAcquiredSamples; } if (pFI->GetTagCount() > 0) { // Write the tags out to disk, storing the size and location // of the tag block in the header in the process. if (!WriteTags(pFI, &NewFH, pnError)) { // Truncate the file at the end of the data section. VERIFY(pFI->Seek( llFileLength, FILE_END)); VERIFY(pFI->SetEndOfFile()); return FALSE; } } if (pFI->GetDeltaCount() > 0) { // Write the deltas out to disk, storing the size and location // of the delta array in the header in the process. if (!pFI->WriteDeltas( &NewFH.lDeltaArrayPtr, &NewFH.lNumDeltas )) { // Truncate the file at the end of the data section. VERIFY(pFI->Seek( llFileLength, FILE_END)); VERIFY(pFI->SetEndOfFile()); return ErrorReturn(pnError, ABF_EDISKFULL); } } if (pFI->GetAnnotationCount() > 0) { // Write the annotations out to disk, storing the size and location // of the annotations section in the header in the process. if(!pFI->WriteAnnotations( &NewFH.lAnnotationSectionPtr, &NewFH.lNumAnnotations ) ) { // Truncate the file at the end of the data section. VERIFY(pFI->Seek( llFileLength, FILE_END)); VERIFY(pFI->SetEndOfFile()); return ErrorReturn(pnError, ABF_EDISKFULL); } } for(int i=0; iGetDACFileSweepCount(i) > 0) { // Write the deltas out to disk, storing the size and location // of the delta array in the header in the process. if (!pFI->WriteDACFileSweeps( i, &NewFH.lDACFilePtr[i], &NewFH.lDACFileNumEpisodes[i] )) { // Truncate the file at the end of the data section. VERIFY(pFI->Seek( llFileLength, FILE_END)); VERIFY(pFI->SetEndOfFile()); return ErrorReturn(pnError, ABF_EDISKFULL); } } } // Read back the header image that was written when the file was opened. ABFFileHeader OldHeader; VERIFY(pFI->Seek( 0L, FILE_BEGIN)); UINT uHeaderSize = ABF_OLDHEADERSIZE; if( ABFH_IsNewHeader(&NewFH) ) uHeaderSize = ABF_HEADERSIZE; VERIFY(pFI->Read(&OldHeader, uHeaderSize)); // Create a copy of the header as it stands now (post acquisition). ABFFileHeader NewHeader = NewFH; // Copy the original values of items that can be subject to deltas into the new header. // This ensures the copy on disk is the original values (with delta info) and the client // has the current (updated with deltas) settings. // This list should be maintained along with the enumeration for delta types in ABFHEADR.H // Delta type: ABF_DELTA_HOLDING0 .. ABF_DELTA_HOLDING3 for (int i=0; iSeek( 0L, FILE_BEGIN)); if (!ABFH_ParamWriter(pFI->GetFileHandle(), &NewHeader, NULL)) return ErrorReturn(pnError, ABF_EDISKFULL); // Update the current file length. ABFLONG lCurrentFileSize = (ABFLONG)pFI->GetFileSize(); // Pad with zeroes to the nearest block boundary. pFI->FillToNextBlock( &lCurrentFileSize ); // Calculate CRC in current file descriptor. NewHeader.ulFileCRC = CalculateCRC( pFI ); // Update the header in the file descriptor with CRC in place. VERIFY(pFI->Seek( 0L, FILE_BEGIN)); if (!ABFH_ParamWriter(pFI->GetFileHandle(), &NewHeader, NULL)) return ErrorReturn(pnError, ABF_EDISKFULL); ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF_Close // PURPOSE: This routine closes the current data file and cleans up any work buffers that // were allocated for processing the data. // BOOL WINAPI ABF_Close(int nFile, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) { // TRACE("ABF_Close failed.\n"); return FALSE; } ReleaseFileDescriptor(nFile); return TRUE; } //=============================================================================================== // FUNCTION: SamplesToSynchCounts // PURPOSE: Converts a value in multiplexed samples to Synch Time Units. // static UINT SamplesToSynchCounts(const ABFFileHeader *pFH, UINT uSamples) { DWORD dwLengthInSynchUnits = uSamples; if( pFH->fSynchTimeUnit != 0.0F ) { double dLen = dwLengthInSynchUnits * ABFH_GetFirstSampleInterval(pFH) * pFH->nADCNumChannels / 1E3; dLen = floor( dLen + 0.5 ); dwLengthInSynchUnits = DWORD( dLen ); } return dwLengthInSynchUnits; } //=============================================================================================== // FUNCTION: SamplesToSynchCounts // PURPOSE: Converts a value in multiplexed samples to Synch Time Units. // static UINT ABF2_SamplesToSynchCounts(const ABF2FileHeader *pFH, UINT uSamples) { DWORD dwLengthInSynchUnits = uSamples; if( pFH->fSynchTimeUnit != 0.0F ) { double dLen = dwLengthInSynchUnits * ABF2H_GetFirstSampleInterval(pFH) * pFH->nADCNumChannels / 1E3; dLen = floor( dLen + 0.5 ); dwLengthInSynchUnits = DWORD( dLen ); } return dwLengthInSynchUnits; } //=============================================================================================== // FUNCTION: ExpandSynchEntry // PURPOSE: Unpacks a synch entry into one or more chunks no greater than the max chunk size. // static void ExpandSynchEntry(const ABFFileHeader *pFH, CSynch &SynchArray, Synch *pItem, UINT uChunkSize, UINT uSampleSize) { UINT uStart = pItem->dwStart; UINT uLength = pItem->dwLength; UINT uFileOffset = pItem->dwFileOffset; while (uLength > uChunkSize) { SynchArray.Put(uStart, uChunkSize, uFileOffset); uStart += SamplesToSynchCounts( pFH, uChunkSize ); uFileOffset += uChunkSize * uSampleSize; uLength -= uChunkSize; } SynchArray.Put(uStart, uLength, uFileOffset); } //=============================================================================================== // FUNCTION: ExpandSynchEntry // PURPOSE: Unpacks a synch entry into one or more chunks no greater than the max chunk size. // static void ABF2_ExpandSynchEntry(const ABF2FileHeader *pFH, CSynch &SynchArray, Synch *pItem, UINT uChunkSize, UINT uSampleSize) { UINT uStart = pItem->dwStart; UINT uLength = pItem->dwLength; UINT uFileOffset = pItem->dwFileOffset; while (uLength > uChunkSize) { SynchArray.Put(uStart, uChunkSize, uFileOffset); uStart += ABF2_SamplesToSynchCounts( pFH, uChunkSize ); uFileOffset += uChunkSize * uSampleSize; uLength -= uChunkSize; } SynchArray.Put(uStart, uLength, uFileOffset); } //=============================================================================================== // FUNCTION: _SetChunkSize // PURPOSE: This routine can be called on files of type ABF_GAPFREEFILE or ABF_VARLENEVENTS to change // the size of the data chunks returned by the read routines. // INPUT: // hFile ABF file number of this file (NOT the DOS handle) // pFH the current acquisition parameters for the data file // puMaxSamples points to the requested size of data blocks to be returned. // This is only used in the case of GAPFREE and EVENT-DETECTED- // VARIABLE-LENGTH acquisitions. Otherwise the size of the // Episode is used. 80x86 limitations require this to be // less than or equal to 64k. // pdwMaxEpi The maximum number of episodes to be read. // OUTPUT: // pFH the acquisition parameters that were read from the data file // puMaxSamples the maximum number of samples that can be read contiguously // from the data file. // pdwMaxEpi the number of episodes of puMaxSamples points that exist // in the data file. // static BOOL _SetChunkSize( CFileDescriptor *pFI, ABFFileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError ) { // Check for valid parameters. // WPTRASSERT(puMaxSamples); // WPTRASSERT(pdwMaxEpi); // Check that requested chunk size is reasonable. // If chunk-size is zero, it is treated as a request for ABF to set a reasonable // chunk-size. An error is returned if chunk-size is given but too small. // If the size given is too big, it is set to the largest possible size. UINT uLimSamples = PCLAMP7_MAXSWEEPLEN_PERCHAN; UINT uMaxSamples = *puMaxSamples; // if uMaxSamples == -1, restore the chunk size to the "raw" value (i.e. from disk). if ((int)uMaxSamples != -1 ) { if (uMaxSamples == 0) uMaxSamples = ABF_DEFAULTCHUNKSIZE / pFH->nADCNumChannels; else if (uMaxSamples > uLimSamples) uMaxSamples = uLimSamples; } UINT uAcqLenPerChannel = UINT(pFH->lActualAcqLength / pFH->nADCNumChannels); if (uMaxSamples > uAcqLenPerChannel) uMaxSamples = uAcqLenPerChannel; pFH->lNumSamplesPerEpisode = ABFLONG(uMaxSamples * pFH->nADCNumChannels); // Set the return value for the read chunk size. *puMaxSamples = (UINT)(pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels); // Scan through the synch array building up into full event sizes and then // subdividing down into multiples of the chunk size. if (pFI->GetSynchCount() <= 0) { // Only ABF_GAPFREEFILEs and ABF_WAVEFORMFILEs can optionally have synch arrays. ASSERT((pFH->nOperationMode == ABF_GAPFREEFILE) || (pFH->nOperationMode == ABF_WAVEFORMFILE)); // Gap-free files only have synch arrays if they have been paused during recording // If there is no synch array, work out how many chunks we have etc. // // Gapfree files without synch arrays need to know the size of the last episode // (this can be less than the episode size for gap-free data) UINT uMaxEpi = uAcqLenPerChannel / uMaxSamples; UINT uLastEpiSize = uAcqLenPerChannel % uMaxSamples; if (uLastEpiSize > 0) { uMaxEpi++; ASSERT(pFH->nOperationMode == ABF_GAPFREEFILE); } else uLastEpiSize = uMaxSamples; *pdwMaxEpi = uMaxEpi; pFI->SetLastEpiSize(uLastEpiSize * pFH->nADCNumChannels); } else if ((pFH->nOperationMode == ABF_GAPFREEFILE) || (pFH->nOperationMode == ABF_VARLENEVENTS)) { // Create a new synch array that we can build from the old one. CSynch NewSynchArray; if (!NewSynchArray.OpenFile()) return ErrorReturn(pnError, ABF_BADTEMPFILE); // Cache some useful constants const UINT uSampleSize = SampleSize(pFH); const UINT uSynchCount = pFI->GetSynchCount(); const UINT uMaxChunkSize = *puMaxSamples * UINT(pFH->nADCNumChannels); // Get the first entry. Synch LastItem = { 0 }; pFI->GetSynchEntry(1, &LastItem); // Loop through the rest of the entries. for (UINT i=2; i<=uSynchCount; i++) { // For event detected variable length data files, episodes may be larger then // wFullEpisodeSize. These will be broken up into multiple units of length // uMaxChunkSize or less, and the Synch array adjusted accordingly. // Calculate file offsets and expand out any episodes longer than // uMaxChunkSize to span multiple Synch entries. Synch SynchItem; pFI->GetSynchEntry(i, &SynchItem); // if there are no missing samples, add this length to the previous entry. if( SynchItem.dwStart == LastItem.dwStart + SamplesToSynchCounts(pFH, LastItem.dwLength) ) LastItem.dwLength += SynchItem.dwLength; else { ExpandSynchEntry(pFH, NewSynchArray, &LastItem, uMaxChunkSize, uSampleSize); LastItem = SynchItem; } } ExpandSynchEntry(pFH, NewSynchArray, &LastItem, uMaxChunkSize, uSampleSize); if (pFI->TestFlag(FI_READONLY)) NewSynchArray.SetMode(CSynch::eREADMODE); pFI->ChangeSynchArray(&NewSynchArray); *pdwMaxEpi = pFI->GetSynchCount(); } else { // ERRORMSG("ABF_SetChunkSize should only be used on ABF_GAPFREEFILE or ABF_VARLENEVENTS ABF files"); } // Set header variable for the number of episodes in the file. pFH->lActualEpisodes = *pdwMaxEpi; pFI->SetAcquiredEpisodes(*pdwMaxEpi); pFI->FreeReadBuffer(); return TRUE; } //=============================================================================================== // FUNCTION: _SetChunkSize // PURPOSE: This routine can be called on files of type ABF_GAPFREEFILE or ABF_VARLENEVENTS to change // the size of the data chunks returned by the read routines. // INPUT: // hFile ABF file number of this file (NOT the DOS handle) // pFH the current acquisition parameters for the data file // puMaxSamples points to the requested size of data blocks to be returned. // This is only used in the case of GAPFREE and EVENT-DETECTED- // VARIABLE-LENGTH acquisitions. Otherwise the size of the // Episode is used. 80x86 limitations require this to be // less than or equal to 64k. // pdwMaxEpi The maximum number of episodes to be read. // OUTPUT: // pFH the acquisition parameters that were read from the data file // puMaxSamples the maximum number of samples that can be read contiguously // from the data file. // pdwMaxEpi the number of episodes of puMaxSamples points that exist // in the data file. // static BOOL ABF2_SetChunkSize( CFileDescriptor *pFI, ABF2FileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError ) { // Check for valid parameters. // WPTRASSERT(puMaxSamples); // WPTRASSERT(pdwMaxEpi); // Check that requested chunk size is reasonable. // If chunk-size is zero, it is treated as a request for ABF to set a reasonable // chunk-size. An error is returned if chunk-size is given but too small. // If the size given is too big, it is set to the largest possible size. UINT uLimSamples = PCLAMP7_MAXSWEEPLEN_PERCHAN; UINT uMaxSamples = *puMaxSamples; // if uMaxSamples == -1, restore the chunk size to the "raw" value (i.e. from disk). if ((int)uMaxSamples != -1 ) { if (uMaxSamples == 0) uMaxSamples = ABF_DEFAULTCHUNKSIZE / pFH->nADCNumChannels; else if (uMaxSamples > uLimSamples) uMaxSamples = uLimSamples; } UINT uAcqLenPerChannel = UINT(pFH->lActualAcqLength / pFH->nADCNumChannels); if (uMaxSamples > uAcqLenPerChannel) uMaxSamples = uAcqLenPerChannel; pFH->lNumSamplesPerEpisode = ABFLONG(uMaxSamples * pFH->nADCNumChannels); // Set the return value for the read chunk size. *puMaxSamples = (UINT)(pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels); // Scan through the synch array building up into full event sizes and then // subdividing down into multiples of the chunk size. if (pFI->GetSynchCount() <= 0) { // Only ABF_GAPFREEFILEs and ABF_WAVEFORMFILEs can optionally have synch arrays. ASSERT((pFH->nOperationMode == ABF_GAPFREEFILE) || (pFH->nOperationMode == ABF_WAVEFORMFILE)); // Gap-free files only have synch arrays if they have been paused during recording // If there is no synch array, work out how many chunks we have etc. // // Gapfree files without synch arrays need to know the size of the last episode // (this can be less than the episode size for gap-free data) UINT uMaxEpi = uAcqLenPerChannel / uMaxSamples; UINT uLastEpiSize = uAcqLenPerChannel % uMaxSamples; if (uLastEpiSize > 0) { uMaxEpi++; ASSERT(pFH->nOperationMode == ABF_GAPFREEFILE); } else uLastEpiSize = uMaxSamples; *pdwMaxEpi = uMaxEpi; pFI->SetLastEpiSize(uLastEpiSize * pFH->nADCNumChannels); } else if ((pFH->nOperationMode == ABF_GAPFREEFILE) || (pFH->nOperationMode == ABF_VARLENEVENTS)) { // Create a new synch array that we can build from the old one. CSynch NewSynchArray; if (!NewSynchArray.OpenFile()) return ErrorReturn(pnError, ABF_BADTEMPFILE); // Cache some useful constants const UINT uSampleSize = ABF2_SampleSize(pFH); const UINT uSynchCount = pFI->GetSynchCount(); const UINT uMaxChunkSize = *puMaxSamples * UINT(pFH->nADCNumChannels); // Get the first entry. Synch LastItem = { 0 }; pFI->GetSynchEntry(1, &LastItem); // Loop through the rest of the entries. for (UINT i=2; i<=uSynchCount; i++) { // For event detected variable length data files, episodes may be larger then // wFullEpisodeSize. These will be broken up into multiple units of length // uMaxChunkSize or less, and the Synch array adjusted accordingly. // Calculate file offsets and expand out any episodes longer than // uMaxChunkSize to span multiple Synch entries. Synch SynchItem; pFI->GetSynchEntry(i, &SynchItem); // if there are no missing samples, add this length to the previous entry. if( SynchItem.dwStart == LastItem.dwStart + ABF2_SamplesToSynchCounts(pFH, LastItem.dwLength) ) LastItem.dwLength += SynchItem.dwLength; else { ABF2_ExpandSynchEntry(pFH, NewSynchArray, &LastItem, uMaxChunkSize, uSampleSize); LastItem = SynchItem; } } ABF2_ExpandSynchEntry(pFH, NewSynchArray, &LastItem, uMaxChunkSize, uSampleSize); if (pFI->TestFlag(FI_READONLY)) NewSynchArray.SetMode(CSynch::eREADMODE); pFI->ChangeSynchArray(&NewSynchArray); *pdwMaxEpi = pFI->GetSynchCount(); } else { // ERRORMSG("ABF_SetChunkSize should only be used on ABF_GAPFREEFILE or ABF_VARLENEVENTS ABF files"); } // Set header variable for the number of episodes in the file. pFH->lActualEpisodes = *pdwMaxEpi; pFI->SetAcquiredEpisodes(*pdwMaxEpi); pFI->FreeReadBuffer(); return TRUE; } //=============================================================================================== // FUNCTION: ReadEDVarLenSynch // PURPOSE: This function shifts and expands the temporary Synch buffer to the Synch // array for a Variable-Length-Event-Detected file. // static BOOL ReadEDVarLenSynch(CFileDescriptor *pFI, ABFFileHeader *pFH, DWORD *pdwMaxEpi, UINT *puMaxSamples, int *pnError) { WPTRASSERT(pFI); // ABFH_WASSERT(pFH); WPTRASSERT(pdwMaxEpi); // If a synch array exists, read it into the virtual synch array as is. if ((pFH->lSynchArraySize > 0) && (pFH->lSynchArrayPtr > 0)) { // All variable length and gapfree ABF files use use samples as synch time counts. // However, statistics ATF files read in via ATF2ABF32 use synch time units which // are NOT samples, so we need to handle that situation. // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . // Read the synch array in chunks, writing it out to the virtual synch array. // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CFileReadCache SynchFile; if (!SynchFile.Initialize(sizeof(ABFSynch), SYNCH_BUFFER_SIZE, pFI->GetFileHandle(), LONGLONG(pFH->lSynchArrayPtr) * ABF_BLOCKSIZE, pFH->lSynchArraySize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); UINT uSampleSize = SampleSize(pFH); UINT uAcqLength = UINT(pFH->lActualAcqLength); UINT uFileOffset = 0; UINT uLastStart = 0; for (UINT i=0; ilSynchArraySize); i++) { ABFSynch *pS = (ABFSynch *)SynchFile.Get(i); if (!pS) return ErrorReturn(pnError, ABF_EBADSYNCH); UINT uStart = pS->lStart; UINT uLength = pS->lLength; // Check synch entry length. if (uLength > uAcqLength) return ErrorReturn(pnError, ABF_EBADSYNCH); // check that entries are consecutive if( uStart < uLastStart ) return ErrorReturn(pnError, ABF_EBADSYNCH); uLastStart = uStart; pFI->PutSynchEntry(uStart, uLength, uFileOffset); uFileOffset += uLength * uSampleSize; uAcqLength -= uLength; } pFI->SetSynchMode( CSynch::eREADMODE ); } return _SetChunkSize( pFI, pFH, puMaxSamples, pdwMaxEpi, pnError ); } //=============================================================================================== // FUNCTION: _SetOverlap // PURPOSE: Changes the overlap flag and processes the synch array to edit redundant data out if no overlap. // static BOOL _SetOverlap(CFileDescriptor *pFI, const ABFFileHeader *pFH, BOOL bAllowOverlap, int *pnError) { // ABFH_ASSERT(pFH); // Only fixed length events files have overlapping events. if (pFH->nOperationMode != ABF_FIXLENEVENTS) return TRUE; // Fixed length events files always use samples for synch time units. ASSERT(pFH->fSynchTimeUnit==0.0F); // If none of the sweeps overlap there is nothing to do, get out now. if (!pFI->GetOverlappedFlag()) return TRUE; // Create a new synch array that we can build from the old one. CSynch NewSynchArray; if (!NewSynchArray.OpenFile()) return ErrorReturn(pnError, ABF_BADTEMPFILE); // Cache some useful constants const UINT uSynchCount = pFI->GetSynchCount(); if (bAllowOverlap) { Synch Item = { 0 }; UINT uSweepLength = UINT(pFH->lNumSamplesPerEpisode); // Loop through entries setting them all to the sweep length. for (UINT i=1; i<=uSynchCount; i++) { pFI->GetSynchEntry(i, &Item); NewSynchArray.Put(Item.dwStart, uSweepLength, Item.dwFileOffset); } } else { // Get the first entry. Synch LastItem = { 0 }; pFI->GetSynchEntry(1, &LastItem); // Loop through the rest of the entries. for (UINT i=2; i<=uSynchCount; i++) { Synch SynchItem; pFI->GetSynchEntry(i, &SynchItem); if ((SynchItem.dwStart != ABF_AVERAGESWEEPSTART) && (LastItem.dwStart != ABF_AVERAGESWEEPSTART)) { // If redundant data is found, then truncate this episode if // overlapped data is not to be allowed. if (LastItem.dwStart + LastItem.dwLength > SynchItem.dwStart) LastItem.dwLength = SynchItem.dwStart - LastItem.dwStart; } NewSynchArray.Put(LastItem.dwStart, LastItem.dwLength, LastItem.dwFileOffset); LastItem = SynchItem; } NewSynchArray.Put(LastItem.dwStart, LastItem.dwLength, LastItem.dwFileOffset); } if (pFI->TestFlag(FI_READONLY)) NewSynchArray.SetMode(CSynch::eREADMODE); pFI->ChangeSynchArray(&NewSynchArray); return TRUE; } //=============================================================================================== // FUNCTION: ReadEDFixLenSynch // PURPOSE: Reads a fixed length synch array off disk and stores it away in a synch buffer. // Overlapping episodes are truncated so that the user is only returned data once. // static BOOL ReadEDFixLenSynch(CFileDescriptor *pFI, const ABFFileHeader *pFH, DWORD *pdwMaxEpi, BOOL bAllowOverlap, int *pnError) { WPTRASSERT(pFI); WPTRASSERT(pdwMaxEpi); // ABFH_ASSERT(pFH); if ((pFH->lSynchArraySize <= 0) || (pFH->lSynchArrayPtr <= 0)) { // Only waveform files can optionally have a synch array. if (pFH->nOperationMode!=ABF_WAVEFORMFILE) return ErrorReturn(pnError, ABF_ENOSYNCHPRESENT); *pdwMaxEpi = pFH->lActualEpisodes; return TRUE; } // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . // read the synch array in chunks, writing it out to the virtual synch array. // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CFileReadCache SynchFile; if (!SynchFile.Initialize(sizeof(ABFSynch), SYNCH_BUFFER_SIZE, pFI->GetFileHandle(), LONGLONG(pFH->lSynchArrayPtr) * ABF_BLOCKSIZE, pFH->lSynchArraySize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); BOOL bOverlapFound = FALSE; UINT uFileOffset = 0; UINT uSampleSize = SampleSize(pFH); UINT uAcqLength = UINT(pFH->lActualAcqLength); // Get the first entry. ABFSynch *pS = (ABFSynch *)SynchFile.Get(0); if (!pS) return ErrorReturn(pnError, ABF_EBADSYNCH); UINT uStart = pS->lStart; UINT uLength = pS->lLength; // Loop n-1 times checking the entry against the following one. for (UINT i=1; ilSynchArraySize); i++) { // All episodes should be of the same length. ASSERT(uLength == UINT(pFH->lNumSamplesPerEpisode)); // Check synch entry range if (uLength > uAcqLength) return ErrorReturn(pnError, ABF_EBADSYNCH); // Event detected modes are described by a Synch array that specifies each // episode's position and length in the data file. pS = (ABFSynch *)SynchFile.Get(i); if (!pS) return ErrorReturn(pnError, ABF_EBADSYNCH); if ((pFH->nOperationMode!=ABF_WAVEFORMFILE) && (uStart!=ABF_AVERAGESWEEPSTART)) { // Only fix-len event detected files can have overlapping sweeps, and these // always use samples as synch time counts -- this simplifies comparisons. ASSERT(pFH->fSynchTimeUnit==0.0); // Some versions of AxoTape produced negative entries in the synch array. // DEMOTAPE (Axotape-for-DOS demo version) creates corrupted synch arrays... if (ABFLONG(uStart) < 0) return ErrorReturn(pnError, ABF_EBADSYNCH); // Check for redundant data in following episodes if (pS->lStart > -1) { // check that entries are consecutive if (UINT(pS->lStart) <= uStart) return ErrorReturn(pnError, ABF_EBADSYNCH); // If redundant data is found, then truncate this episode if // overlapped data is not to be allowed. if (uStart + uLength > UINT(pS->lStart)) bOverlapFound = TRUE; } } pFI->PutSynchEntry(uStart, uLength, uFileOffset); uFileOffset += uLength * uSampleSize; uAcqLength -= uLength; uStart = pS->lStart; uLength = pS->lLength; } // Put the last entry into the synch array. pFI->PutSynchEntry(uStart, uLength, uFileOffset); *pdwMaxEpi = UINT(pFH->lSynchArraySize); pFI->SetSynchMode( CSynch::eREADMODE ); pFI->SetOverlappedFlag(bOverlapFound); return _SetOverlap(pFI, pFH, bAllowOverlap, pnError); } //=============================================================================================== // FUNCTION: ReadOldSynchArray // PURPOSE: Reads a synch array from an old (pre ABF) data file and stores it away in the synch // buffer. Copes with the complexities of old synch arrays (non-trivial). // static BOOL ReadOldSynchArray(CFileDescriptor *pFI, ABFFileHeader *pFH, DWORD *pdwMaxEpi, int *pnError) { // WPTRASSERT(pFI); // ABFH_WASSERT(pFH); // WPTRASSERT(pdwMaxEpi); if ((pFH->lSynchArraySize <= 0) || (pFH->lSynchArrayPtr <= 0)) { if (pFH->nOperationMode != ABF_WAVEFORMFILE) return ErrorReturn(pnError, ABF_ENOSYNCHPRESENT); *pdwMaxEpi = UINT(pFH->lActualAcqLength / pFH->lNumSamplesPerEpisode); return TRUE; } // Get the length of the file. ABFLONG lFileLength = ABFLONG(pFI->GetFileSize()); ASSERT(lFileLength > 0); // Old Csynch arrays must be converted to the new style Synch array. // dwMaxEpi may be reduced as deleated and empty episodes are stripped out. // This conversion process also fills in file offset entries for each episode. // Allocate a temporary buffer and read the Synch array into it. // Old synch arrays are guaranteed to be less than 64k, so one read will do it. UINT uSize = (UINT)pFH->lSynchArraySize * 2; // two short entries per episode CArrayPtr pnOldSynch(uSize); if (pnOldSynch == NULL) return ErrorReturn(pnError, ABF_OUTOFMEMORY); // Seek to the start of the synch block. // VERIFY(pFI->Seek( LONGLONG(pFH->lSynchArrayPtr) * ABF_BLOCKSIZE, FILE_BEGIN)); // Read the Synch array into the buffer if (!pFI->Read(pnOldSynch, uSize*sizeof(short))) return ErrorReturn(pnError, ABF_EREADSYNCH); // Convert old Synch array to new Synch array, checking for edited // (missing) episodes in older file versions. UINT uMissing = 0; ABFLONG lStart = 0L; short *pn = pnOldSynch; for (ABFLONG lSrc=0; lSrc < pFH->lSynchArraySize; lSrc++) { int nCount = *pn++; int nLength = *pn++; ABFLONG lFileOffset = pFH->lNumSamplesPerEpisode * sizeof(short) * lSrc; if (nLength < 0) { // Zero length acquisition found (i.e. an episode with invalid // data) increment Missing% count, but not // destination index to effectively edit it out of the file for // analysis. // Negative Synch entry means that an episode was deleated. // Destination index is not incremented, and Missing% count is // updated. uMissing++; } else { ABFLONG lLength, lSkip; if (nCount == 0) { // Adjust the offset for incomplete episodes. lFileOffset += pFH->lNumSamplesPerEpisode * sizeof(short) - nLength; lSkip = 0; lLength = nLength / sizeof(short); // convert bytes to samples } else { // If count is != 0 a full episode was acquired, with possibly missing data before it started. lLength = pFH->lNumSamplesPerEpisode; lSkip = pFH->lNumSamplesPerEpisode * ABFLONG(nCount-1) + ABFLONG(nLength / sizeof(short)); // Old fetchan source code disregards MissingSamples if they are less than zero. if (lSkip < 0) lSkip = 0; } lStart += lSkip; // Check that episode is within the physical file. if (lFileOffset+lLength*ABFLONG(sizeof(short)) > lFileLength-1024) return ErrorReturn(pnError, ABF_EBADSYNCH); pFI->PutSynchEntry(lStart, lLength, lFileOffset); lStart += lLength; } } pFH->lSynchArraySize -= uMissing; *pdwMaxEpi = UINT(pFH->lSynchArraySize); pFI->SetSynchMode( CSynch::eREADMODE ); return TRUE; } //=============================================================================================== // FUNCTION: GetSynchEntry // PURPOSE: Gets a synch entry describing the requested episode (if possible). // RETURNS: TRUE = OK, FALSE = Episode number out of range. // NOTES: Episode number is one-relative! // static BOOL GetSynchEntry( const ABFFileHeader *pFH, CFileDescriptor *pFI, UINT uEpisode, Synch *pSynchEntry ) { if (!pFI->CheckEpisodeNumber(uEpisode)) return FALSE; // If a synch array is not present, create a synch entry for this chunk, // otherwise, read it from the synch array. if (pFI->GetSynchCount() == 0) { UINT uSampleSize = SampleSize(pFH); UINT uChunkSize = UINT(pFH->lNumSamplesPerEpisode); // Chunk size in samples // In continuous files, the last episode may be smaller than the episode size used // for the rest of the file. This is calculated in the ABF.Open routine. if ((pFH->nOperationMode == ABF_GAPFREEFILE) && (uEpisode == pFI->GetAcquiredEpisodes())) pSynchEntry->dwLength = pFI->GetLastEpiSize(); else pSynchEntry->dwLength = uChunkSize; pSynchEntry->dwFileOffset = uChunkSize * uSampleSize * (uEpisode - 1); pSynchEntry->dwStart = pSynchEntry->dwFileOffset / uSampleSize; return TRUE; } return pFI->GetSynchEntry( uEpisode, pSynchEntry ); } //=============================================================================================== // FUNCTION: GetSynchEntry // PURPOSE: Gets a synch entry describing the requested episode (if possible). // RETURNS: TRUE = OK, FALSE = Episode number out of range. // NOTES: Episode number is one-relative! // static BOOL ABF2_GetSynchEntry( const ABF2FileHeader *pFH, CFileDescriptor *pFI, UINT uEpisode, Synch *pSynchEntry ) { if (!pFI->CheckEpisodeNumber(uEpisode)) return FALSE; // If a synch array is not present, create a synch entry for this chunk, // otherwise, read it from the synch array. if (pFI->GetSynchCount() == 0) { UINT uSampleSize = ABF2_SampleSize(pFH); UINT uChunkSize = UINT(pFH->lNumSamplesPerEpisode); // Chunk size in samples // In continuous files, the last episode may be smaller than the episode size used // for the rest of the file. This is calculated in the ABF.Open routine. if ((pFH->nOperationMode == ABF_GAPFREEFILE) && (uEpisode == pFI->GetAcquiredEpisodes())) pSynchEntry->dwLength = pFI->GetLastEpiSize(); else pSynchEntry->dwLength = uChunkSize; pSynchEntry->dwFileOffset = uChunkSize * uSampleSize * (uEpisode - 1); pSynchEntry->dwStart = pSynchEntry->dwFileOffset / uSampleSize; return TRUE; } return pFI->GetSynchEntry( uEpisode, pSynchEntry ); } //=============================================================================================== // FUNCTION: ABF_MultiplexRead // PURPOSE: This routine reads an episode of data from the data file previously opened. // // INPUT: // nFile the file index into the g_FileData structure array // dwEpisode the episode number to be read. Episodes start at 1 // // OUTPUT: // pvBuffer the data buffer for the data // puSizeInSamples the number of valid points in the data buffer // BOOL WINAPI ABF_MultiplexRead(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, void *pvBuffer, UINT uBufferSize, UINT *puSizeInSamples, int *pnError) { // ABFH_ASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Set the sample size in the data. UINT uSampleSize = SampleSize(pFH); // UINT uBytesPerEpisode = UINT(pFH->lNumSamplesPerEpisode) * uSampleSize; // If a synch array is not present, create a synch entry for this chunk, // otherwise, read it from the synch array. Synch SynchEntry; if (!GetSynchEntry( pFH, pFI, dwEpisode, &SynchEntry )) return ErrorReturn(pnError, ABF_EEPISODERANGE); // return the size of the episode to be read. if (puSizeInSamples) *puSizeInSamples = UINT(SynchEntry.dwLength); // Add the distance to the start of the data to the data offset LONGLONG lFileOffset = LONGLONG(GetDataOffset(pFH)) + SynchEntry.dwFileOffset; // Seek to the calculated file position. VERIFY(pFI->Seek(lFileOffset, FILE_BEGIN)); UINT uSizeInBytes = SynchEntry.dwLength * uSampleSize; // ARRAYASSERT((BYTE *)pvBuffer, uSizeInBytes); // Do the file read if (!pFI->Read(pvBuffer, uSizeInBytes)) return ErrorReturn(pnError, ABF_EREADDATA); // If episode is not full, pad it out with 0's // Make sure that it is zero-padded to avoid this adventurous memset #if 0 if (uSizeInBytes < uBufferSize * uSampleSize) memset((char *)pvBuffer + uSizeInBytes, '\0', uBufferSize*uSampleSize - uSizeInBytes); #endif return TRUE; } //=============================================================================================== // FUNCTION: ABF_MultiplexRead // PURPOSE: This routine reads an episode of data from the data file previously opened. // // INPUT: // nFile the file index into the g_FileData structure array // dwEpisode the episode number to be read. Episodes start at 1 // // OUTPUT: // pvBuffer the data buffer for the data // puSizeInSamples the number of valid points in the data buffer // BOOL WINAPI ABF2_MultiplexRead(int nFile, const ABF2FileHeader *pFH, DWORD dwEpisode, void *pvBuffer, UINT uBufferSize, UINT *puSizeInSamples, int *pnError) { // ABFH_ASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Set the sample size in the data. UINT uSampleSize = ABF2_SampleSize(pFH); // UINT uBytesPerEpisode = UINT(pFH->lNumSamplesPerEpisode) * uSampleSize; // If a synch array is not present, create a synch entry for this chunk, // otherwise, read it from the synch array. Synch SynchEntry; if (!ABF2_GetSynchEntry( pFH, pFI, dwEpisode, &SynchEntry )) return ErrorReturn(pnError, ABF_EEPISODERANGE); // return the size of the episode to be read. if (puSizeInSamples) *puSizeInSamples = UINT(SynchEntry.dwLength); // Add the distance to the start of the data to the data offset LONGLONG lFileOffset = LONGLONG(ABF2_GetDataOffset(pFH)) + SynchEntry.dwFileOffset; // Seek to the calculated file position. VERIFY(pFI->Seek(lFileOffset, FILE_BEGIN)); UINT uSizeInBytes = SynchEntry.dwLength * uSampleSize; // ARRAYASSERT((BYTE *)pvBuffer, uSizeInBytes); // Do the file read if (!pFI->Read(pvBuffer, uSizeInBytes)) return ErrorReturn(pnError, ABF_EREADDATA); // If episode is not full, pad it out with 0's // Make sure that it is zero-padded to avoid this adventurous memset #if 0 if (uSizeInBytes < uBufferSize * uSampleSize) memset((char *)pvBuffer + uSizeInBytes, '\0', uBufferSize*uSampleSize - uSizeInBytes); #endif return TRUE; } #if 0 //=============================================================================================== // FUNCTION: SynchCountToSamples // PURPOSE: Rounds a synch count to the nearest sample count. // inline UINT SynchCountToSamples(const ABFFileHeader *pFH, UINT uSynchStart) { double dMS = 0.0; ABFH_SynchCountToMS(pFH, uSynchStart, &dMS); double dSampleInterval = ABFH_GetFirstSampleInterval(pFH); return UINT(dMS/dSampleInterval*1E3 + 0.5); } //=============================================================================================== // FUNCTION: ABF_MultiplexWrite // PURPOSE: This routine writes an episode of data from the end of the data file // previously opened with a ABF_WriteOpen call. Episodes may only be written // sequentially. // INPUT: // nFile the file index into the g_FileData structure array // uFlags flags governing the write process // uSizeInSamples the number of valid points in the data buffer // dwEpiStart the start time (in synch time units) of this episode // pvBuffer the data buffer for the data // BOOL WINAPI ABF_MultiplexWrite(int nFile, ABFFileHeader *pFH, UINT uFlags, const void *pvBuffer, DWORD dwEpiStart, UINT uSizeInSamples, int *pnError) { ABFH_WASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag(FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); // Check parameters in a debug build. #ifdef _DEBUG if ((pFH->nOperationMode==ABF_WAVEFORMFILE) || (pFH->nOperationMode==ABF_HIGHSPEEDOSC) || (pFH->nOperationMode==ABF_FIXLENEVENTS)) { ASSERT(pFH->lNumSamplesPerEpisode==long(uSizeInSamples)); ASSERT((uFlags & ABF_APPEND) == 0); } #endif // Set the sample size in the data. UINT uSampleSize = SampleSize(pFH); UINT uSizeInBytes = uSizeInSamples * uSampleSize; ARRAYASSERT((short *)pvBuffer, uSizeInBytes/2); // Seek to the end of the file. VERIFY(pFI->Seek( 0L, FILE_END)); if (!pFI->Write(pvBuffer, uSizeInBytes)) return ErrorReturn(pnError, ABF_EDISKFULL); UINT uAcquiredEpisodes = pFI->GetAcquiredEpisodes(); UINT uAcquiredSamples = pFI->GetAcquiredSamples(); UINT uSynchCount = pFI->GetSynchCount(); // Clear the append flag if there is nothing to append to. if (uSynchCount == 0) uFlags &= ~ABF_APPEND; switch (pFH->nOperationMode) { case ABF_GAPFREEFILE: { UINT uEpiStartInSamples = SynchCountToSamples(pFH, dwEpiStart); // If there is a synch array already... if (uSynchCount != 0) { UINT uStartOfLast = SynchCountToSamples(pFH, pFI->EpisodeStart( uAcquiredEpisodes )); UINT uEndOfLast = uStartOfLast + pFI->EpisodeLength( uAcquiredEpisodes ); if (uEpiStartInSamples <= uEndOfLast) // If we are just appending onto the previous event... uFlags |= ABF_APPEND; // FALL THROUGH TO DEFAULT CASE FOR SYNCH ARRAY PROCESSING!!! } else // No synch array as yet - either append or add one. { // if the first block is being extended - no synch array required. if (uEpiStartInSamples <= uAcquiredSamples) { pFI->SetAcquiredEpisodes( 1 ); break; } // If some data has been acquired but no synch entries added... if (uAcquiredSamples > 0) { // Add in the first synch entry for data already written pFI->PutSynchEntry(0, uAcquiredSamples, 0); pFI->SetAcquiredEpisodes( 1 ); } // FALL THROUGH TO DEFAULT CASE FOR SYNCH ARRAY PROCESSING!!! } } default: if (uFlags & ABF_APPEND) pFI->IncreaseEventLength( uSizeInSamples ); else { pFI->PutSynchEntry(dwEpiStart, uSizeInSamples, uAcquiredSamples * uSampleSize); pFI->SetAcquiredEpisodes(++uAcquiredEpisodes); } break; } uAcquiredSamples += uSizeInSamples; pFI->SetAcquiredSamples(uAcquiredSamples); pFH->lActualAcqLength = (ABFLONG)uAcquiredSamples; pFH->lActualEpisodes = (ABFLONG)pFI->GetAcquiredEpisodes(); return TRUE; } //=============================================================================================== // FUNCTION: ABF_SetEpisodeStart // PURPOSE: Sets the start time of a given sweep in synch time units. // INPUT: // nFile the file index into the g_FileData structure array // uEpisode the (one based) episode number. // uEpiStart the start time (in synch time units) of this episode // BOOL WINAPI ABF_SetEpisodeStart(int nFile, UINT uEpisode, UINT uEpiStart, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag(FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); UINT uSynchCount = pFI->GetSynchCount(); if (uEpisode > uSynchCount) return ErrorReturn(pnError, ABF_EEPISODERANGE); pFI->SetEpisodeStart(uEpisode, uEpiStart); return TRUE; } //=============================================================================================== // FUNCTION: ABF_WriteRawData // PURPOSE: This routine writes a raw buffer of binary data to the current position of an // ABF file previously opened with a ABF_WriteOpen call. This routine is provided // for acquisition programs that buffer up episodic data and then write it out in // large chunks. This provides an alternative to retrieving the low-level file handle // and acting on it, as this can be non-portable, and assumptions would have to be // made regarding the type of file handle returned (DOS or C runtime). // INPUT: // nFile the file index into the g_FileData structure array // pvBuffer the data buffer for the data // dwSizeInBytes the number of bytes of data to write // BOOL WINAPI ABF_WriteRawData(int nFile, const void *pvBuffer, DWORD dwSizeInBytes, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; #ifdef _DEBUG // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); #endif ARRAYASSERT((short *)pvBuffer, UINT(dwSizeInBytes/2)); if (!pFI->Write(pvBuffer, dwSizeInBytes)) return ErrorReturn(pnError, ABF_EDISKFULL); return TRUE; } #endif //=============================================================================================== // FUNCTION: PackSamples // PURPOSE: Packs the samples from the source array into the destination array, // assuming the given skip factor // INPUT: // pvSource the pointer to the source of data. // pvDestination the pointer to the destination of data. // uSourceLen the length of the data to be packed // uFirstSample the starting index of the first element // uSkip the skip factor for the packing // static void PackSamples(void *pvSource, void *pvDestination, UINT uSourceLen, UINT uFirstSample, UINT uSampleSize, UINT uSkip) { ASSERT(uSkip > 0); // ARRAYASSERT((BYTE *)pvSource, uSourceLen * uSampleSize); // ARRAYASSERT((BYTE *)pvDestination, (uSourceLen / uSkip) * uSampleSize); if (uSampleSize == sizeof(short)) { // adjust the starting offset short *piSource = (short *)pvSource; short *piDestination = (short *)pvDestination; for (UINT i=uFirstSample; ilNumSamplesPerEpisode/pFH->nADCNumChannels)); ARRAYASSERT(pnSource, (UINT)(pFH->lNumSamplesPerEpisode)); UINT uSkip = (UINT)pFH->nADCNumChannels; UINT uSourceLen = (UINT)pFH->lNumSamplesPerEpisode; float fValToUUFactor, fValToUUShift; ABFH_GetADCtoUUFactors( pFH, nChannel, &fValToUUFactor, &fValToUUShift); for (UINT i=uChannelOffset; ilNumSamplesPerEpisode/pFH->nADCNumChannels)); // ARRAYASSERT(pnSource, (UINT)(pFH->lNumSamplesPerEpisode)); UINT uSkip = (UINT)pFH->nADCNumChannels; UINT uSourceLen = (UINT)pFH->lNumSamplesPerEpisode; float fValToUUFactor, fValToUUShift; ABF2H_GetADCtoUUFactors( pFH, nChannel, &fValToUUFactor, &fValToUUShift); for (UINT i=uChannelOffset; i=0; i--) pfDestination[i] = pnSource[i] * fValToUUFactor + fValToUUShift; } //=============================================================================================== // FUNCTION: ConvertInPlace // PURPOSE: Convert a single channel of two byte integers to floats, in-place. // static void ABF2_ConvertInPlace(const ABF2FileHeader *pFH, int nChannel, UINT uNumSamples, void *pvBuffer) { // ABFH_ASSERT(pFH); // ARRAYASSERT((float *)pvBuffer, uNumSamples); ADC_VALUE *pnSource = ((ADC_VALUE *)pvBuffer); float *pfDestination = ((float *)pvBuffer); float fValToUUFactor, fValToUUShift; ABF2H_GetADCtoUUFactors( pFH, nChannel, &fValToUUFactor, &fValToUUShift); for (int i=uNumSamples-1; i>=0; i--) pfDestination[i] = pnSource[i] * fValToUUFactor + fValToUUShift; } //=============================================================================================== // FUNCTION: ConvertADCToResults // PURPOSE: Get the results array for the math channel. // static BOOL ConvertADCToResults(const ABFFileHeader *pFH, float *pfDestination, UINT uDestArrayLen, short *pnSource) { // ABFH_ASSERT(pFH); // ARRAYASSERT(pfDestination, (UINT)(pFH->lNumSamplesPerEpisode/pFH->nADCNumChannels)); ARRAYASSERT(pnSource, (UINT)(pFH->lNumSamplesPerEpisode)); UINT uAOffset, uBOffset; short *pnSourceA, *pnSourceB; int nChannelA = pFH->nArithmeticADCNumA; int nChannelB = pFH->nArithmeticADCNumB; UINT i, uSkip = pFH->nADCNumChannels; UINT uSourceArrayLen = (UINT)pFH->lNumSamplesPerEpisode; float fValToUUFactorA, fValToUUShiftA; float fValToUUFactorB, fValToUUShiftB; float fUserUnitA, fUserUnitB; if (!ABFH_GetChannelOffset(pFH, nChannelA, &uAOffset)) return FALSE; if (!ABFH_GetChannelOffset(pFH, nChannelB, &uBOffset)) return FALSE; ABFH_GetADCtoUUFactors( pFH, nChannelA, &fValToUUFactorA, &fValToUUShiftA); ABFH_GetADCtoUUFactors( pFH, nChannelB, &fValToUUFactorB, &fValToUUShiftB); pnSourceA = pnSource + uAOffset; // adjust the starting offset pnSourceB = pnSource + uBOffset; // adjust the starting offset uSourceArrayLen -= max(uAOffset, uBOffset); for (i=0; ilNumSamplesPerEpisode/pFH->nADCNumChannels)); ARRAYASSERT(pnSource, (UINT)(pFH->lNumSamplesPerEpisode)); UINT uAOffset, uBOffset; short *pnSourceA, *pnSourceB; int nChannelA = pFH->nArithmeticADCNumA; int nChannelB = pFH->nArithmeticADCNumB; UINT i, uSkip = pFH->nADCNumChannels; UINT uSourceArrayLen = (UINT)pFH->lNumSamplesPerEpisode; float fValToUUFactorA, fValToUUShiftA; float fValToUUFactorB, fValToUUShiftB; float fUserUnitA, fUserUnitB; if (!ABF2H_GetChannelOffset(pFH, nChannelA, &uAOffset)) return FALSE; if (!ABF2H_GetChannelOffset(pFH, nChannelB, &uBOffset)) return FALSE; ABF2H_GetADCtoUUFactors( pFH, nChannelA, &fValToUUFactorA, &fValToUUShiftA); ABF2H_GetADCtoUUFactors( pFH, nChannelB, &fValToUUFactorB, &fValToUUShiftB); pnSourceA = pnSource + uAOffset; // adjust the starting offset pnSourceB = pnSource + uBOffset; // adjust the starting offset uSourceArrayLen -= max(uAOffset, uBOffset); for (i=0; ilNumSamplesPerEpisode/pFH->nADCNumChannels); ARRAYASSERT(pfSource, pFH->lNumSamplesPerEpisode); int nChannelA = pFH->nArithmeticADCNumA; int nChannelB = pFH->nArithmeticADCNumB; UINT uSkip = pFH->nADCNumChannels; UINT uSourceArrayLen = (UINT)pFH->lNumSamplesPerEpisode; UINT uAOffset, uBOffset; if (!ABFH_GetChannelOffset(pFH, nChannelA, &uAOffset)) return FALSE; if (!ABFH_GetChannelOffset(pFH, nChannelB, &uBOffset)) return FALSE; float *pfSourceA = pfSource + uAOffset; // adjust the starting offset float *pfSourceB = pfSource + uBOffset; // adjust the starting offset uSourceArrayLen -= max(uAOffset, uBOffset); for (UINT i=0; ilNumSamplesPerEpisode/pFH->nADCNumChannels); ARRAYASSERT(pfSource, pFH->lNumSamplesPerEpisode); int nChannelA = pFH->nArithmeticADCNumA; int nChannelB = pFH->nArithmeticADCNumB; UINT uSkip = pFH->nADCNumChannels; UINT uSourceArrayLen = (UINT)pFH->lNumSamplesPerEpisode; UINT uAOffset, uBOffset; if (!ABF2H_GetChannelOffset(pFH, nChannelA, &uAOffset)) return FALSE; if (!ABF2H_GetChannelOffset(pFH, nChannelB, &uBOffset)) return FALSE; float *pfSourceA = pfSource + uAOffset; // adjust the starting offset float *pfSourceB = pfSource + uBOffset; // adjust the starting offset uSourceArrayLen -= max(uAOffset, uBOffset); for (UINT i=0; i pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels (floats) // BOOL WINAPI ABF_ReadChannel(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, Vector_float& pfBuffer, UINT *puNumSamples, int *pnError) { #if defined(_WINDOWS) && !defined(__MINGW32__) // ABFH_ASSERT(pFH); // ARRAYASSERT(&pfBuffer[0], (UINT)(pFH->lNumSamplesPerEpisode/pFH->nADCNumChannels)); #endif CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Get the offset into the multiplexed data array for the first point UINT uChannelOffset; if (!ABFH_GetChannelOffset(pFH, nChannel, &uChannelOffset)) return ErrorReturn(pnError, ABF_EINVALIDCHANNEL); // If there is only one channel, read the data directly into the passed buffer, // converting it in-place if required. if ((pFH->nADCNumChannels == 1) && (nChannel >= 0)) { if (!ABF_MultiplexRead(nFile, pFH, dwEpisode, &pfBuffer[0], (UINT)pfBuffer.size(), puNumSamples, pnError)) return FALSE; if (pFH->nDataFormat == ABF_INTEGERDATA) // if data is 2byte ints, convert to floats ConvertInPlace(pFH, nChannel, *puNumSamples, &pfBuffer[0]); return TRUE; } // Set the sample size in the data. UINT uSampleSize = SampleSize(pFH); // Only create the read buffer on demand, it is freed when the file is closed. if (!pFI->GetReadBuffer()) { if (!pFI->AllocReadBuffer(pFH->lNumSamplesPerEpisode * uSampleSize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); } // Read the whole episode from the ABF file only if it is not already cached. UINT uEpisodeSize = pFI->GetCachedEpisodeSize(); if (dwEpisode != pFI->GetCachedEpisode()) { uEpisodeSize = (UINT)pFH->lNumSamplesPerEpisode; if (!ABF_MultiplexRead(nFile, pFH, dwEpisode, pFI->GetReadBuffer(), pFH->lNumSamplesPerEpisode * uSampleSize, &uEpisodeSize, pnError)) { pFI->SetCachedEpisode(UINT(-1), 0); return FALSE; } pFI->SetCachedEpisode(dwEpisode, uEpisodeSize); } // if data is 2byte ints, convert to floats if (pFH->nDataFormat == ABF_INTEGERDATA) { // Cast the read buffer to the appropriate format. ADC_VALUE *pnReadBuffer = (ADC_VALUE *)pFI->GetReadBuffer(); // A channel number of -1 refers to the results channel if (nChannel >= 0) ConvertADCToFloats(pFH, nChannel, uChannelOffset, &pfBuffer[0], (UINT)pfBuffer.size(), pnReadBuffer); else if (!ConvertADCToResults(pFH, &pfBuffer[0], (UINT)pfBuffer.size(), pnReadBuffer)) return ErrorReturn(pnError, ABF_BADMATHCHANNEL); } else // Data is 4-byte floats. { // Cast the read buffer to the appropriate format. float *pfReadBuffer = (float *)pFI->GetReadBuffer(); // A channel number of -1 refers to the results channel if (nChannel >= 0) PackSamples(pfReadBuffer, &pfBuffer[0], uEpisodeSize, uChannelOffset, uSampleSize, pFH->nADCNumChannels); else if (!ConvertToResults(pFH, &pfBuffer[0], (UINT)pfBuffer.size(), pfReadBuffer)) return ErrorReturn(pnError, ABF_BADMATHCHANNEL); } // Return the length of the data block. if (puNumSamples) *puNumSamples = uEpisodeSize / pFH->nADCNumChannels; return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadChannel // PURPOSE: This function reads a complete multiplexed episode from the data file and // then converts a single de-multiplexed channel to "UserUnits" in pfBuffer. // // The required size of the passed buffer is: // pfBuffer -> pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels (floats) // BOOL WINAPI ABF2_ReadChannel(int nFile, const ABF2FileHeader *pFH, int nChannel, DWORD dwEpisode, Vector_float& pfBuffer, UINT *puNumSamples, int *pnError) { // ABFH_ASSERT(pFH); // ARRAYASSERT(pfBuffer, (UINT)(pFH->lNumSamplesPerEpisode/pFH->nADCNumChannels)); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Get the offset into the multiplexed data array for the first point UINT uChannelOffset; if (!ABF2H_GetChannelOffset(pFH, nChannel, &uChannelOffset)) return ErrorReturn(pnError, ABF_EINVALIDCHANNEL); // If there is only one channel, read the data directly into the passed buffer, // converting it in-place if required. if ((pFH->nADCNumChannels == 1) && (nChannel >= 0)) { if (!ABF2_MultiplexRead(nFile, pFH, dwEpisode, &pfBuffer[0], (UINT)pfBuffer.size(), puNumSamples, pnError)) return FALSE; if (pFH->nDataFormat == ABF_INTEGERDATA) // if data is 2byte ints, convert to floats ABF2_ConvertInPlace(pFH, nChannel, *puNumSamples, &pfBuffer[0]); return TRUE; } // Set the sample size in the data. UINT uSampleSize = ABF2_SampleSize(pFH); // Only create the read buffer on demand, it is freed when the file is closed. if (!pFI->GetReadBuffer()) { if (!pFI->AllocReadBuffer(pFH->lNumSamplesPerEpisode * uSampleSize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); } // Read the whole episode from the ABF file only if it is not already cached. UINT uEpisodeSize = pFI->GetCachedEpisodeSize(); if (dwEpisode != pFI->GetCachedEpisode()) { uEpisodeSize = (UINT)pFH->lNumSamplesPerEpisode; if (!ABF2_MultiplexRead(nFile, pFH, dwEpisode, pFI->GetReadBuffer(), pFH->lNumSamplesPerEpisode * uSampleSize, &uEpisodeSize, pnError)) { pFI->SetCachedEpisode(UINT(-1), 0); return FALSE; } pFI->SetCachedEpisode(dwEpisode, uEpisodeSize); } // if data is 2byte ints, convert to floats if (pFH->nDataFormat == ABF_INTEGERDATA) { // Cast the read buffer to the appropriate format. ADC_VALUE *pnReadBuffer = (ADC_VALUE *)pFI->GetReadBuffer(); // A channel number of -1 refers to the results channel if (nChannel >= 0) ABF2_ConvertADCToFloats(pFH, nChannel, uChannelOffset, &pfBuffer[0], (UINT)pfBuffer.size(), pnReadBuffer); else if (!ABF2_ConvertADCToResults(pFH, &pfBuffer[0], (UINT)pfBuffer.size(), pnReadBuffer)) return ErrorReturn(pnError, ABF_BADMATHCHANNEL); } else // Data is 4-byte floats. { // Cast the read buffer to the appropriate format. float *pfReadBuffer = (float *)pFI->GetReadBuffer(); // A channel number of -1 refers to the results channel if (nChannel >= 0) PackSamples(pfReadBuffer, &pfBuffer[0], uEpisodeSize, uChannelOffset, uSampleSize, pFH->nADCNumChannels); else if (!ABF2_ConvertToResults(pFH, &pfBuffer[0], (UINT)pfBuffer.size(), pfReadBuffer)) return ErrorReturn(pnError, ABF_BADMATHCHANNEL); } // Return the length of the data block. if (puNumSamples) *puNumSamples = uEpisodeSize / pFH->nADCNumChannels; return TRUE; } #if 0 //=============================================================================================== // FUNCTION: ABF_ReadRawChannel // PURPOSE: This function reads a complete multiplexed episode from the data file and // then decimates it, returning single de-multiplexed channel in the raw data format. // // The required size of the passed buffer is: // pfBuffer -> pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels (floats) // BOOL WINAPI ABF_ReadRawChannel(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, void *pvBuffer, UINT *puNumSamples, int *pnError) { ABFH_ASSERT(pFH); // Set the sample size in the data. UINT uSampleSize = SampleSize(pFH); ARRAYASSERT((short *)pvBuffer, pFH->lNumSamplesPerEpisode/pFH->nADCNumChannels*uSampleSize/2); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Get the offset into the multiplexed data array for the first point UINT uChannelOffset; if (!ABFH_GetChannelOffset(pFH, nChannel, &uChannelOffset) || (nChannel < 0)) return ErrorReturn(pnError, ABF_EINVALIDCHANNEL); // If there is only one channel, read the data directly into the passed buffer, if (pFH->nADCNumChannels == 1) return ABF_MultiplexRead(nFile, pFH, dwEpisode, pvBuffer, puNumSamples, pnError); // Only create the read buffer on demand, it is freed when the file is closed. if (!pFI->GetReadBuffer()) { if (!pFI->AllocReadBuffer(pFH->lNumSamplesPerEpisode * uSampleSize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); } // Read the whole episode from the ABF file only if it is not already cached. UINT uEpisodeSize = pFI->GetCachedEpisodeSize(); if (dwEpisode != pFI->GetCachedEpisode()) { uEpisodeSize = (UINT)pFH->lNumSamplesPerEpisode; if (!ABF_MultiplexRead(nFile, pFH, dwEpisode, pFI->GetReadBuffer(), &uEpisodeSize, pnError)) { pFI->SetCachedEpisode(UINT(-1), 0); return FALSE; } pFI->SetCachedEpisode(dwEpisode, uEpisodeSize); } PackSamples(pFI->GetReadBuffer(), pvBuffer, uEpisodeSize, uChannelOffset, uSampleSize, pFH->nADCNumChannels); // Return the length of the data block. if (puNumSamples) *puNumSamples = uEpisodeSize / pFH->nADCNumChannels; return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadDACFileEpi // PURPOSE: This function reads an episode from the DACFile section. Users will normally // retrieve DAC file information transparently through the Get Waveform call. // BOOL WINAPI ABF_ReadDACFileEpi(int nFile, const ABFFileHeader *pFH, short *pnDACArray, DWORD dwEpisode, int *pnError) { return ABF_ReadDACFileEpiEx(nFile, pFH, pnDACArray, pFH->nActiveDACChannel, dwEpisode, pnError); } BOOL WINAPI ABF_ReadDACFileEpiEx(int nFile, const ABFFileHeader *pFH, short *pnDACArray, UINT nChannel, DWORD dwEpisode, int *pnError) { ABFH_ASSERT(pFH); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); #if USE_DACFILE_FIX // PRC DEBUG // UINT uNumSamples = NewFH.lNumSamplesPerEpisode / NewFH.nADCNumChannels; UINT uNumSamples = NewFH.lNumSamplesPerEpisode; #else UINT uNumSamples = NewFH.lNumSamplesPerEpisode / NewFH.nADCNumChannels; #endif ARRAYASSERT( pnDACArray, uNumSamples ); ASSERT( nChannel < ABF_WAVEFORMCOUNT ); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // If the requested episode is after the last one, then use the last one in the file. if( NewFH.lDACFileNumEpisodes[nChannel] < (ABFLONG)dwEpisode ) dwEpisode = (DWORD) NewFH.lDACFileNumEpisodes[nChannel]; if (NewFH.lDACFilePtr[nChannel]==0) { if (!pFI->GetDACFileSweep(nChannel, dwEpisode-1, pnDACArray, uNumSamples)) return ErrorReturn(pnError, ABF_EREADDACEPISODE); } else { UINT uOffset = NewFH.lDACFilePtr[nChannel] * ABF_BLOCKSIZE + (dwEpisode-1) * uNumSamples * sizeof(short); VERIFY(pFI->Seek( uOffset, FILE_BEGIN)); // Read the DACFile episode into the passed buffer UINT uBytesToRead = uNumSamples * sizeof(short); if (!pFI->Read(pnDACArray, uBytesToRead)) return ErrorReturn(pnError, ABF_EREADDACEPISODE); #if USE_DACFILE_FIX // PRC DEBUG // Tempory hack to decimate by number of channels. int nNumChans = NewFH.nADCNumChannels; if( nNumChans > 1 ) { for( UINT i=0; inActiveDACChannel, pnDACArray, pnError); } BOOL WINAPI ABF_WriteDACFileEpiEx(int nFile, ABFFileHeader *pFH, UINT uDACChannel, const short *pnDACArray, int *pnError) { ABFH_WASSERT(pFH); ASSERT( uDACChannel < ABF_WAVEFORMCOUNT ); // Coerce to safe value. if( uDACChannel >= ABF_WAVEFORMCOUNT ) { TRACE1( "ABF_WriteDACFileEpi: uDACChannel changed from %d to 0.\n", uDACChannel ); uDACChannel = 0; } ARRAYASSERT(pnDACArray, (UINT)(pFH->lNumSamplesPerEpisode)); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); // Take a copy of the passed in header to ensure it is 5k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); if (!pFI->PutDACFileSweep( uDACChannel, NewFH.lDACFileNumEpisodes[uDACChannel], pnDACArray, NewFH.lNumSamplesPerEpisode )) return ErrorReturn(pnError, ABF_EDISKFULL); NewFH.lDACFileNumEpisodes[uDACChannel]++; // Copy the original parameters back into the old header. ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; } #if USE_DACFILE_FIX // PRC DEBUG static int s_nFudgeChannels = -1; #endif //=============================================================================================== // FUNCTION: ScaleDACBuffer // PURPOSE: Fill the float buffer with DAC UU values that correspond to a particular // multiplex offset. // static void ScaleDACBuffer(const ABFFileHeader *pFH, UINT uDACChannel, UINT uADCChannelOffset, short *pnReadBuffer, float *pfBuffer) { ABFH_ASSERT(pFH); ASSERT( uDACChannel < ABF_WAVEFORMCOUNT ); // Coerce to safe value. if( uDACChannel >= ABF_WAVEFORMCOUNT ) { TRACE1( "ScaleDACBuffer: uDACChannel changed from %d to 0.\n", uDACChannel ); uDACChannel = 0; } UINT uNumSamples = (UINT)pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels; #if USE_DACFILE_FIX // PRC DEBUG ARRAYASSERT(pnReadBuffer, pFH->lNumSamplesPerEpisode ); #else ARRAYASSERT(pnReadBuffer, uNumSamples); #endif ARRAYASSERT(pfBuffer, uNumSamples); float fDACToUUFactor, fDACToUUShift; ABFH_GetDACtoUUFactors( pFH, uDACChannel, &fDACToUUFactor, &fDACToUUShift ); #if USE_DACFILE_FIX UINT uNumDACFileChannels = pFH->nADCNumChannels + s_nFudgeChannels; for (UINT i=uADCChannelOffset; inActiveDACChannel, dwEpisode, pfBuffer, pnError); } BOOL WINAPI ABF_GetWaveformEx(int nFile, const ABFFileHeader *pFH, UINT uDACChannel, DWORD dwEpisode, float *pfBuffer, int *pnError) { ABFH_ASSERT(pFH); ARRAYASSERT(pfBuffer, (UINT)(pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels)); if( pFH->nOperationMode != ABF_WAVEFORMFILE ) return ErrorReturn(pnError, ABF_ENOWAVEFORM); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); if( (NewFH.nWaveformEnable[uDACChannel] == FALSE) || (NewFH.nWaveformSource[uDACChannel] == ABF_WAVEFORMDISABLED)) return ErrorReturn(pnError, ABF_ENOWAVEFORM); if (NewFH.nWaveformSource[uDACChannel] == ABF_EPOCHTABLEWAVEFORM) { if (!ABFH_GetWaveformEx( &NewFH, uDACChannel, dwEpisode, pfBuffer, NULL)) return ErrorReturn(pnError, ABF_EBADWAVEFORM); return TRUE; } ASSERT(NewFH.nWaveformSource[uDACChannel] == ABF_DACFILEWAVEFORM); #if USE_DACFILE_FIX // PRC DEBUG CArrayPtr pnWorkBuffer(NewFH.lNumSamplesPerEpisode); #else CArrayPtr pnWorkBuffer(NewFH.lNumSamplesPerEpisode / NewFH.nADCNumChannels); #endif if (!pnWorkBuffer) return ErrorReturn(pnError, ABF_OUTOFMEMORY); if (!ABF_ReadDACFileEpiEx(nFile, &NewFH, pnWorkBuffer, uDACChannel, dwEpisode, pnError)) return FALSE; ScaleDACBuffer(&NewFH, uDACChannel, 0, pnWorkBuffer, pfBuffer); return TRUE; } //=============================================================================================== // FUNCTION: ABF_WriteTag // PURPOSE: This function buffers tags to a temporary file through the CABFItem object in the // file descriptor. // BOOL WINAPI ABF_WriteTag(int nFile, ABFFileHeader *pFH, const ABFTag *pTag, int *pnError) { ABFH_WASSERT(pFH); WPTRASSERT(pTag); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->PutTag(pTag)) return ErrorReturn(pnError, pFI->GetLastError()); pFH->lNumTagEntries = pFI->GetTagCount(); return TRUE; } //=============================================================================================== // FUNCTION: ABF_UpdateTag // PURPOSE: This function updates a tag entry in a writeable file. // BOOL WINAPI ABF_UpdateTag(int nFile, UINT uTag, const ABFTag *pTag, int *pnError) { WPTRASSERT(pTag); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->UpdateTag(uTag, pTag)) return ErrorReturn(pnError, pFI->GetLastError()); return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadTags // PURPOSE: This function reads a tag array from the TagArray section // BOOL WINAPI ABF_ReadTags(int nFile, const ABFFileHeader *pFH, DWORD dwFirstTag, ABFTag *pTagArray, UINT uNumTags, int *pnError) { ABFH_ASSERT(pFH); ARRAYASSERT(pTagArray, uNumTags); UINT i; CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // If this file is being written, the tags will be in the virtual tag buffer. if (pFI->GetTagCount() > 0) { if (!pFI->ReadTags(dwFirstTag, pTagArray, uNumTags)) return ErrorReturn(pnError, ABF_EREADTAG); return TRUE; } // If there are no tags present, return an error. if ((pFH->lTagSectionPtr==0) || (pFH->lNumTagEntries==0)) return ErrorReturn(pnError, ABF_ENOTAGS); if (dwFirstTag+uNumTags > UINT(pFH->lNumTagEntries)) return ErrorReturn(pnError, ABF_EREADTAG); // Read and convert old FETCHEX tags. if (pFH->nFileType != ABF_ABFFILE) { // Seek to the start of the requested segment (first entry is the count of tags, this is // placed in pFH->lNumTagEntries when the header is read). UINT uSeekPos = UINT(pFH->lTagSectionPtr) * ABF_BLOCKSIZE + dwFirstTag * sizeof(ABFLONG) + sizeof(ABFLONG); VERIFY(pFI->Seek(uSeekPos, FILE_BEGIN)); // Allocate a temporary buffer to read the old tags into. CArrayPtr plTags(uNumTags); if (!plTags) return ErrorReturn(pnError, ABF_OUTOFMEMORY); // Do the read. if (!pFI->Read(plTags, uNumTags * sizeof(ABFLONG))) { TRACE( "Tags could not be read from the file.\n" ); // Do not flag the error - this allows the tags to be quietly ignored. // return ErrorReturn(pnError, ABF_EREADTAG); } // Convert the tags to ABFtags. for (i=0; i= 0 ) { pTagArray[i].lTagTime = plTags[i]; memset(pTagArray[i].sComment, ' ', ABF_TAGCOMMENTLEN); pTagArray[i].nTagType = ABF_TIMETAG; pTagArray[i].nVoiceTagNumber = 0; } } } else { // Seek to the start of the requested segment. LONGLONG llSeekPos = LONGLONG(pFH->lTagSectionPtr) * ABF_BLOCKSIZE + dwFirstTag * sizeof(ABFTag); VERIFY(pFI->Seek(llSeekPos, FILE_BEGIN)); // Read the Tag Array directly into the passed buffer UINT uBytesToRead = uNumTags * sizeof(ABFTag); if (!pFI->Read(pTagArray, uBytesToRead)) return ErrorReturn(pnError, ABF_EREADTAG); } // AxoTape V2.0 filled the comment field with '\0's - convert to spaces. if (pFH->fFileVersionNumber < 1.3F) { // Set the comment string to all spaces. for (i=0; isComment; UINT i=0; for (i=0; isComment, ABF_TAGCOMMENTLEN-i); szRval[ABF_TAGCOMMENTLEN-i] = '\0'; } else LoadString(g_hInstance, IDS_NONE, szRval, sizeof(szRval)); return szRval; } //=============================================================================================== // FUNCTION: ABF_FormatTag // PURPOSE: This function reads a tag TagArray section and formats it as ASCII text. // NOTE: If tag number -1 is requested, the ASCII text returns column headings. // BOOL WINAPI ABF_FormatTag(int nFile, const ABFFileHeader *pFH, ABFLONG lTagNumber, char *pszBuffer, UINT uSize, int *pnError) { ABFH_ASSERT(pFH); ARRAYASSERT(pszBuffer, uSize); BOOL bEpisodic = ((pFH->nOperationMode==ABF_WAVEFORMFILE) || (pFH->nOperationMode==ABF_HIGHSPEEDOSC)); if (lTagNumber < 0) { int nStringID = bEpisodic ? IDS_EPITAGHEADINGS : IDS_CONTTAGHEADINGS; return (BOOL)LoadString(g_hInstance, nStringID, pszBuffer, uSize); } ABFTag Tag; char szBuf[ABF_MAXTAGFORMATLEN+4]; if (!ABF_ReadTags(nFile, pFH, UINT(lTagNumber), &Tag, 1, pnError)) return FALSE; double dTimeInMS = 0.0; ABFH_SynchCountToMS(pFH, Tag.lTagTime, &dTimeInMS); char szTagTime[32]; ABFU_FormatDouble(dTimeInMS/1E3, 10, szTagTime, sizeof(szTagTime)); char *ps = GetTagComment(&Tag); if (bEpisodic) { DWORD dwEpisode = 1; DWORD dwSynchCount = Tag.lTagTime; ABF_EpisodeFromSynchCount(nFile, pFH, &dwSynchCount, &dwEpisode, NULL); // "Tag # Time (s) Episode Comment" sprintf(szBuf, "%4ld %11.11s %4ld %-56.56s", lTagNumber+1, szTagTime, dwEpisode, ps); // NOTE: the above must NOT expand out to more than ABF_MAXTAGFORMATLEN } else // "Tag # Time (s) Comment" sprintf(szBuf, "%4ld %11.11s %-56.56s", lTagNumber+1, szTagTime, ps); strncpy(pszBuffer, szBuf, uSize-1); pszBuffer[uSize-1] = '\0'; return TRUE; } //=============================================================================================== // FUNCTION: ABF_WriteDelta // PURPOSE: This function buffers tags to a temporary file through the CABFItem object in the // file descriptor. // BOOL WINAPI ABF_WriteDelta(int nFile, ABFFileHeader *pFH, const ABFDelta *pDelta, int *pnError) { ABFH_WASSERT(pFH); WPTRASSERT(pDelta); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->PutDelta(pDelta)) return ErrorReturn(pnError, pFI->GetLastError()); pFH->lNumDeltas = pFI->GetDeltaCount(); return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadDeltas // PURPOSE: This function reads a Delta array from the DeltaArray section // BOOL WINAPI ABF_ReadDeltas(int nFile, const ABFFileHeader *pFH, DWORD dwFirstDelta, ABFDelta *pDeltaArray, UINT uNumDeltas, int *pnError) { ABFH_ASSERT(pFH); ARRAYASSERT(pDeltaArray, uNumDeltas); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // If this file is being written, the Deltas will be in the virtual Delta buffer. if (pFI->GetDeltaCount() > 0) { if (!pFI->ReadDeltas(dwFirstDelta, pDeltaArray, uNumDeltas)) return ErrorReturn(pnError, ABF_EREADDELTA); return TRUE; } // If there are no Deltas present, return an error. if ((pFH->lDeltaArrayPtr==0) || (pFH->lNumDeltas==0)) return ErrorReturn(pnError, ABF_ENODELTAS); if (dwFirstDelta+uNumDeltas > UINT(pFH->lNumDeltas)) return ErrorReturn(pnError, ABF_EREADDELTA); // Seek to the start of the requested segment. LONGLONG llSeekPos = LONGLONG(pFH->lDeltaArrayPtr) * ABF_BLOCKSIZE + dwFirstDelta * sizeof(ABFDelta); VERIFY(pFI->Seek(llSeekPos, FILE_BEGIN)); // Read the Delta Array directly into the passed buffer UINT uBytesToRead = uNumDeltas * sizeof(ABFDelta); if (!pFI->Read(pDeltaArray, uBytesToRead)) return ErrorReturn(pnError, ABF_EREADTAG); return TRUE; } //=============================================================================================== // FUNCTION: FormatAsBinary // PURPOSE: Formats a . // static int FormatAsBinary(UINT uValue, LPSTR pszBuffer, UINT uBufferLength) { UINT uNumBits = 8; if (uNumBits >= uBufferLength) uNumBits = uBufferLength - 1; for (UINT i=0; ilParameterID) { case ABF_DELTA_HOLDING0: case ABF_DELTA_HOLDING1: case ABF_DELTA_HOLDING2: case ABF_DELTA_HOLDING3: { UINT uDAC = pDelta->lParameterID - ABF_DELTA_HOLDING0; char szSignal[ABF_DACNAMELEN+1] = { '#', char(uDAC+'0'), '\0' }; char szUnits[ABF_DACUNITLEN+2] = { ' ', '\0' }; ABF_GET_STRING(szSignal, pFH->sDACChannelName[uDAC], sizeof(szSignal)); ABF_GET_STRING(szUnits+1, pFH->sDACChannelUnits[uDAC], sizeof(szUnits)-1); _snprintf(szText, sizeof(szText), "Holding on '%s' => %g", szSignal, pDelta->fNewParamValue); if (szUnits[1] != '\0') strcat(szText, szUnits); break; } case ABF_DELTA_DIGITALOUTS: { char szBuffer[9]; FormatAsBinary(UINT(pDelta->lNewParamValue), szBuffer, sizeof(szBuffer)); _snprintf(szText, sizeof(szText), "Digital Outputs => %s", szBuffer); break; } case ABF_DELTA_THRESHOLD: _snprintf(szText, sizeof(szText), "Threshold => %g", pDelta->fNewParamValue); break; case ABF_DELTA_PRETRIGGER: _snprintf(szText, sizeof(szText), "Pre-trigger => %d", (int)( pDelta->lNewParamValue / pFH->nADCNumChannels ) ); break; default: if ((pDelta->lParameterID >= ABF_DELTA_AUTOSAMPLE_GAIN) && (pDelta->lParameterID < ABF_DELTA_AUTOSAMPLE_GAIN+ABF_ADCCOUNT)) { _snprintf(szText, sizeof(szText), "Autosample gain => %g", pDelta->fNewParamValue); break; } ERRORMSG1("ABFDelta: Unexpected parameter ID '%d'.", pDelta->lParameterID); return ErrorReturn(pnError, ABF_EBADDELTAID); } strncpy(pszText, szText, uTextLen-1); pszText[uTextLen-1] = '\0'; return TRUE; } //=============================================================================================== // FUNCTION: ABF_EpisodeFromSynchCount // PURPOSE: This routine returns the episode number for the synch count that is // passed as an argument. // INPUT: // nFile the file index into the g_FileData structure array // pdwSynchCount the synch count to search for. // // OUTPUT: // pdwEpisode the episode number which contains the requested sample // pdwSynchCount the synch count of the start of the episode // BOOL WINAPI ABF_EpisodeFromSynchCount(int nFile, const ABFFileHeader *pFH, DWORD *pdwSynchCount, DWORD *pdwEpisode, int *pnError) { ABFH_ASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; UINT uAcquiredEpisodes = pFI->GetAcquiredEpisodes(); // For data that is continuous in time or for a Waveform data file, just // calculate the episode number by dividing the synch count by the episode // size in samples. if (pFI->GetSynchCount() == 0) // (old ABF_WAVEFORMFILE or ABF_GAPFREEFILE) { UINT uEpiSize = UINT(pFH->lNumSamplesPerEpisode); UINT uEpisode = *pdwSynchCount / uEpiSize + 1; if (uEpisode > uAcquiredEpisodes) uEpisode = uAcquiredEpisodes; *pdwSynchCount = uEpiSize * (uEpisode - 1); *pdwEpisode = uEpisode; return TRUE; } // Search the data file for the target sample number, taking into account // the missing samples between episodes. UINT uEpiStart = pFI->EpisodeStart(1); if (uEpiStart > *pdwSynchCount) { *pdwEpisode = 1; *pdwSynchCount = uEpiStart; return TRUE; } // Do a linear search on the synch array to find the episode that corresponds // to this sample number. This may be changed to a binary search in the future if // it seems to be too slow on really big data files. UINT uCounter = uEpiStart; for (UINT i=2; i <= uAcquiredEpisodes; i++) { uEpiStart = pFI->EpisodeStart(i); if (uEpiStart > *pdwSynchCount) { *pdwEpisode = i - 1; *pdwSynchCount = uCounter; return TRUE; } uCounter = uEpiStart; } // Return the results. *pdwEpisode = uAcquiredEpisodes; *pdwSynchCount = uCounter; return TRUE; } //=============================================================================================== // FUNCTION: ABF_SynchCountFromEpisode // PURPOSE: This routine returns the synch count for the start of the given // episode number that is passed as an argument. // INPUT: // nFile the file index into the g_FileData structure array // pdwEpisode the episode number which is being searched for // // OUTPUT: // pdwSynchCount the synch count of the start of the episode // BOOL WINAPI ABF_SynchCountFromEpisode(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwSynchCount, int *pnError) { ABFH_ASSERT(pFH); WPTRASSERT(pdwSynchCount); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // For data that is continuous in time or is a Waveform data file then just // calculate the synch count by multiplying the episode number by the // episode size in samples. if (pFI->GetSynchCount() != 0) *pdwSynchCount = pFI->EpisodeStart(dwEpisode); else if (pFH->nOperationMode != ABF_WAVEFORMFILE) *pdwSynchCount = UINT(pFH->lNumSamplesPerEpisode) * (dwEpisode - 1); else { // (old ABF_WAVEFORMFILE) double dStartToStartUS = 0.0; ABFH_GetEpisodeStartToStart(pFH, &dStartToStartUS); *pdwSynchCount= ABFH_MSToSynchCount(pFH, dStartToStartUS/1E3 * (dwEpisode-1)); } return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetEpisodeFileOffset // PURPOSE: This routine returns the sample point offset in the ABF file for the start of the given // episode number that is passed as an argument. // INPUT: // nFile the file index into the g_FileData structure array // pdwEpisode the episode number which is being searched for // // OUTPUT: // plFileOffset the Sample point number of the first point in the episode (per channel). // BOOL WINAPI ABF_GetEpisodeFileOffset(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwFileOffset, int *pnError) { ABFH_ASSERT(pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // For data that is continuous in time or is a Waveform data file then just // calculate the sample number by multiplying the episode number by the // episode size in samples. if (pFI->GetSynchCount() == 0) // (ABF_WAVEFORMFILE or ABF_GAPFREEFILE) { UINT uEpiSize = (UINT)(pFH->lNumSamplesPerEpisode / pFH->nADCNumChannels); *pdwFileOffset = uEpiSize * (dwEpisode - 1); } else *pdwFileOffset = pFI->FileOffset(dwEpisode) / pFH->nADCNumChannels / SampleSize(pFH); return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetMissingSynchCount // PURPOSE: This routine returns the number of samples missing for event detected data for // the episode number passed as an argument. // INPUT: // nFile the file index into the g_FileData structure array // dwEpisode the episode number of interest // // OUTPUT: // pdwMissingSynchCount the number of synch counts absent prior to this episode // BOOL WINAPI ABF_GetMissingSynchCount(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwMissingSynchCount, int *pnError) { ABFH_ASSERT(pFH); DWORD dwSynchCount = 0; if (!ABF_SynchCountFromEpisode(nFile, pFH, dwEpisode, &dwSynchCount, pnError)) return FALSE; UINT uMissing = 0; if (dwEpisode == 1) uMissing = dwSynchCount; else { ASSERT(dwEpisode > 1); DWORD dwLastSynchCount = 0; if (!ABF_SynchCountFromEpisode(nFile, pFH, dwEpisode-1, &dwLastSynchCount, pnError)) return FALSE; // Get the duration in ms. double dDurationMS = 0.0; if (!ABF_GetEpisodeDuration(nFile, pFH, dwEpisode-1, &dDurationMS, pnError)) return FALSE; // Convert the duration to synch count. dwLastSynchCount += ABFH_MSToSynchCount(pFH, dDurationMS); // Calculate the number of missing synch counts. if (dwLastSynchCount > dwSynchCount) uMissing = 0; else uMissing = dwSynchCount - dwLastSynchCount; } *pdwMissingSynchCount = uMissing; return TRUE; } //=============================================================================================== // FUNCTION: ABF_HasOverlappedData // PURPOSE: Returns true if the file contains overlapped data. // BOOL WINAPI ABF_HasOverlappedData(int nFile, BOOL *pbHasOverlapped, int *pnError) { WPTRASSERT(pbHasOverlapped); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (!pFI->TestFlag(FI_READONLY)) return ErrorReturn(pnError, ABF_EWRITEONLYFILE); *pbHasOverlapped = pFI->GetOverlappedFlag(); return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF_GetNumSamples // PURPOSE: This routine returns the number of samples per channel in a given episode. // INPUT: // nFile the file index into the g_FileData structure array // dwEpisode the episode number of interest // // OUTPUT: // NumSamples% the number of data points in this episode // BOOL WINAPI ABF_GetNumSamples(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, UINT *puNumSamples, int *pnError) { // ABFH_ASSERT(pFH); UINT uRealSize; CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); if (pFI->GetSynchCount() == 0) /// (ABF_WAVEFORMFILE or ABF_GAPFREEFILE) { if ((pFH->nOperationMode == ABF_GAPFREEFILE) && (dwEpisode == pFI->GetAcquiredEpisodes())) uRealSize = pFI->GetLastEpiSize(); else uRealSize = UINT(pFH->lNumSamplesPerEpisode); } else uRealSize = (UINT)pFI->EpisodeLength(dwEpisode); *puNumSamples = uRealSize / pFH->nADCNumChannels; return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetNumSamples // PURPOSE: This routine returns the number of samples per channel in a given episode. // INPUT: // nFile the file index into the g_FileData structure array // dwEpisode the episode number of interest // // OUTPUT: // NumSamples% the number of data points in this episode // BOOL WINAPI ABF2_GetNumSamples(int nFile, const ABF2FileHeader *pFH, DWORD dwEpisode, UINT *puNumSamples, int *pnError) { // ABFH_ASSERT(pFH); UINT uRealSize; CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->CheckEpisodeNumber(dwEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); if (pFI->GetSynchCount() == 0) /// (ABF_WAVEFORMFILE or ABF_GAPFREEFILE) { if ((pFH->nOperationMode == ABF_GAPFREEFILE) && (dwEpisode == pFI->GetAcquiredEpisodes())) uRealSize = pFI->GetLastEpiSize(); else uRealSize = UINT(pFH->lNumSamplesPerEpisode); } else uRealSize = (UINT)pFI->EpisodeLength(dwEpisode); *puNumSamples = uRealSize / pFH->nADCNumChannels; return TRUE; } #if 0 //=============================================================================================== // FUNCTION: ABF_GetEpisodeDuration // PURPOSE: Get the duration of a given episode in ms. // BOOL WINAPI ABF_GetEpisodeDuration(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, double *pdDuration, int *pnError) { ABFH_ASSERT(pFH); ASSERT(dwEpisode >0); WPTRASSERT(pdDuration); *pdDuration = 0.0; double dDurationUS = 0.0; if (pFH->nOperationMode == ABF_WAVEFORMFILE) ABFH_GetEpisodeDuration(pFH, &dDurationUS); else { UINT uNumSamples; if (!ABF_GetNumSamples(nFile, pFH, dwEpisode, &uNumSamples, pnError)) return FALSE; // Calculate the duration in us. dDurationUS = ABFH_GetFirstSampleInterval(pFH) * uNumSamples * pFH->nADCNumChannels; } *pdDuration = dDurationUS / 1E3; // Convert from us to ms. ASSERT(*pdDuration != 0.0); return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetTrialDuration // PURPOSE: Calculate the trial duration in ms. // This is the duration between the start of the file and the last sample in the file. // BOOL WINAPI ABF_GetTrialDuration(int nFile, const ABFFileHeader *pFH, double *pdDuration, int *pnError) { ABFH_ASSERT(pFH); WPTRASSERT(pdDuration); *pdDuration = 0.0; // Get the start time of the last sweep. double dLastSweepStart = 0; if( !ABF_GetStartTime( nFile, pFH, pFH->nADCSamplingSeq[0], pFH->lActualEpisodes, &dLastSweepStart, pnError ) ) return FALSE; // Now the duration of the last sweep. double dLastSweepDuration = 0; if( !ABF_GetEpisodeDuration( nFile, pFH, pFH->lActualEpisodes, &dLastSweepDuration, pnError ) ) return FALSE; double dTotalDuration = dLastSweepStart + dLastSweepDuration; ASSERT( dTotalDuration > 0 ); *pdDuration = dTotalDuration; return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetStartTime // PURPOSE: Get the start time for the first sample of the given episode in ms. // BOOL WINAPI ABF_GetStartTime(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, double *pdStartTime, int *pnError) { ABFH_ASSERT(pFH); WPTRASSERT(pdStartTime); ASSERT(dwEpisode > 0); DWORD dwSynchCount = 0; if (!ABF_SynchCountFromEpisode(nFile, pFH, dwEpisode, &dwSynchCount, pnError)) return FALSE; // test for the average sweep if ( dwSynchCount == ABF_AVERAGESWEEPSTART ) { *pdStartTime = 0.0; return TRUE; } ABFH_SynchCountToMS(pFH, dwSynchCount, pdStartTime); // Get the offset into the multiplexed data array for the first point UINT uChannelOffset; if (!ABFH_GetChannelOffset(pFH, nChannel, &uChannelOffset)) return ErrorReturn(pnError, ABF_EINVALIDCHANNEL); *pdStartTime += uChannelOffset * ABFH_GetFirstSampleInterval(pFH) / 1E3; return TRUE; } //############################################################################################### //### //### Functions to read and write scope configuration data. //### //############################################################################################### //=============================================================================================== // FUNCTION: _UpdateOldDisplayEntries // PURPOSE: Updates the old display entries in the ABF header for backward compatability. // static void _UpdateOldDisplayEntries(ABFFileHeader *pFH, const ABFScopeConfig *pCfg) { if ((pFH->nOperationMode == ABF_WAVEFORMFILE) || (pFH->nOperationMode == ABF_HIGHSPEEDOSC)) { pFH->lStartDisplayNum = ABFLONG(pCfg->fDisplayStart); pFH->lFinishDisplayNum= ABFLONG(pCfg->fDisplayEnd); } else pFH->lSamplesPerTrace = ABFLONG(pCfg->fDisplayEnd); for (int i=0; inADCNumChannels); i++) { float fGain = 1.0F; float fOffset = 0.0F; int nChannel = pFH->nADCSamplingSeq[i]; const ABFSignal *pT = pCfg->TraceList; for (int j=0; jnTraceCount; j++, pT++) if ((pT->nMxOffset==i) && !pT->bFloatData) { fGain = pT->fDisplayGain; fOffset = pT->fDisplayOffset; break; } pFH->fADCDisplayAmplification[nChannel] = fGain; pFH->fADCDisplayOffset[nChannel] = fOffset; } } #include //=============================================================================================== // FUNCTION: ABF_WriteScopeConfig // PURPOSE: Saves the current scope configuration info to the data file. // BOOL WINAPI ABF_WriteScopeConfig(int nFile, ABFFileHeader *pFH, int nScopes, const ABFScopeConfig *pCfg, int *pnError) { ABFH_WASSERT(pFH); if (nScopes == 0) { pFH->lNumScopes = 0; pFH->lScopeConfigPtr = 0; return TRUE; } BOOL bHasData = ABF_HasData(nFile, pFH); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag(FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->FillToNextBlock(&pFH->lScopeConfigPtr)) return ErrorReturn(pnError, ABF_EDISKFULL); // The ABFScopeConfig has been extended for ABF file v1.68. // The original scope configurations defined as 'Section1' are written out to file first, // to keep backwards comapatability. // The new configuration data, known as 'Section2' will be appended to the scope configuration data. UINT uSizeofVersion1 = offsetof(ABFScopeConfig,nSizeofOldStructure); UINT uSizeofVersion2 = sizeof(ABFScopeConfig) - uSizeofVersion1; UINT uSizeofWhole = uSizeofVersion2 + uSizeofVersion1; ASSERT( uSizeofWhole == sizeof(ABFScopeConfig) ); // Prevent compiler warnings. uSizeofWhole = uSizeofWhole; // Write out section1 ABF scope configuration for backwards compatability. for( int i = 0; i < nScopes; i ++ ) { if (!pFI->Write( &pCfg[i], uSizeofVersion1 )) { pFH->lScopeConfigPtr = 0; return ErrorReturn(pnError, ABF_EDISKFULL); } } // Write the new section2 ABFScopeConfig data. for(int i = 0; i < nScopes; i ++ ) { if (!pFI->Write( (char*)&pCfg[i] + uSizeofVersion1, uSizeofVersion2 )) { pFH->lScopeConfigPtr = 0; return ErrorReturn(pnError, ABF_EDISKFULL); } } // Update the number of scopes in the header. pFH->lNumScopes = nScopes; if (!bHasData && !pFI->FillToNextBlock(&pFH->lDataSectionPtr)) return ErrorReturn(pnError, ABF_EDISKFULL); _UpdateOldDisplayEntries(pFH, pCfg); LONGLONG llHere = 0; VERIFY(pFI->Seek(0, FILE_CURRENT, &llHere)); // Update the header on disk. VERIFY(pFI->Seek( 0, FILE_BEGIN)); UINT uBytesToWrite = sizeof(ABFFileHeader); if (!pFI->Write( pFH, uBytesToWrite )) { pFH->lScopeConfigPtr = 0; return ErrorReturn(pnError, ABF_EDISKFULL); } VERIFY(pFI->Seek(llHere, FILE_BEGIN)); return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadScopeConfig // PURPOSE: Retrieves the scope configuration info from the data file. // BOOL WINAPI ABF_ReadScopeConfig(int nFile, ABFFileHeader *pFH, ABFScopeConfig *pCfg, UINT uMaxScopes, int *pnError) { ABFH_WASSERT(pFH); ARRAYASSERT(pCfg, (UINT)(pFH->lNumScopes)); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if ((pFH->lNumScopes < 1) || (pFH->lScopeConfigPtr == 0)) { pFH->lNumScopes = 1; ABFH_InitializeScopeConfig(pFH, pCfg); return TRUE; } UINT uOffset = pFH->lScopeConfigPtr * ABF_BLOCKSIZE; VERIFY(pFI->Seek( uOffset, FILE_BEGIN)); UINT uScopes = (uMaxScopes < UINT(pFH->lNumScopes)) ? uMaxScopes : UINT(pFH->lNumScopes); // The ABFScopeConfig has been extended for ABF file v1.68. // The original scope configurations defined as 'Section1' are read in first, // to keep backwards compatability. // The new configuration data, known as 'Section2' is appended after the scope configuration data // and is read last, and only for the new files that support it. UINT uSizeofSection1 = offsetof(ABFScopeConfig,nSizeofOldStructure); UINT uSizeofSection2 = sizeof(ABFScopeConfig) - uSizeofSection1; UINT uSizeofWhole = uSizeofSection2 + uSizeofSection1; ASSERT( uSizeofWhole == sizeof(ABFScopeConfig) ); // Prevent compiler warnings. uSizeofWhole = uSizeofWhole; // Read old section of the scope config structure for( int i = 0; i < pFH->lNumScopes; i ++ ) { if (!pFI->Read( &pCfg[i], uSizeofSection1)) return ErrorReturn(pnError, ABF_EREADSCOPECONFIG); } // Read the new section ABFScopeConfig structures into the buffer if( pFH->fHeaderVersionNumber >= 1.68F ) { for(int i = 0; i < pFH->lNumScopes; i++ ) { if (!pFI->Read( (char*)&pCfg[i] + uSizeofSection1, uSizeofSection2)) return ErrorReturn(pnError, ABF_EREADSCOPECONFIG); } } pFH->lNumScopes = uScopes; if (pFH->fFileVersionNumber < 1.5) { for (UINT i=0; iTestFlag(FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->FillToNextBlock(&pFH->lStatisticsConfigPtr)) return ErrorReturn(pnError, ABF_EDISKFULL); if (!pFI->Write( pCfg, sizeof(ABFScopeConfig))) { pFH->lStatisticsConfigPtr = 0; return ErrorReturn(pnError, ABF_EDISKFULL); } if (!bHasData && !pFI->FillToNextBlock(&pFH->lDataSectionPtr)) return ErrorReturn(pnError, ABF_EDISKFULL); LONGLONG llHere = 0; VERIFY(pFI->Seek(0, FILE_CURRENT, &llHere)); // Update the header on disk. VERIFY(pFI->Seek( 0, FILE_BEGIN)); if (!pFI->Write( pFH, sizeof(ABFFileHeader) )) { pFH->lStatisticsConfigPtr = 0; return ErrorReturn(pnError, ABF_EDISKFULL); } VERIFY(pFI->Seek(llHere, FILE_BEGIN)); return TRUE; } //=============================================================================================== // FUNCTION: ABF_ReadStatisticsConfig // PURPOSE: Read the scope config structure for the statistics window in form the ABF file. // BOOL WINAPI ABF_ReadStatisticsConfig( int nFile, const ABFFileHeader *pFH, ABFScopeConfig *pCfg, int *pnError) { ABFH_ASSERT(pFH); WPTRASSERT(pCfg); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (pFH->lStatisticsConfigPtr == 0) return ErrorReturn(pnError, ABF_ENOSTATISTICSCONFIG); UINT uOffset = pFH->lStatisticsConfigPtr * ABF_BLOCKSIZE; VERIFY(pFI->Seek( uOffset, FILE_BEGIN)); // The ABFScopeConfig structure has been extended for ABF file version 1.68. // If the file is a new file, reading is unaffected as only one structure is saved for the statistics config. // If the file is an older file, only the size of section1 of the scope config is read to avoid reading junk data. if( pFH->fFileVersionNumber >= 1.68F ) { if (!pFI->Read(pCfg, sizeof(ABFScopeConfig))) return ErrorReturn(pnError, ABF_EREADSTATISTICSCONFIG); } else { UINT uSizeofSection1 = offsetof(ABFScopeConfig,nSizeofOldStructure); // Read only size of version 1. if ( !pFI->Read(pCfg, uSizeofSection1 )) return ErrorReturn(pnError, ABF_EREADSTATISTICSCONFIG); } return TRUE; } //############################################################################################### //### //### Functions to read and write voice tags. //### //############################################################################################### //=============================================================================================== // FUNCTION: ABF_SaveVoiceTag // PURPOSE: Saves a reference to a temporary file containing a voice tag. // BOOL WINAPI ABF_SaveVoiceTag( int nFile, LPCSTR pszFileName, ABFLONG lDataOffset, ABFVoiceTagInfo *pVTI, int *pnError) { LPSZASSERT(pszFileName); WPTRASSERT(pVTI); // Get the file descriptor for this ABF file. CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (!pFI->SaveVoiceTag( pszFileName, lDataOffset, pVTI )) return ErrorReturn( pnError, pFI->GetLastError() ); return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetVoiceTag // PURPOSE: Retrieves a voice tag into a new file, leaving space for a header. // BOOL WINAPI ABF_GetVoiceTag( int nFile, const ABFFileHeader *pFH, UINT uTag, LPCSTR pszFileName, ABFLONG lDataOffset, ABFVoiceTagInfo *pVTI, int *pnError) { LPSZASSERT(pszFileName); WPTRASSERT(pVTI); // Get the file descriptor for this ABF file. CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; if (ABFLONG(uTag) >= pFH->lVoiceTagEntries) return ErrorReturn( pnError, ABF_EREADTAG ); if (!pFI->GetVoiceTag( uTag, pszFileName, lDataOffset, pVTI, pFH->lVoiceTagPtr )) return ErrorReturn( pnError, pFI->GetLastError() ); return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF_BuildErrorText // PURPOSE: This routine returns the last error as a text string. // BOOL WINAPI ABF_BuildErrorText(int nErrorNum, const char *szFileName, char *sTxtBuf, UINT uMaxLen) { // LPSZASSERT(szFileName); // ARRAYASSERT(sTxtBuf, uMaxLen); if (uMaxLen < 2) { // ERRORMSG("String too short!"); return FALSE; } if (nErrorNum > ABFH_FIRSTERRORNUMBER) return ABFH_GetErrorText( nErrorNum, sTxtBuf, uMaxLen); BOOL rval = TRUE; // OK return value char szTemplate[128]; #if defined(_WINDOWS) && !defined(__MINGW32__) if (!LoadStringA(g_hInstance, nErrorNum, szTemplate, sizeof(szTemplate))) #else if (!c_LoadString(g_hInstance, nErrorNum, szTemplate, sizeof(szTemplate))) #endif { char szErrorMsg[128]; #if defined(_WINDOWS) && !defined(__MINGW32__) LoadStringA(g_hInstance, IDS_ENOMESSAGESTR, szTemplate, sizeof(szTemplate)); #else c_LoadString(g_hInstance, IDS_ENOMESSAGESTR, szTemplate, sizeof(szTemplate)); #endif snprintf(szErrorMsg, sizeof(szErrorMsg), szTemplate, nErrorNum); // ERRORMSG(szErrorMsg); strncpy(sTxtBuf, szErrorMsg, uMaxLen-1); sTxtBuf[uMaxLen-1] = '\0'; rval = FALSE; } else #if defined(_WINDOWS) && !defined(__MINGW32__) _snprintf(sTxtBuf, uMaxLen, szTemplate, szFileName); #else snprintf(sTxtBuf, uMaxLen, szTemplate, szFileName); #endif return rval; } #if 0 //=============================================================================================== // FUNCTION: ABF_SetErrorCallback // PURPOSE: This routine sets a callback function to be called in the event of an error occuring. // BOOL WINAPI ABF_SetErrorCallback(int nFile, ABFCallback fnCallback, void *pvThisPointer, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; return pFI->SetErrorCallback(fnCallback, pvThisPointer); } // *********************************************************************************************** // *********************************************************************************************** // *** // *** ABF_GetSynchArray exposes an internal synch object to enable direct access to the // *** synch array by real-time data acquisition components. // *** // *********************************************************************************************** // *********************************************************************************************** //=============================================================================================== // FUNCTION: ABF_GetFileHandle // PURPOSE: Returns the DOS file handle for the ABF file. // BOOL WINAPI ABF_GetFileHandle(int nFile, HANDLE *phHandle, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; *phHandle = pFI->GetFileHandle(); return TRUE; } //=============================================================================================== // FUNCTION: ABF_GetSynchArray // PURPOSE: Returns a pointer to the CSynch object used to buffer the Synch array to disk. // Use with care!! // void *WINAPI ABF_GetSynchArray(int nFile, int *pnError) { CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return NULL; return pFI->GetSynchObject(); } // *********************************************************************************************** // *********************************************************************************************** // *** // *** Functions used to implement "modifiable ABF". // *** // *********************************************************************************************** // *********************************************************************************************** //=============================================================================================== // FUNCTION: ABF_UpdateEpisodeSamples // PURPOSE: This function updates a selection of samples in a particular episode. // NOTES: Only floating point data may be modified with this function -- integer data is sacrosanct. // Math channels may not be written to. // uStartSample is zero-based // uNumSamples os on-based. // BOOL WINAPI ABF_UpdateEpisodeSamples(int nFile, const ABFFileHeader *pFH, int nChannel, UINT uEpisode, UINT uStartSample, UINT uNumSamples, float *pfBuffer, int *pnError) { ABFH_ASSERT(pFH); ASSERT( uNumSamples > 0 ); ARRAYASSERT(pfBuffer, uNumSamples); UINT uPerChannel = (UINT)(pFH->lNumSamplesPerEpisode/pFH->nADCNumChannels); ASSERT(uStartSample+uNumSamples <= uPerChannel); // Prevent compiler warnings. uPerChannel = uPerChannel; // Writing is not allowed for two-byte integer files. ASSERT(pFH->nDataFormat != ABF_INTEGERDATA); if (pFH->nDataFormat == ABF_INTEGERDATA) return ErrorReturn(pnError, ABF_EWRITERAWDATAFILE); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Check that the episode number is in range. if (!pFI->CheckEpisodeNumber(uEpisode)) return ErrorReturn(pnError, ABF_EEPISODERANGE); // Cannot write to a math channel. if (nChannel < 0) return ErrorReturn(pnError, ABF_EWRITEMATHCHANNEL); // Get the offset into the multiplexed data array for the first point UINT uChannelOffset; if (!ABFH_GetChannelOffset(pFH, nChannel, &uChannelOffset)) return ErrorReturn(pnError, ABF_EINVALIDCHANNEL); // Set the sample size in the data. UINT uSampleSize = SampleSize(pFH); // Only create the read buffer on demand, it is freed when the file is closed. if (!pFI->GetReadBuffer()) { if (!pFI->AllocReadBuffer(pFH->lNumSamplesPerEpisode * uSampleSize)) return ErrorReturn(pnError, ABF_OUTOFMEMORY); } // Read the whole episode from the ABF file only if it is not already cached. if (uEpisode != pFI->GetCachedEpisode()) { UINT uEpisodeSize = (UINT)pFH->lNumSamplesPerEpisode; if (!ABF_MultiplexRead(nFile, pFH, uEpisode, pFI->GetReadBuffer(), &uEpisodeSize, pnError)) { pFI->SetCachedEpisode(UINT(-1), 0); return FALSE; } pFI->SetCachedEpisode(uEpisode, uEpisodeSize); } // Update the samples in the episode cache. UINT uEpisodeOffset = uStartSample * pFH->nADCNumChannels; float *pfEpisodeBuffer = (float *)pFI->GetReadBuffer() + uEpisodeOffset; float *pfData = pfEpisodeBuffer + uChannelOffset; for (UINT i=0; inADCNumChannels; } // Commit the change to file. BOOL bReadOnly = pFI->TestFlag(FI_READONLY); if (bReadOnly) VERIFY(pFI->Reopen(FALSE)); Synch SynchEntry = { 0 }; VERIFY(GetSynchEntry( pFH, pFI, uEpisode, &SynchEntry )); UINT uOffset = GetDataOffset(pFH) + SynchEntry.dwFileOffset + uEpisodeOffset * sizeof(float); pFI->Seek(uOffset, FILE_BEGIN); pFI->Write(pfEpisodeBuffer, uNumSamples*pFH->nADCNumChannels*sizeof(float)); if (bReadOnly) VERIFY(pFI->Reopen(TRUE)); return TRUE; } #endif //=============================================================================================== // FUNCTION: ABF2_SetChunkSize // PURPOSE: This routine can be called on files of type ABF_GAPFREEFILE or ABF_VARLENEVENTS to change // the size of the data chunks returned by the read routines. // INPUT: // hFile ABF file number of this file (NOT the DOS handle) // pFH the current acquisition parameters for the data file // puMaxSamples points to the requested size of data blocks to be returned. // This is only used in the case of GAPFREE and EVENT-DETECTED- // VARIABLE-LENGTH acquisitions. Otherwise the size of the // Episode is used. 80x86 limitations require this to be // less than or equal to 64k. // pdwMaxEpi The maximum number of episodes to be read. // OUTPUT: // pFH the acquisition parameters that were read from the data file // puMaxSamples the maximum number of samples that can be read contiguously // from the data file. // pdwMaxEpi the number of episodes of puMaxSamples points that exist // in the data file. // BOOL WINAPI ABF2_SetChunkSize( int nFile, ABF2FileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError ) { // ASSERT(nFile != ABF_INVALID_HANDLE); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; return ABF2_SetChunkSize( pFI, pFH, puMaxSamples, pdwMaxEpi, pnError ); } #if 0 //=============================================================================================== // FUNCTION: ABF_SetOverlap // PURPOSE: Changes the overlap flag and processes the synch array to edit redundant data out if no overlap. // BOOL WINAPI ABF_SetOverlap(int nFile, const ABFFileHeader *pFH, BOOL bAllowOverlap, int *pnError) { ASSERT(nFile != ABF_INVALID_HANDLE); ABFH_ASSERT(pFH); // Get the file descriptor. CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; return _SetOverlap(pFI, pFH, bAllowOverlap, pnError); } // *********************************************************************************************** // *********************************************************************************************** // *** // *** Functions used to read and write annotations. // *** // *********************************************************************************************** // *********************************************************************************************** //=============================================================================================== // FUNCTION: ABF_WriteAnnotation // PURPOSE: Write an annotation to the Annotations Section of the ABF file. // BOOL WINAPI ABF_WriteAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszText, int *pnError ) { ASSERT(nFile != ABF_INVALID_HANDLE); ABFH_ASSERT(pFH); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Return an error if writing is inappropriate. if (pFI->TestFlag( FI_PARAMFILE | FI_READONLY)) return ErrorReturn(pnError, ABF_EREADONLYFILE); if (!pFI->PutAnnotation( pszText)) return ErrorReturn(pnError, pFI->GetLastError()); NewFH.lNumAnnotations = pFI->GetAnnotationCount(); ABFH_DemoteHeader( pFH, &NewFH ); return TRUE; } BOOL WINAPI ABF_WriteStringAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszName, LPCSTR pszData, int *pnError ) { LPSZASSERT(pszName); LPSZASSERT(pszData); const char c_pszTag[] = ""; CArrayPtrEx Ann(strlen(pszName)+strlen(c_pszTag)+strlen(pszData)+1); if (!Ann) return ErrorReturn(pnError, ABF_OUTOFMEMORY); AXU_strncpyz(Ann, pszName, Ann.GetCount()); AXU_strncatz(Ann, c_pszTag, Ann.GetCount()); AXU_strncatz(Ann, pszData, Ann.GetCount()); return ABF_WriteAnnotation( nFile, pFH, Ann, pnError ); } BOOL WINAPI ABF_WriteIntegerAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszName, int nData, int *pnError ) { LPSZASSERT(pszName); const char c_pszTag[] = ""; CArrayPtrEx Ann(strlen(pszName)+strlen(c_pszTag)+32+1); if (!Ann) return ErrorReturn(pnError, ABF_OUTOFMEMORY); AXU_strncpyz(Ann, pszName, Ann.GetCount()); AXU_strncatz(Ann, c_pszTag, Ann.GetCount()); itoa(nData, Ann+strlen(Ann), 10); return ABF_WriteAnnotation( nFile, pFH, Ann, pnError ); } //=============================================================================================== // FUNCTION: ABF_ReadAnnotation // PURPOSE: Read an annotation to the Annotations Section of the ABF file.. // BOOL WINAPI ABF_ReadAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszText, DWORD dwBufSize, int *pnError ) { ASSERT( nFile != ABF_INVALID_HANDLE ); ABFH_ASSERT( pFH ); ARRAYASSERT( pszText, dwBufSize); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // If there are no annotations present, return an error. if( NewFH.lNumAnnotations==0 ) return ErrorReturn(pnError, ABF_ENOANNOTATIONS); // If there are annotations in the file, but not in the virtual buffer, read them now. if( (NewFH.lAnnotationSectionPtr>0) && (pFI->GetAnnotationCount() == 0) ) { if( !pFI->ReadAllAnnotations( NewFH.lAnnotationSectionPtr ) ) return ErrorReturn(pnError, ABF_EREADANNOTATION); } if( !pFI->ReadAnnotation( dwIndex, pszText, dwBufSize ) ) return ErrorReturn(pnError, ABF_EREADANNOTATION); return TRUE; } //=============================================================================================== // FUNCTION: ABF_ParseStringAnnotation // PURPOSE: This function parses a String annotation. // e.g. NameValue // BOOL WINAPI ABF_ParseStringAnnotation( LPCSTR pszAnn, LPSTR pszName, UINT uSizeName, LPSTR pszValue, UINT uSizeValue, int *pnError) { LPCSTR pszStart = pszAnn; while (*pszStart==' ') ++pszStart; LPCSTR pszEnd = strchr(pszStart, '<'); if (pszEnd) { AXU_strncpyz(pszName, pszStart, min(uSizeName, UINT(pszEnd-pszStart+1))); pszEnd = strchr(pszEnd, '>'); if (!pszEnd) return ErrorReturn(pnError, ABF_EREADANNOTATION); pszStart = pszEnd+1; } AXU_strncpyz(pszValue, pszStart, uSizeValue); return true; } //=============================================================================================== // FUNCTION: ABF_ReadStringAnnotation // PURPOSE: This function reads and parses a String annotation. // e.g. NameValue // BOOL WINAPI ABF_ReadStringAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszName, UINT uSizeName, LPSTR pszValue, UINT uSizeValue, int *pnError ) { ARRAYASSERT( pszName, uSizeName); ARRAYASSERT( pszValue, uSizeValue); UINT uLen = ABF_GetMaxAnnotationSize( nFile, pFH ); if (!uLen) return ErrorReturn(pnError, ABF_EREADANNOTATION); CArrayPtrEx Ann(uLen); if (!Ann) return ErrorReturn(pnError, ABF_OUTOFMEMORY); if (!ABF_ReadAnnotation( nFile, pFH, dwIndex, Ann, Ann.GetCount(), pnError )) return FALSE; return ABF_ParseStringAnnotation( Ann, pszName, uSizeName, pszValue, uSizeValue, pnError); } //=============================================================================================== // FUNCTION: ABF_ReadIntegerAnnotation // PURPOSE: This function reads and parses an integer annotation. // e.g. NameValue // and parses the name and value // BOOL WINAPI ABF_ReadIntegerAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszName, UINT uSizeName, int *pnValue, int *pnError ) { ARRAYASSERT( pszName, uSizeName); UINT uLen = ABF_GetMaxAnnotationSize( nFile, pFH ); if (!uLen) return ErrorReturn(pnError, ABF_EREADANNOTATION); CArrayPtrEx Ann(uLen); if (!Ann) return ErrorReturn(pnError, ABF_OUTOFMEMORY); if (!ABF_ReadAnnotation( nFile, pFH, dwIndex, Ann, Ann.GetCount(), pnError )) return FALSE; LPCSTR pszStart = AXU_StripWhiteSpace(Ann); LPCSTR pszEnd = strchr(pszStart, '<'); if (pszEnd) { AXU_strncpyz(pszName, pszStart, min(uSizeName, UINT(pszEnd-pszStart+1))); pszEnd = strchr(pszEnd, '>'); if (!pszEnd) return ErrorReturn(pnError, ABF_EREADANNOTATION); pszStart = pszEnd+1; if (pszStart[0]!='i' || pszStart[1] != ',') return ErrorReturn(pnError, ABF_EREADANNOTATION); } if (pnValue) *pnValue = atoi(pszStart); return true; } //=============================================================================================== // FUNCTION: ABF_GetMaxAnnotationSize // PURPOSE: Return the size in bytes of the largest annotation in the file. // DWORD WINAPI ABF_GetMaxAnnotationSize( int nFile, const ABFFileHeader *pFH ) { ASSERT(nFile != ABF_INVALID_HANDLE); ABFH_ASSERT( pFH ); // Take a copy of the passed in header to ensure it is 6k long. ABFFileHeader NewFH; ABFH_PromoteHeader( &NewFH, pFH ); CFileDescriptor *pFI = NULL; int nError = 0; if( !GetFileDescriptor( &pFI, nFile, &nError ) ) return 0; // If there are annotations in the file, but not in the virtual buffer, read them now. if( (NewFH.lAnnotationSectionPtr>0) && (pFI->GetAnnotationCount() == 0) ) { if( !pFI->ReadAllAnnotations( pFH->lAnnotationSectionPtr ) ) return ErrorReturn( &nError, ABF_EREADANNOTATION); } // If this file is being written, the annotations will be in the virtual buffer. if (pFI->GetAnnotationCount() > 0) return pFI->GetMaxAnnotationSize(); return 0; } //=============================================================================================== // FUNCTION: ABF_GetFileName // PURPOSE: Return the filename from a currently open file. // BOOL WINAPI ABF_GetFileName( int nFile, LPSTR pszFilename, UINT uTextLen, int *pnError ) { WARRAYASSERT( pszFilename, uTextLen ); // Get the File Descriptor. CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; AXU_strncpyz( pszFilename, pFI->GetFileName(), uTextLen ); return TRUE; } //============================================================================================== // FUNCTION: ABF_ValidateFileCRC // PURPOSE: Function to validate the file using the CRC embedded in the ABF header. // The CRC is generated at the time of writing the file and can be used to // check if the file has been modified outside the application. // RETURNS: TRUE if CRC validation is OK. // FALSE if validation failed. // BOOL WINAPI ABF_ValidateFileCRC( int nFile, int *pnError ) { int nError = 0; ABFFileHeader NewFH; CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, nFile, pnError)) return FALSE; // Read the data file parameters. if (!ABFH_ParamReader(pFI->GetFileHandle(), &NewFH, &nError)) { nError = (nError == ABFH_EUNKNOWNFILETYPE) ? ABF_EUNKNOWNFILETYPE : ABF_EBADPARAMETERS; return ErrorReturn( pnError, nError ); } // Validate checksum. if( !ValidateFileCRC( pFI, &NewFH, sizeof( ABFFileHeader ) ) ) { nError = ABF_ECRCVALIDATIONFAILED; return ErrorReturn(pnError, nError); } return TRUE; } // *********************************************************************************************** // *********************************************************************************************** // *** // *** Superceded functions. // *** // *********************************************************************************************** // *********************************************************************************************** #ifdef __cplusplus extern "C" { #endif // __cplusplus BOOL WINAPI ABF_UpdateAfterAcquisition(int nFile, ABFFileHeader *pFH, DWORD dwAcquiredEpisodes, DWORD dwAcquiredSamples, int *pnError); #ifdef __cplusplus } #endif //=============================================================================================== // FUNCTION: ABF_UpdateAfterAcquisition // PURPOSE: Update ABF internal housekeeping of acquired data, this must be called // before ABF_UpdateHeader if the file has been written to through the handle // retrieved by ABF_GetFileHandle. // BOOL WINAPI ABF_UpdateAfterAcquisition(int nFile, ABFFileHeader *pFH, DWORD dwAcquiredEpisodes, DWORD dwAcquiredSamples, int *pnError) { ABFH_ASSERT(pFH); ERRORMSG("ABF_UpdateAfterAcquisition has been retired.\n"); return FALSE; } #if 0 //=============================================================================================== // FUNCTION: ABF_AppendOpen // PURPOSE: This routine opens an existing data file for appending. // INPUT: // szFileName the name of the data file that will be opened // puMaxSamples points to the requested size of data blocks to be returned. // This is only used in the case of GAPFREE and EVENT-DETECTED- // VARIABLE-LENGTH acquisitions. Otherwise the size of the // Episode is used. 80x86 limitations require this to be // less than or equal to 64k. // pdwMaxEpi The maximum number of episodes to be read. // OUTPUT: // pFH the acquisition parameters that were read from the data file // phFile pointer to the ABF file number of this file (NOT the DOS handle) // puMaxSamples the maximum number of samples that can be read contiguously // from the data file. // pdwMaxEpi the number of episodes of puMaxSamples points that exist // in the data file. // BOOL WINAPI ABF_AppendOpen(LPCSTR szFileName, int *phFile, ABFFileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError) { LPSZASSERT(szFileName); WPTRASSERT(phFile); ABFH_WASSERT(pFH); WPTRASSERT(puMaxSamples); WPTRASSERT(pdwMaxEpi); // Open the file for reading. int hFile = ABF_INVALID_HANDLE; if (!ABF_ReadOpen(szFileName, phFile, ABF_DATAFILE, pFH, puMaxSamples, pdwMaxEpi, pnError)) return FALSE; // Get the File Descriptor. CFileDescriptor *pFI = NULL; if (!GetFileDescriptor(&pFI, *phFile, pnError)) { ABF_Close(*phFile, NULL); return FALSE; } // Fix up file descriptor etc... // if (!pFI->ChangeStatus()) // { // ABF_Close(hFile, NULL); // return ErrorReturn( pnError, ABF_EOPENFILE ); // } // Read the tags into a temporary file. if (pFH->lNumTagEntries > 0) { ERRORMSG("Transfer tags to temp file!!!"); ABF_Close(hFile, NULL); return FALSE; } // Seek to the end of the Data section. UINT uOffset = GetDataOffset(pFH) + pFH->lActualAcqLength * SampleSize(pFH); pFI->Seek( uOffset, FILE_BEGIN); return TRUE; } #endif #endif stimfit-0.17.1/src/libstfio/abf/axon/AxAbfFio32/abffiles.h000077500000000000000000000325531517235503400231060ustar00rootroot00000000000000//*********************************************************************************************** // // Copyright (c) 1993-2003 Axon Instruments. // All rights reserved. // Permission is granted to freely to use, modify and copy the code in this file. // //*********************************************************************************************** #ifndef INC_ABFFILES_H #define INC_ABFFILES_H #include "../AxAbfFio32/AxAbffio32.h" // Include the description of the ABFFileHeader structure #ifndef RC_INVOKED #include "../AxAbfFio32/abfheadr.h" #include "../../axon2/abf2headr.h" #endif #include #include "./../../../stfio.h" // #include "../AxAbfFio32/filedesc.hpp" // File descriptors for ABF files. #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ // This is ABFFILES.H; a companion file to ABFFILES.C #define ABF_INVALID_HANDLE NULL //-1 // Error numbers for routines in this module. // Only positive numbers are used. #define ABF_SUCCESS 0 #define ABF_EUNKNOWNFILETYPE 1001 #define ABF_EBADFILEINDEX 1002 #define ABF_TOOMANYFILESOPEN 1003 #define ABF_EOPENFILE 1004 #define ABF_EBADPARAMETERS 1005 #define ABF_EREADDATA 1006 #define ABF_OUTOFMEMORY 1008 #define ABF_EREADSYNCH 1009 #define ABF_EBADSYNCH 1010 #define ABF_EEPISODERANGE 1011 #define ABF_EINVALIDCHANNEL 1012 #define ABF_EEPISODESIZE 1013 #define ABF_EREADONLYFILE 1014 #define ABF_EDISKFULL 1015 #define ABF_ENOTAGS 1016 #define ABF_EREADTAG 1017 #define ABF_ENOSYNCHPRESENT 1018 #define ABF_EREADDACEPISODE 1019 #define ABF_ENOWAVEFORM 1020 #define ABF_EBADWAVEFORM 1021 #define ABF_BADMATHCHANNEL 1022 #define ABF_BADTEMPFILE 1023 #define ABF_NODOSFILEHANDLES 1025 #define ABF_ENOSCOPESPRESENT 1026 #define ABF_EREADSCOPECONFIG 1027 #define ABF_EBADCRC 1028 #define ABF_ENOCOMPRESSION 1029 #define ABF_EREADDELTA 1030 #define ABF_ENODELTAS 1031 #define ABF_EBADDELTAID 1032 #define ABF_EWRITEONLYFILE 1033 #define ABF_ENOSTATISTICSCONFIG 1034 #define ABF_EREADSTATISTICSCONFIG 1035 #define ABF_EWRITERAWDATAFILE 1036 #define ABF_EWRITEMATHCHANNEL 1037 #define ABF_EWRITEANNOTATION 1038 #define ABF_EREADANNOTATION 1039 #define ABF_ENOANNOTATIONS 1040 #define ABF_ECRCVALIDATIONFAILED 1041 // Notifications that can be passed to the registered callback function. #define ABF_NVOICETAGSTART 2000 #define ABF_NWRITEVOICETAG 2001 #define ABF_NVOICETAGEND 2002 // Constants for the ABF_ReadOpen and ABF_WriteOpen functions #define ABF_DATAFILE 0 #define ABF_PARAMFILE 1 #define ABF_ALLOWOVERLAP 2 // If this flag is not set, overlapping data in fixed-length // event-detected data will be edited out by adjustment of // the synch array. (ABF_ReadOpen only!) // Constants for ABF_MultiplexWrite #define ABF_APPEND 2 // Episodes may be appended to the current // episode when writing ABF_VARLNEEVENTS files // Constant for ABF_FormatTag #define ABF_MAXTAGFORMATLEN 84 // Start time saved in the synch array for the oscilloscope mode average sweep #define ABF_AVERAGESWEEPSTART DWORD(-1) //---------------------- Exported Function Definitions ------------------------- // Definitions of the procedures provided by Module ABFFILES.BAS BOOL ABF_Initialize(); /* void ABF_Cleanup(void); */ BOOL WINAPI ABF_ReadOpen( LPCTSTR szFileName, int *phFile, UINT fFlags, ABFFileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError ); /* BOOL WINAPI ABF_WriteOpen( LPCSTR szFileName, int *phFile, UINT fFlags, ABFFileHeader *pFH, int *pnError ); BOOL WINAPI ABF_UpdateHeader(int nFile, ABFFileHeader *pFH, int *pnError); BOOL WINAPI ABF_IsABFFile(const char *szFileName, int *pnDataFormat, int *pnError); */ BOOL WINAPI ABF_HasData(int nFile, const ABFFileHeader *pFH); BOOL WINAPI ABF_Close(int nFile, int *pnError); BOOL WINAPI ABF_MultiplexRead(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, void *pvBuffer, UINT uBufferSize, UINT *puSizeInSamples, int *pnError); BOOL WINAPI ABF2_MultiplexRead(int nFile, const ABF2FileHeader *pFH, DWORD dwEpisode, void *pvBuffer, UINT uBufferSize, UINT *puSizeInSamples, int *pnError); /* BOOL WINAPI ABF_MultiplexWrite(int nFile, ABFFileHeader *pFH, UINT uFlags, const void *pvBuffer, DWORD dwEpiStart, UINT uSizeInSamples, int *pnError); BOOL WINAPI ABF_WriteRawData(int nFile, const void *pvBuffer, DWORD dwSizeInBytes, int *pnError); */ BOOL WINAPI ABF_ReadChannel(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, Vector_float& pfBuffer, UINT *puNumSamples, int *pnError); BOOL WINAPI ABF2_ReadChannel(int nFile, const ABF2FileHeader *pFH, int nChannel, DWORD dwEpisode, Vector_float& pfBuffer, UINT *puNumSamples, int *pnError); /* BOOL WINAPI ABF_ReadRawChannel(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, void *pvBuffer, UINT *puNumSamples, int *pnError); BOOL WINAPI ABF_ReadDACFileEpi(int nFile, const ABFFileHeader *pFH, short *pnDACArray, DWORD dwEpisode, int *pnError); BOOL WINAPI ABF_ReadDACFileEpiEx(int nFile, const ABFFileHeader *pFH, short *pnDACArray, UINT nChannel, DWORD dwEpisode, int *pnError); BOOL WINAPI ABF_WriteDACFileEpi(int nFile, ABFFileHeader *pFH, const short *pnDACArray, int *pnError); BOOL WINAPI ABF_WriteDACFileEpiEx(int nFile, ABFFileHeader *pFH, UINT uDACChannel, const short *pnDACArray, int *pnError); BOOL WINAPI ABF_GetWaveform(int nFile, const ABFFileHeader *pFH, int nADCChannel, DWORD dwEpisode, float *pfBuffer, int *pnError); BOOL WINAPI ABF_GetWaveformEx(int nFile, const ABFFileHeader *pFH, UINT uDACChannel, DWORD dwEpisode, float *pfBuffer, int *pnError); BOOL WINAPI ABF_WriteTag(int nFile, ABFFileHeader *pFH, const ABFTag *pTag, int *pnError); BOOL WINAPI ABF_UpdateTag(int nFile, UINT uTag, const ABFTag *pTag, int *pnError); BOOL WINAPI ABF_ReadTags(int nFile, const ABFFileHeader *pFH, DWORD dwFirstTag, ABFTag *pTagArray, UINT uNumTags, int *pnError); BOOL WINAPI ABF_FormatTag(int nFile, const ABFFileHeader *pFH, ABFLONG lTagNumber, char *pszBuffer, UINT uSize, int *pnError); BOOL WINAPI ABF_EpisodeFromSynchCount(int nFile, const ABFFileHeader *pFH, DWORD *pdwSynchCount, DWORD *pdwEpisode, int *pnError); BOOL WINAPI ABF_SynchCountFromEpisode(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwSynchCount, int *pnError); BOOL WINAPI ABF_GetEpisodeFileOffset(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwFileOffset, int *pnError); BOOL WINAPI ABF_GetMissingSynchCount(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, DWORD *pdwMissingSynchCount, int *pnError); BOOL WINAPI ABF_HasOverlappedData(int nFile, BOOL *pbHasOverlapped, int *pnError); */ BOOL WINAPI ABF_GetNumSamples(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, UINT *puNumSamples, int *pnError); BOOL WINAPI ABF2_GetNumSamples(int nFile, const ABF2FileHeader *pFH, DWORD dwEpisode, UINT *puNumSamples, int *pnError); /* BOOL WINAPI ABF_GetStartTime(int nFile, const ABFFileHeader *pFH, int nChannel, DWORD dwEpisode, double *pdStartTime, int *pnError); BOOL WINAPI ABF_GetEpisodeDuration(int nFile, const ABFFileHeader *pFH, DWORD dwEpisode, double *pdDuration, int *pnError); BOOL WINAPI ABF_GetTrialDuration(int nFile, const ABFFileHeader *pFH, double *pdDuration, int *pnError); BOOL WINAPI ABF_WriteScopeConfig( int nFile, ABFFileHeader *pFH, int nScopes, const ABFScopeConfig *pCfg, int *pnError); BOOL WINAPI ABF_ReadScopeConfig( int nFile, ABFFileHeader *pFH, ABFScopeConfig *pCfg, UINT uMaxScopes, int *pnError); BOOL WINAPI ABF_WriteStatisticsConfig( int nFile, ABFFileHeader *pFH, const ABFScopeConfig *pCfg, int *pnError); BOOL WINAPI ABF_ReadStatisticsConfig( int nFile, const ABFFileHeader *pFH, ABFScopeConfig *pCfg, int *pnError); BOOL WINAPI ABF_SaveVoiceTag( int nFile, LPCSTR pszFileName, ABFLONG lDataOffset, ABFVoiceTagInfo *pVTI, int *pnError); BOOL WINAPI ABF_GetVoiceTag( int nFile, const ABFFileHeader *pFH, UINT uTag, LPCSTR pszFileName, ABFLONG lDataOffset, ABFVoiceTagInfo *pVTI, int *pnError); BOOL WINAPI ABF_PlayVoiceTag( int nFile, const ABFFileHeader *pFH, UINT uTag, int *pnError); BOOL WINAPI ABF_WriteDelta(int nFile, ABFFileHeader *pFH, const ABFDelta *pDelta, int *pnError); BOOL WINAPI ABF_ReadDeltas(int nFile, const ABFFileHeader *pFH, DWORD dwFirstDelta, ABFDelta *pDeltaArray, UINT uNumDeltas, int *pnError); BOOL WINAPI ABF_FormatDelta(const ABFFileHeader *pFH, const ABFDelta *pDelta, char *pszText, UINT uTextLen, int *pnError); BOOL WINAPI ABF_GetFileHandle(int nFile, HANDLE *phHandle, int *pnError); BOOL WINAPI ABF_GetFileName( int nFile, LPSTR pszFilename, UINT uTextLen, int *pnError ); */ BOOL WINAPI ABF_BuildErrorText(int nErrorNum, const char *szFileName, char *sTxtBuf, UINT uMaxLen); /* typedef BOOL (CALLBACK *ABFCallback)(void *pvThisPointer, int nError); BOOL WINAPI ABF_SetErrorCallback(int nFile, ABFCallback fnCallback, void *pvThisPointer, int *pnError); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BOOL WINAPI ABF_AppendOpen(LPCSTR szFileName, int *phFile, ABFFileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError); BOOL WINAPI ABF_UpdateEpisodeSamples(int nFile, const ABFFileHeader *pFH, int nChannel, UINT uEpisode, UINT uStartSample, UINT uNumSamples, float *pfBuffer, int *pnError); */ BOOL WINAPI ABF2_SetChunkSize( int hFile, ABF2FileHeader *pFH, UINT *puMaxSamples, DWORD *pdwMaxEpi, int *pnError ); /* BOOL WINAPI ABF_SetOverlap(int nFile, const ABFFileHeader *pFH, BOOL bAllowOverlap, int *pnError); BOOL WINAPI ABF_SetEpisodeStart(int nFile, UINT uEpisode, UINT uEpiStart, int *pnError); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void *WINAPI ABF_GetSynchArray(int nFile, int *pnError); BOOL WINAPI ABF_WriteAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszText, int *pnError ); BOOL WINAPI ABF_ReadAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszText, DWORD dwBufSize, int *pnError ); DWORD WINAPI ABF_GetMaxAnnotationSize( int nFile, const ABFFileHeader *pFH ); BOOL WINAPI ABF_WriteStringAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszName, LPCSTR pszData, int *pnError ); BOOL WINAPI ABF_WriteIntegerAnnotation( int nFile, ABFFileHeader *pFH, LPCSTR pszName, int nData, int *pnError ); BOOL WINAPI ABF_ReadStringAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszName, UINT uSizeName, LPSTR pszValue, UINT uSizeValue, int *pnError ); BOOL WINAPI ABF_ReadIntegerAnnotation( int nFile, const ABFFileHeader *pFH, DWORD dwIndex, LPSTR pszName, UINT uSizeName, int *pnValue, int *pnError ); BOOL WINAPI ABF_ParseStringAnnotation( LPCSTR pszAnn, LPSTR pszName, UINT uSizeName, LPSTR pszValue, UINT uSizeValue, int *pnError); BOOL WINAPI ABF_ValidateFileCRC( int nFile, int *pnError ); */ //=============================================================================================== // Macros and functions to deal with returning error return codes through a pointer if given. #define ERRORRETURN(p, e) return ErrorReturn(p, e); // BOOL ErrorReturn(int *pnError, int nErrorNum); //=============================================================================================== // FUNCTION: GetNewFileDescriptor // PURPOSE: Allocate a new file descriptor and return it. // #ifdef __cplusplus } #endif #endif // INC_ABFFILES_H stimfit-0.17.1/src/libstfio/abf/axon/AxAbfFio32/abfheadr.cpp000077500000000000000000001653121517235503400234220ustar00rootroot00000000000000//*********************************************************************************************** // // Copyright (c) 1993-2000 Axon Instruments. // All rights reserved. // Permission is granted to freely to use, modify and copy the code in this file. // //*********************************************************************************************** // This is ABFHEADR.CPP; the routines that cope with reading the data file // parameters block for all AXON pCLAMP binary file formats. // // An ANSI C compiler should be used for compilation. // Compile with the large memory model option. // (e.g. CL -c -AL ABFHEADR.C) #include "../Common/wincpp.hpp" #include "abfheadr.h" // header definition & constants #include "oldheadr.h" // old header conversion prototypes #include "abfutil.h" // Large memory allocation/free #include /* #include "StringResource.h" // Access to string resources. */ #define A_VERY_SMALL_NUMBER 1E-10 #define DEFAULT_LEVEL_HYSTERESIS 64 // Two LSBits of level hysteresis. #define DEFAULT_TIME_HYSTERESIS 1 // Two sequences of time hysteresis. #if !defined(_WINDOWS) || defined(__MINGW32__) || defined(__STF__) #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif const char c_szValidOperators[] = "+-*/"; const ABFLONG c_lMaxShort = 30000; //----------------------------------------------------------------------------------------------- // Uncomment the following line to display interface structure sizes. //#define SHOW_STRUCT_SIZES 1 //----------------------------------------------------------------------------------------------- // Macros and functions to deal with returning error return codes through a pointer if given. #define ERRORRETURN(p, e) return ErrorReturn(p, e); static BOOL ErrorReturn(int *pnError, int nErrorNum) { if (pnError) *pnError = nErrorNum; return FALSE; } static void CopyCStringTruncated(char *dest, size_t destSize, const char *src, size_t srcMaxLen) { if ((dest == NULL) || (destSize == 0)) return; if (src == NULL) { dest[0] = '\0'; return; } size_t copyLen = strnlen(src, srcMaxLen); if (copyLen >= destSize) copyLen = destSize - 1; memcpy(dest, src, copyLen); dest[copyLen] = '\0'; } //=============================================================================================== // FUNCTION: ABFH_Initialize // PURPOSE: Initialize an ABFFileHeader structure to a consistent set of parameters // void WINAPI ABFH_Initialize( ABFFileHeader *pFH ) { // ABFH_WASSERT(pFH); int i; ABFFileHeader NewFH{}; ABFH_PromoteHeader( &NewFH, pFH ); // Blank fill all strings. ABF_BLANK_FILL(NewFH._sParamValueList); ABF_BLANK_FILL(NewFH.sADCChannelName); ABF_BLANK_FILL(NewFH.sADCUnits); ABF_BLANK_FILL(NewFH.sDACChannelName); ABF_BLANK_FILL(NewFH.sDACChannelUnits); ABF_BLANK_FILL(NewFH.sDACFilePath[0]); ABF_BLANK_FILL(NewFH.sDACFilePath[1]); ABF_SET_STRING(NewFH.sArithmeticOperator, "+"); ABF_BLANK_FILL(NewFH.sArithmeticUnits); NewFH.lFileSignature = ABF_NATIVESIGNATURE; NewFH.fFileVersionNumber = ABF_CURRENTVERSION; NewFH.fHeaderVersionNumber = ABF_CURRENTVERSION; NewFH.nOperationMode = ABF_GAPFREEFILE; NewFH.nADCNumChannels = 1; NewFH.fADCSampleInterval = 100.0F; NewFH.lNumSamplesPerEpisode = 512; NewFH.lEpisodesPerRun = 1; NewFH.lDataSectionPtr = sizeof(ABFFileHeader) / ABF_BLOCKSIZE; NewFH.nDrawingStrategy = ABF_DRAW_REALTIME; NewFH.nTiledDisplay = ABF_DISPLAY_TILED; NewFH.nEraseStrategy = 1; NewFH.nDataDisplayMode = ABF_DRAW_LINES; NewFH.nMultiColor = TRUE; NewFH.nFileType = ABF_ABFFILE; NewFH.nAutoTriggerStrategy = 1; // Allow auto triggering. NewFH.nChannelStatsStrategy = 0; // Don't calculate channel statistics. NewFH.fStatisticsPeriod = 1.0F; NewFH.lCalculationPeriod = ABFLONG(NewFH.fStatisticsPeriod / NewFH.fADCSampleInterval * 1E3F); NewFH.lStatisticsMeasurements = ABF_STATISTICS_ABOVETHRESHOLD | ABF_STATISTICS_MEANOPENTIME; NewFH.lSamplesPerTrace = 16384; NewFH.lPreTriggerSamples = 16; // default to 16 NewFH.fADCRange = 10.24F; NewFH.fDACRange = 10.24F; NewFH.lADCResolution = 32768L; NewFH.lDACResolution = 32768L; NewFH.nExperimentType = ABF_SIMPLEACQUISITION; ABF_BLANK_FILL(NewFH.sCreatorInfo); ABF_BLANK_FILL(NewFH.sModifierInfo); ABF_BLANK_FILL(NewFH.sFileComment); // ADC channel data for (i=0; inOperationMode) { case ABF_FIXLENEVENTS: case ABF_VARLENEVENTS: case ABF_GAPFREEFILE: return ABF_CONTINUOUSMODE; case ABF_HIGHSPEEDOSC: case ABF_WAVEFORMFILE: return ABF_EPISODICMODE; default: ERRORMSG1("Unexpected operation mode '%d'.", pFH->nOperationMode); return ABF_EPISODICMODE; } } //=============================================================================================== // FUNCTION: SetupSignal // PURPOSE: Sets up a signal descriptor from display parameters in an old ABF header. // static void _SetupSignal(const ABFFileHeader *pFH, ABFSignal *pS, UINT uMxOffset, UINT uTraces) { memset(pS, 0, sizeof(ABFSignal)); int nChannel = pFH->nADCSamplingSeq[uMxOffset]; ABFU_GetABFString(pS->szName, ABF_ADCNAMELEN+1, pFH->sADCChannelName[nChannel], ABF_ADCNAMELEN); pS->nMxOffset = short(uMxOffset); pS->rgbColor = RGB_BLUE; pS->nPenWidth = 1; pS->bDrawPoints = char(!pFH->nDataDisplayMode); pS->bHidden = FALSE; pS->bFloatData = FALSE; pS->fVertProportion = 1.0F / float(uTraces); pS->fDisplayGain = pFH->fADCDisplayAmplification[nChannel]; pS->fDisplayOffset = pFH->fADCDisplayOffset[nChannel]; } //=============================================================================================== // FUNCTION: SetupMathSignal // PURPOSE: Sets up a signal descriptor for a math channel from parameters in an ABF header. // static void _SetupMathSignal(const ABFFileHeader *pFH, ABFSignal *pS, UINT uTraces) { memset(pS, 0, sizeof(ABFSignal)); LoadString(g_hInstance, IDS_MATHCHANNEL, pS->szName, sizeof(pS->szName)); pS->nMxOffset = 0; pS->rgbColor = RGB_BLUE; pS->nPenWidth = 1; pS->bDrawPoints = char(!pFH->nDataDisplayMode); pS->bHidden = FALSE; pS->bFloatData = TRUE; pS->fVertProportion = 1.0F / float(uTraces); pS->fDisplayGain = 1.0F; pS->fDisplayOffset = 0.0F; } //=============================================================================================== // FUNCTION: MathChannelEnabled // PURPOSE: Returns TRUE if the math channel is enabled. // static BOOL MathChannelEnabled(const ABFFileHeader *pFH) { return (pFH->nArithmeticEnable && (pFH->nADCNumChannels < ABF_ADCCOUNT)); } //=============================================================================================== // FUNCTION: _GetTraceCount // PURPOSE: Gets the number of traces that should be displayed for this acquisition. // static UINT _GetTraceCount(const ABFFileHeader *pFH, BOOL *pbMathChannel=NULL) { UINT uTraces = UINT(pFH->nADCNumChannels); BOOL bMathChannel = MathChannelEnabled(pFH); if (bMathChannel) uTraces++; if (pbMathChannel) *pbMathChannel = bMathChannel; return uTraces; } //=============================================================================================== // FUNCTION: ABFH_InitializeScopeConfig // PURPOSE: Sets up a scope configuration structure from the old header locations for display // parameters. // void WINAPI ABFH_InitializeScopeConfig(const ABFFileHeader *pFH, ABFScopeConfig *pCfg) { // Zapp everything! memset(pCfg, 0, sizeof(*pCfg)); // Enable SC_CLIPPING pCfg->dwFlags = 0x00000008; // Set the scope mode. pCfg->wScopeMode = _GetDefaultScopeMode(pFH); // Set up the first ScopeConfig structure. pCfg->rgbColor[ABF_BACKGROUNDCOLOR] = RGB_WHITE; pCfg->rgbColor[ABF_GRIDCOLOR] = RGB_LTGRAY; pCfg->rgbColor[ABF_THRESHOLDCOLOR] = RGB_DKRED; pCfg->rgbColor[ABF_EVENTMARKERCOLOR]= RGB_RED; pCfg->rgbColor[ABF_SEPARATORCOLOR] = RGB_BLACK; pCfg->rgbColor[ABF_AVERAGECOLOR] = RGB_RED; pCfg->rgbColor[ABF_OLDDATACOLOR] = RGB_LTGRAY; pCfg->rgbColor[ABF_TEXTCOLOR] = RGB_BLACK; pCfg->rgbColor[ABF_AXISCOLOR] = GetSysColor(COLOR_3DFACE); pCfg->rgbColor[ABF_ACTIVEAXISCOLOR] = GetSysColor(COLOR_3DSHADOW); pCfg->fDisplayStart = 0.0F; // If fDisplayStart==fDisplayEnd a default pCfg->fDisplayEnd = 0.0F; // display scaling will be used. pCfg->nYAxisWidth = -1; pCfg->nEraseStrategy = ABF_ERASE_EACHRUN; // Set the Signals in the first scope configuration to match the // old entries in the header. BOOL bMathChannel = FALSE; UINT uTraces = _GetTraceCount(pFH, &bMathChannel); UINT uNormalTraces = uTraces; if (bMathChannel) uNormalTraces--; UINT i; for (i=0; iTraceList+i, i, uTraces); if (bMathChannel) _SetupMathSignal(pFH, pCfg->TraceList+i, uTraces); pCfg->nTraceCount = short(uTraces); // Initialize the extended ABFScopeConfig fields for ABF file version 1.68. pCfg->nAutoZeroState = 0; pCfg->nSizeofOldStructure = pCfg->nSizeofOldStructure; pCfg->rgbColorEx[ ABF_STATISTICS_REGION0 ] = RGB_BLACK; pCfg->rgbColorEx[ ABF_STATISTICS_REGION1 ] = RGB_DKRED; pCfg->rgbColorEx[ ABF_STATISTICS_REGION2 ] = RGB_DKGREEN; pCfg->rgbColorEx[ ABF_STATISTICS_REGION3 ] = RGB_DKYELLOW; pCfg->rgbColorEx[ ABF_STATISTICS_REGION4 ] = RGB_DKBLUE; pCfg->rgbColorEx[ ABF_STATISTICS_REGION5 ] = RGB_MAUVE; pCfg->rgbColorEx[ ABF_STATISTICS_REGION6 ] = RGB_BLUEGRAY; pCfg->rgbColorEx[ ABF_STATISTICS_REGION7 ] = RGB_DKGRAY; pCfg->rgbColorEx[ ABF_BASELINE_REGION ] = RGB_RED; pCfg->rgbColorEx[ ABF_STOREDSWEEPCOLOR ] = RGB_BLUEGRAY; } //=============================================================================================== // FUNCTION: SetMxOffset // PURPOSE: Returns TRUE if the passed signal is still in the sampling sequence. // static BOOL SetMxOffset(const ABFFileHeader *pFH, ABFSignal *pS) { // Initialize to failure case. pS->nMxOffset = -1; if (!pS->bFloatData) { char szName[ABF_ADCNAMELEN+1]; for (int i=0; inADCNumChannels); i++) { int nChannel = pFH->nADCSamplingSeq[i]; ABFU_GetABFString(szName, sizeof(szName), pFH->sADCChannelName[nChannel], ABF_ADCNAMELEN); if (strcmp(pS->szName, szName)==0) { pS->nMxOffset = short(i); break; } } } else if (MathChannelEnabled(pFH)) pS->nMxOffset = 0; return (pS->nMxOffset != -1); } //=============================================================================================== // FUNCTION: ABFH_CheckScopeConfig // PURPOSE: Checks a scope configuration structure against an ABFFileHeader structure, making // sure that both reference the same signals, in the same multiplex sequence. // RETURNS: FALSE if the configuration structure specified an innappropriate Scope mode. // BOOL WINAPI ABFH_CheckScopeConfig(ABFFileHeader *pFH, ABFScopeConfig *pCfg) { ASSERT(pFH->nADCNumChannels > 0); // Search through the ABFScopeConfig trace list to see if all signals are // included in the sampling list. BOOL bMathChannel = FALSE; UINT uNewTraceCount = _GetTraceCount(pFH, &bMathChannel); UINT uOldTraceCount = UINT(pCfg->nTraceCount); UINT uOldVisibleTraceCount = uOldTraceCount; UINT uGaps = 0; ABFSignal *pS = pCfg->TraceList; for (UINT i=0; i